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 -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw -mattr=+avx512vl --show-mc-encoding| FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_256_1(i8 * %addr) { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_256_1: 6*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu8 (%rdi), %ymm0 ## encoding: [0x62,0xf1,0x7f,0x28,0x6f,0x07] 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 9*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <32 x i8>* 10*9880d681SAndroid Build Coastguard Worker %res = load <32 x i8>, <32 x i8>* %vaddr, align 1 11*9880d681SAndroid Build Coastguard Worker ret <32 x i8>%res 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine void @test_256_2(i8 * %addr, <32 x i8> %data) { 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_256_2: 16*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu8 %ymm0, (%rdi) ## encoding: [0x62,0xf1,0x7f,0x28,0x7f,0x07] 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 19*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <32 x i8>* 20*9880d681SAndroid Build Coastguard Worker store <32 x i8>%data, <32 x i8>* %vaddr, align 1 21*9880d681SAndroid Build Coastguard Worker ret void 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_256_3(i8 * %addr, <32 x i8> %old, <32 x i8> %mask1) { 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_256_3: 26*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %ymm2, %ymm2, %ymm2 ## encoding: [0x62,0xf1,0x6d,0x28,0xef,0xd2] 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqb %ymm2, %ymm1, %k1 ## encoding: [0x62,0xf3,0x75,0x28,0x3f,0xca,0x04] 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmb (%rdi), %ymm0, %ymm0 {%k1} ## encoding: [0x62,0xf2,0x7d,0x29,0x66,0x07] 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 31*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <32 x i8> %mask1, zeroinitializer 32*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <32 x i8>* 33*9880d681SAndroid Build Coastguard Worker %r = load <32 x i8>, <32 x i8>* %vaddr, align 1 34*9880d681SAndroid Build Coastguard Worker %res = select <32 x i1> %mask, <32 x i8> %r, <32 x i8> %old 35*9880d681SAndroid Build Coastguard Worker ret <32 x i8>%res 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_256_4(i8 * %addr, <32 x i8> %mask1) { 39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_256_4: 40*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %ymm1, %ymm1, %ymm1 ## encoding: [0x62,0xf1,0x75,0x28,0xef,0xc9] 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqb %ymm1, %ymm0, %k1 ## encoding: [0x62,0xf3,0x7d,0x28,0x3f,0xc9,0x04] 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu8 (%rdi), %ymm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7f,0xa9,0x6f,0x07] 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 45*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <32 x i8> %mask1, zeroinitializer 46*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <32 x i8>* 47*9880d681SAndroid Build Coastguard Worker %r = load <32 x i8>, <32 x i8>* %vaddr, align 1 48*9880d681SAndroid Build Coastguard Worker %res = select <32 x i1> %mask, <32 x i8> %r, <32 x i8> zeroinitializer 49*9880d681SAndroid Build Coastguard Worker ret <32 x i8>%res 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_256_5(i8 * %addr) { 53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_256_5: 54*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu16 (%rdi), %ymm0 ## encoding: [0x62,0xf1,0xff,0x28,0x6f,0x07] 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 57*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <16 x i16>* 58*9880d681SAndroid Build Coastguard Worker %res = load <16 x i16>, <16 x i16>* %vaddr, align 1 59*9880d681SAndroid Build Coastguard Worker ret <16 x i16>%res 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine void @test_256_6(i8 * %addr, <16 x i16> %data) { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_256_6: 64*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu16 %ymm0, (%rdi) ## encoding: [0x62,0xf1,0xff,0x28,0x7f,0x07] 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 67*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <16 x i16>* 68*9880d681SAndroid Build Coastguard Worker store <16 x i16>%data, <16 x i16>* %vaddr, align 1 69*9880d681SAndroid Build Coastguard Worker ret void 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_256_7(i8 * %addr, <16 x i16> %old, <16 x i16> %mask1) { 73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_256_7: 74*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %ymm2, %ymm2, %ymm2 ## encoding: [0x62,0xf1,0x6d,0x28,0xef,0xd2] 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqw %ymm2, %ymm1, %k1 ## encoding: [0x62,0xf3,0xf5,0x28,0x3f,0xca,0x04] 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmw (%rdi), %ymm0, %ymm0 {%k1} ## encoding: [0x62,0xf2,0xfd,0x29,0x66,0x07] 78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 79*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i16> %mask1, zeroinitializer 80*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <16 x i16>* 81*9880d681SAndroid Build Coastguard Worker %r = load <16 x i16>, <16 x i16>* %vaddr, align 1 82*9880d681SAndroid Build Coastguard Worker %res = select <16 x i1> %mask, <16 x i16> %r, <16 x i16> %old 83*9880d681SAndroid Build Coastguard Worker ret <16 x i16>%res 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_256_8(i8 * %addr, <16 x i16> %mask1) { 87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_256_8: 88*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %ymm1, %ymm1, %ymm1 ## encoding: [0x62,0xf1,0x75,0x28,0xef,0xc9] 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqw %ymm1, %ymm0, %k1 ## encoding: [0x62,0xf3,0xfd,0x28,0x3f,0xc9,0x04] 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu16 (%rdi), %ymm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0xa9,0x6f,0x07] 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 93*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i16> %mask1, zeroinitializer 94*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <16 x i16>* 95*9880d681SAndroid Build Coastguard Worker %r = load <16 x i16>, <16 x i16>* %vaddr, align 1 96*9880d681SAndroid Build Coastguard Worker %res = select <16 x i1> %mask, <16 x i16> %r, <16 x i16> zeroinitializer 97*9880d681SAndroid Build Coastguard Worker ret <16 x i16>%res 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_128_1(i8 * %addr) { 101*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_128_1: 102*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu8 (%rdi), %xmm0 ## encoding: [0x62,0xf1,0x7f,0x08,0x6f,0x07] 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 105*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <16 x i8>* 106*9880d681SAndroid Build Coastguard Worker %res = load <16 x i8>, <16 x i8>* %vaddr, align 1 107*9880d681SAndroid Build Coastguard Worker ret <16 x i8>%res 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Workerdefine void @test_128_2(i8 * %addr, <16 x i8> %data) { 111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_128_2: 112*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu8 %xmm0, (%rdi) ## encoding: [0x62,0xf1,0x7f,0x08,0x7f,0x07] 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 115*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <16 x i8>* 116*9880d681SAndroid Build Coastguard Worker store <16 x i8>%data, <16 x i8>* %vaddr, align 1 117*9880d681SAndroid Build Coastguard Worker ret void 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_128_3(i8 * %addr, <16 x i8> %old, <16 x i8> %mask1) { 121*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_128_3: 122*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %xmm2, %xmm2, %xmm2 ## encoding: [0x62,0xf1,0x6d,0x08,0xef,0xd2] 124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqb %xmm2, %xmm1, %k1 ## encoding: [0x62,0xf3,0x75,0x08,0x3f,0xca,0x04] 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmb (%rdi), %xmm0, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0x66,0x07] 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 127*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i8> %mask1, zeroinitializer 128*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <16 x i8>* 129*9880d681SAndroid Build Coastguard Worker %r = load <16 x i8>, <16 x i8>* %vaddr, align 1 130*9880d681SAndroid Build Coastguard Worker %res = select <16 x i1> %mask, <16 x i8> %r, <16 x i8> %old 131*9880d681SAndroid Build Coastguard Worker ret <16 x i8>%res 132*9880d681SAndroid Build Coastguard Worker} 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_128_4(i8 * %addr, <16 x i8> %mask1) { 135*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_128_4: 136*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %xmm1, %xmm1, %xmm1 ## encoding: [0x62,0xf1,0x75,0x08,0xef,0xc9] 138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqb %xmm1, %xmm0, %k1 ## encoding: [0x62,0xf3,0x7d,0x08,0x3f,0xc9,0x04] 139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu8 (%rdi), %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7f,0x89,0x6f,0x07] 140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 141*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <16 x i8> %mask1, zeroinitializer 142*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <16 x i8>* 143*9880d681SAndroid Build Coastguard Worker %r = load <16 x i8>, <16 x i8>* %vaddr, align 1 144*9880d681SAndroid Build Coastguard Worker %res = select <16 x i1> %mask, <16 x i8> %r, <16 x i8> zeroinitializer 145*9880d681SAndroid Build Coastguard Worker ret <16 x i8>%res 146*9880d681SAndroid Build Coastguard Worker} 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_128_5(i8 * %addr) { 149*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_128_5: 150*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu16 (%rdi), %xmm0 ## encoding: [0x62,0xf1,0xff,0x08,0x6f,0x07] 152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 153*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <8 x i16>* 154*9880d681SAndroid Build Coastguard Worker %res = load <8 x i16>, <8 x i16>* %vaddr, align 1 155*9880d681SAndroid Build Coastguard Worker ret <8 x i16>%res 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Workerdefine void @test_128_6(i8 * %addr, <8 x i16> %data) { 159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_128_6: 160*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 161*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu16 %xmm0, (%rdi) ## encoding: [0x62,0xf1,0xff,0x08,0x7f,0x07] 162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 163*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <8 x i16>* 164*9880d681SAndroid Build Coastguard Worker store <8 x i16>%data, <8 x i16>* %vaddr, align 1 165*9880d681SAndroid Build Coastguard Worker ret void 166*9880d681SAndroid Build Coastguard Worker} 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_128_7(i8 * %addr, <8 x i16> %old, <8 x i16> %mask1) { 169*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_128_7: 170*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %xmm2, %xmm2, %xmm2 ## encoding: [0x62,0xf1,0x6d,0x08,0xef,0xd2] 172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqw %xmm2, %xmm1, %k1 ## encoding: [0x62,0xf3,0xf5,0x08,0x3f,0xca,0x04] 173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendmw (%rdi), %xmm0, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0x66,0x07] 174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 175*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i16> %mask1, zeroinitializer 176*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <8 x i16>* 177*9880d681SAndroid Build Coastguard Worker %r = load <8 x i16>, <8 x i16>* %vaddr, align 1 178*9880d681SAndroid Build Coastguard Worker %res = select <8 x i1> %mask, <8 x i16> %r, <8 x i16> %old 179*9880d681SAndroid Build Coastguard Worker ret <8 x i16>%res 180*9880d681SAndroid Build Coastguard Worker} 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_128_8(i8 * %addr, <8 x i16> %mask1) { 183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_128_8: 184*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %xmm1, %xmm1, %xmm1 ## encoding: [0x62,0xf1,0x75,0x08,0xef,0xc9] 186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpneqw %xmm1, %xmm0, %k1 ## encoding: [0x62,0xf3,0xfd,0x08,0x3f,0xc9,0x04] 187*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqu16 (%rdi), %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0x89,0x6f,0x07] 188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq ## encoding: [0xc3] 189*9880d681SAndroid Build Coastguard Worker %mask = icmp ne <8 x i16> %mask1, zeroinitializer 190*9880d681SAndroid Build Coastguard Worker %vaddr = bitcast i8* %addr to <8 x i16>* 191*9880d681SAndroid Build Coastguard Worker %r = load <8 x i16>, <8 x i16>* %vaddr, align 1 192*9880d681SAndroid Build Coastguard Worker %res = select <8 x i1> %mask, <8 x i16> %r, <8 x i16> zeroinitializer 193*9880d681SAndroid Build Coastguard Worker ret <8 x i16>%res 194*9880d681SAndroid Build Coastguard Worker} 195*9880d681SAndroid Build Coastguard Worker 196