1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx | FileCheck %s --check-prefix=CHECK --check-prefix=X32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx | FileCheck %s --check-prefix=CHECK --check-prefix=X64 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine void @and_masks(<8 x float>* %a, <8 x float>* %b, <8 x float>* %c) nounwind uwtable noinline ssp { 6*9880d681SAndroid Build Coastguard Worker; X32-LABEL: and_masks: 7*9880d681SAndroid Build Coastguard Worker; X32: ## BB#0: 8*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 9*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx 10*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %edx 11*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vmovups (%edx), %ymm0 12*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vmovups (%ecx), %ymm1 13*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vcmpltps %ymm0, %ymm1, %ymm1 14*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vmovups (%eax), %ymm2 15*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vcmpltps %ymm0, %ymm2, %ymm0 16*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vandps %ymm1, %ymm0, %ymm0 17*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vandps LCPI0_0, %ymm0, %ymm0 18*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vmovaps %ymm0, (%eax) 19*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vzeroupper 20*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 21*9880d681SAndroid Build Coastguard Worker; 22*9880d681SAndroid Build Coastguard Worker; X64-LABEL: and_masks: 23*9880d681SAndroid Build Coastguard Worker; X64: ## BB#0: 24*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vmovups (%rdi), %ymm0 25*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vmovups (%rsi), %ymm1 26*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vcmpltps %ymm0, %ymm1, %ymm1 27*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vmovups (%rdx), %ymm2 28*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vcmpltps %ymm0, %ymm2, %ymm0 29*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vandps %ymm1, %ymm0, %ymm0 30*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 31*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vmovaps %ymm0, (%rax) 32*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vzeroupper 33*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 34*9880d681SAndroid Build Coastguard Worker %v0 = load <8 x float>, <8 x float>* %a, align 16 35*9880d681SAndroid Build Coastguard Worker %v1 = load <8 x float>, <8 x float>* %b, align 16 36*9880d681SAndroid Build Coastguard Worker %m0 = fcmp olt <8 x float> %v1, %v0 37*9880d681SAndroid Build Coastguard Worker %v2 = load <8 x float>, <8 x float>* %c, align 16 38*9880d681SAndroid Build Coastguard Worker %m1 = fcmp olt <8 x float> %v2, %v0 39*9880d681SAndroid Build Coastguard Worker %mand = and <8 x i1> %m1, %m0 40*9880d681SAndroid Build Coastguard Worker %r = zext <8 x i1> %mand to <8 x i32> 41*9880d681SAndroid Build Coastguard Worker store <8 x i32> %r, <8 x i32>* undef, align 32 42*9880d681SAndroid Build Coastguard Worker ret void 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerdefine void @neg_masks(<8 x float>* %a, <8 x float>* %b, <8 x float>* %c) nounwind uwtable noinline ssp { 46*9880d681SAndroid Build Coastguard Worker; X32-LABEL: neg_masks: 47*9880d681SAndroid Build Coastguard Worker; X32: ## BB#0: 48*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 49*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx 50*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vmovups (%ecx), %ymm0 51*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vcmpltps (%eax), %ymm0, %ymm0 52*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vmovaps {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1] 53*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vxorps %ymm1, %ymm0, %ymm0 54*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vandps %ymm1, %ymm0, %ymm0 55*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vmovaps %ymm0, (%eax) 56*9880d681SAndroid Build Coastguard Worker; X32-NEXT: vzeroupper 57*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 58*9880d681SAndroid Build Coastguard Worker; 59*9880d681SAndroid Build Coastguard Worker; X64-LABEL: neg_masks: 60*9880d681SAndroid Build Coastguard Worker; X64: ## BB#0: 61*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vmovups (%rsi), %ymm0 62*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vcmpltps (%rdi), %ymm0, %ymm0 63*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vmovaps {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1] 64*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vxorps %ymm1, %ymm0, %ymm0 65*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vandps %ymm1, %ymm0, %ymm0 66*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vmovaps %ymm0, (%rax) 67*9880d681SAndroid Build Coastguard Worker; X64-NEXT: vzeroupper 68*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 69*9880d681SAndroid Build Coastguard Worker %v0 = load <8 x float>, <8 x float>* %a, align 16 70*9880d681SAndroid Build Coastguard Worker %v1 = load <8 x float>, <8 x float>* %b, align 16 71*9880d681SAndroid Build Coastguard Worker %m0 = fcmp olt <8 x float> %v1, %v0 72*9880d681SAndroid Build Coastguard Worker %mand = xor <8 x i1> %m0, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1> 73*9880d681SAndroid Build Coastguard Worker %r = zext <8 x i1> %mand to <8 x i32> 74*9880d681SAndroid Build Coastguard Worker store <8 x i32> %r, <8 x i32>* undef, align 32 75*9880d681SAndroid Build Coastguard Worker ret void 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78