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=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdeclare void @f() 5*9880d681SAndroid Build Coastguard Workerdefine <4 x i1> @test_4i1(<4 x i32> %a, <4 x i32> %b) { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_4i1: 7*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pushq %rax 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: Ltmp0: 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .cfi_def_cfa_offset 16 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpnleud %xmm1, %xmm0, %k0 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) ## 2-byte Folded Spill 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtd %xmm1, %xmm0, %k0 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) ## 2-byte Folded Spill 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: callq _f 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw {{[0-9]+}}(%rsp), %k0 ## 2-byte Folded Reload 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw {{[0-9]+}}(%rsp), %k1 ## 2-byte Folded Reload 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: korw %k1, %k0, %k0 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2d %k0, %xmm0 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: popq %rax 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker %cmp_res = icmp ugt <4 x i32> %a, %b 24*9880d681SAndroid Build Coastguard Worker %cmp_res2 = icmp sgt <4 x i32> %a, %b 25*9880d681SAndroid Build Coastguard Worker call void @f() 26*9880d681SAndroid Build Coastguard Worker %res = or <4 x i1> %cmp_res, %cmp_res2 27*9880d681SAndroid Build Coastguard Worker ret <4 x i1> %res 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test_8i1(<8 x i32> %a, <8 x i32> %b) { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_8i1: 32*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pushq %rax 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: Ltmp1: 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .cfi_def_cfa_offset 16 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpnleud %ymm1, %ymm0, %k0 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) ## 2-byte Folded Spill 38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtd %ymm1, %ymm0, %k0 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) ## 2-byte Folded Spill 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: callq _f 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw {{[0-9]+}}(%rsp), %k0 ## 2-byte Folded Reload 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw {{[0-9]+}}(%rsp), %k1 ## 2-byte Folded Reload 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: korb %k1, %k0, %k0 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2w %k0, %xmm0 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: popq %rax 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker %cmp_res = icmp ugt <8 x i32> %a, %b 49*9880d681SAndroid Build Coastguard Worker %cmp_res2 = icmp sgt <8 x i32> %a, %b 50*9880d681SAndroid Build Coastguard Worker call void @f() 51*9880d681SAndroid Build Coastguard Worker %res = or <8 x i1> %cmp_res, %cmp_res2 52*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %res 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine <16 x i1> @test_16i1(<16 x i32> %a, <16 x i32> %b) { 56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_16i1: 57*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pushq %rax 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: Ltmp2: 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .cfi_def_cfa_offset 16 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpnleud %zmm1, %zmm0, %k0 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) ## 2-byte Folded Spill 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtd %zmm1, %zmm0, %k0 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) ## 2-byte Folded Spill 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: callq _f 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw {{[0-9]+}}(%rsp), %k0 ## 2-byte Folded Reload 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw {{[0-9]+}}(%rsp), %k1 ## 2-byte Folded Reload 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: korw %k1, %k0, %k0 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2b %k0, %xmm0 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: popq %rax 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 72*9880d681SAndroid Build Coastguard Worker %cmp_res = icmp ugt <16 x i32> %a, %b 73*9880d681SAndroid Build Coastguard Worker %cmp_res2 = icmp sgt <16 x i32> %a, %b 74*9880d681SAndroid Build Coastguard Worker call void @f() 75*9880d681SAndroid Build Coastguard Worker %res = or <16 x i1> %cmp_res, %cmp_res2 76*9880d681SAndroid Build Coastguard Worker ret <16 x i1> %res 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerdefine <32 x i1> @test_32i1(<32 x i16> %a, <32 x i16> %b) { 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_32i1: 81*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pushq %rax 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: Ltmp3: 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .cfi_def_cfa_offset 16 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpnleuw %zmm1, %zmm0, %k0 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd %k0, {{[0-9]+}}(%rsp) ## 4-byte Folded Spill 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtw %zmm1, %zmm0, %k0 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd %k0, (%rsp) ## 4-byte Folded Spill 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: callq _f 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd {{[0-9]+}}(%rsp), %k0 ## 4-byte Folded Reload 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovd (%rsp), %k1 ## 4-byte Folded Reload 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kord %k1, %k0, %k0 93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2b %k0, %ymm0 94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: popq %rax 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 96*9880d681SAndroid Build Coastguard Worker %cmp_res = icmp ugt <32 x i16> %a, %b 97*9880d681SAndroid Build Coastguard Worker %cmp_res2 = icmp sgt <32 x i16> %a, %b 98*9880d681SAndroid Build Coastguard Worker call void @f() 99*9880d681SAndroid Build Coastguard Worker %res = or <32 x i1> %cmp_res, %cmp_res2 100*9880d681SAndroid Build Coastguard Worker ret <32 x i1> %res 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerdefine <64 x i1> @test_64i1(<64 x i8> %a, <64 x i8> %b) { 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_64i1: 105*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: subq $24, %rsp 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: Ltmp4: 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .cfi_def_cfa_offset 32 109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpnleub %zmm1, %zmm0, %k0 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %k0, {{[0-9]+}}(%rsp) ## 8-byte Folded Spill 111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtb %zmm1, %zmm0, %k0 112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %k0, {{[0-9]+}}(%rsp) ## 8-byte Folded Spill 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: callq _f 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq {{[0-9]+}}(%rsp), %k0 ## 8-byte Folded Reload 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq {{[0-9]+}}(%rsp), %k1 ## 8-byte Folded Reload 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: korq %k1, %k0, %k0 117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2b %k0, %zmm0 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addq $24, %rsp 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Worker %cmp_res = icmp ugt <64 x i8> %a, %b 122*9880d681SAndroid Build Coastguard Worker %cmp_res2 = icmp sgt <64 x i8> %a, %b 123*9880d681SAndroid Build Coastguard Worker call void @f() 124*9880d681SAndroid Build Coastguard Worker %res = or <64 x i1> %cmp_res, %cmp_res2 125*9880d681SAndroid Build Coastguard Worker ret <64 x i1> %res 126*9880d681SAndroid Build Coastguard Worker} 127