brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 2a26264 Raw
267 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s3 4define i32 @mask32(i32 %x) {5; CHECK-LABEL: mask32:6; CHECK:       ## %bb.0:7; CHECK-NEXT:    movl %edi, %eax8; CHECK-NEXT:    notl %eax9; CHECK-NEXT:    retq10  %m0 = bitcast i32 %x to <32 x i1>11  %m1 = xor <32 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,12                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,13                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,14                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>15  %ret = bitcast <32 x i1> %m1 to i3216  ret i32 %ret17}18 19define i64 @mask64(i64 %x) {20; CHECK-LABEL: mask64:21; CHECK:       ## %bb.0:22; CHECK-NEXT:    movq %rdi, %rax23; CHECK-NEXT:    notq %rax24; CHECK-NEXT:    retq25  %m0 = bitcast i64 %x to <64 x i1>26  %m1 = xor <64 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,27                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,28                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,29                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,30                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,31                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,32                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,33                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>34  %ret = bitcast <64 x i1> %m1 to i6435  ret i64 %ret36}37 38define void @mask32_mem(ptr %ptr) {39; CHECK-LABEL: mask32_mem:40; CHECK:       ## %bb.0:41; CHECK-NEXT:    kmovd (%rdi), %k042; CHECK-NEXT:    knotd %k0, %k043; CHECK-NEXT:    kmovd %k0, (%rdi)44; CHECK-NEXT:    retq45  %x = load i32, ptr %ptr, align 446  %m0 = bitcast i32 %x to <32 x i1>47  %m1 = xor <32 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,48                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,49                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,50                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>51  %ret = bitcast <32 x i1> %m1 to i3252  store i32 %ret, ptr %ptr, align 453  ret void54}55 56define void @mask64_mem(ptr %ptr) {57; CHECK-LABEL: mask64_mem:58; CHECK:       ## %bb.0:59; CHECK-NEXT:    kmovq (%rdi), %k060; CHECK-NEXT:    knotq %k0, %k061; CHECK-NEXT:    kmovq %k0, (%rdi)62; CHECK-NEXT:    retq63  %x = load i64, ptr %ptr, align 464  %m0 = bitcast i64 %x to <64 x i1>65  %m1 = xor <64 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,66                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,67                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,68                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,69                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,70                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,71                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,72                            i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>73  %ret = bitcast <64 x i1> %m1 to i6474  store i64 %ret, ptr %ptr, align 475  ret void76}77 78define i32 @mand32(i32 %x, i32 %y) {79; CHECK-LABEL: mand32:80; CHECK:       ## %bb.0:81; CHECK-NEXT:    movl %edi, %eax82; CHECK-NEXT:    orl %esi, %eax83; CHECK-NEXT:    retq84  %ma = bitcast i32 %x to <32 x i1>85  %mb = bitcast i32 %y to <32 x i1>86  %mc = and <32 x i1> %ma, %mb87  %md = xor <32 x i1> %ma, %mb88  %me = or <32 x i1> %mc, %md89  %ret = bitcast <32 x i1> %me to i3290  ret i32 %ret91}92 93define i32 @mand32_mem(ptr %x, ptr %y) {94; CHECK-LABEL: mand32_mem:95; CHECK:       ## %bb.0:96; CHECK-NEXT:    kmovd (%rdi), %k097; CHECK-NEXT:    kmovd (%rsi), %k198; CHECK-NEXT:    kord %k1, %k0, %k099; CHECK-NEXT:    kmovd %k0, %eax100; CHECK-NEXT:    retq101  %ma = load <32 x i1>, ptr %x102  %mb = load <32 x i1>, ptr %y103  %mc = and <32 x i1> %ma, %mb104  %md = xor <32 x i1> %ma, %mb105  %me = or <32 x i1> %mc, %md106  %ret = bitcast <32 x i1> %me to i32107  ret i32 %ret108}109 110define i64 @mand64(i64 %x, i64 %y) {111; CHECK-LABEL: mand64:112; CHECK:       ## %bb.0:113; CHECK-NEXT:    movq %rdi, %rax114; CHECK-NEXT:    orq %rsi, %rax115; CHECK-NEXT:    retq116  %ma = bitcast i64 %x to <64 x i1>117  %mb = bitcast i64 %y to <64 x i1>118  %mc = and <64 x i1> %ma, %mb119  %md = xor <64 x i1> %ma, %mb120  %me = or <64 x i1> %mc, %md121  %ret = bitcast <64 x i1> %me to i64122  ret i64 %ret123}124 125define i64 @mand64_mem(ptr %x, ptr %y) {126; CHECK-LABEL: mand64_mem:127; CHECK:       ## %bb.0:128; CHECK-NEXT:    kmovq (%rdi), %k0129; CHECK-NEXT:    kmovq (%rsi), %k1130; CHECK-NEXT:    korq %k1, %k0, %k0131; CHECK-NEXT:    kmovq %k0, %rax132; CHECK-NEXT:    retq133  %ma = load <64 x i1>, ptr %x134  %mb = load <64 x i1>, ptr %y135  %mc = and <64 x i1> %ma, %mb136  %md = xor <64 x i1> %ma, %mb137  %me = or <64 x i1> %mc, %md138  %ret = bitcast <64 x i1> %me to i64139  ret i64 %ret140}141 142define i32 @test_v32i1_add(i32 %x, i32 %y) {143; CHECK-LABEL: test_v32i1_add:144; CHECK:       ## %bb.0:145; CHECK-NEXT:    movl %edi, %eax146; CHECK-NEXT:    xorl %esi, %eax147; CHECK-NEXT:    retq148  %m0 = bitcast i32 %x to <32 x i1>149  %m1 = bitcast i32 %y to <32 x i1>150  %m2 = add <32 x i1> %m0,  %m1151  %ret = bitcast <32 x i1> %m2 to i32152  ret i32 %ret153}154 155define i32 @test_v32i1_sub(i32 %x, i32 %y) {156; CHECK-LABEL: test_v32i1_sub:157; CHECK:       ## %bb.0:158; CHECK-NEXT:    movl %edi, %eax159; CHECK-NEXT:    xorl %esi, %eax160; CHECK-NEXT:    retq161  %m0 = bitcast i32 %x to <32 x i1>162  %m1 = bitcast i32 %y to <32 x i1>163  %m2 = sub <32 x i1> %m0,  %m1164  %ret = bitcast <32 x i1> %m2 to i32165  ret i32 %ret166}167 168define i32 @test_v32i1_mul(i32 %x, i32 %y) {169; CHECK-LABEL: test_v32i1_mul:170; CHECK:       ## %bb.0:171; CHECK-NEXT:    movl %edi, %eax172; CHECK-NEXT:    andl %esi, %eax173; CHECK-NEXT:    retq174  %m0 = bitcast i32 %x to <32 x i1>175  %m1 = bitcast i32 %y to <32 x i1>176  %m2 = mul <32 x i1> %m0,  %m1177  %ret = bitcast <32 x i1> %m2 to i32178  ret i32 %ret179}180 181define i64 @test_v64i1_add(i64 %x, i64 %y) {182; CHECK-LABEL: test_v64i1_add:183; CHECK:       ## %bb.0:184; CHECK-NEXT:    movq %rdi, %rax185; CHECK-NEXT:    xorq %rsi, %rax186; CHECK-NEXT:    retq187  %m0 = bitcast i64 %x to <64 x i1>188  %m1 = bitcast i64 %y to <64 x i1>189  %m2 = add <64 x i1> %m0,  %m1190  %ret = bitcast <64 x i1> %m2 to i64191  ret i64 %ret192}193 194define i64 @test_v64i1_sub(i64 %x, i64 %y) {195; CHECK-LABEL: test_v64i1_sub:196; CHECK:       ## %bb.0:197; CHECK-NEXT:    movq %rdi, %rax198; CHECK-NEXT:    xorq %rsi, %rax199; CHECK-NEXT:    retq200  %m0 = bitcast i64 %x to <64 x i1>201  %m1 = bitcast i64 %y to <64 x i1>202  %m2 = sub <64 x i1> %m0,  %m1203  %ret = bitcast <64 x i1> %m2 to i64204  ret i64 %ret205}206 207define i64 @test_v64i1_mul(i64 %x, i64 %y) {208; CHECK-LABEL: test_v64i1_mul:209; CHECK:       ## %bb.0:210; CHECK-NEXT:    movq %rdi, %rax211; CHECK-NEXT:    andq %rsi, %rax212; CHECK-NEXT:    retq213  %m0 = bitcast i64 %x to <64 x i1>214  %m1 = bitcast i64 %y to <64 x i1>215  %m2 = mul <64 x i1> %m0,  %m1216  %ret = bitcast <64 x i1> %m2 to i64217  ret i64 %ret218}219 220define <32 x i1> @bitcast_f32_to_v32i1(float %x) {221; CHECK-LABEL: bitcast_f32_to_v32i1:222; CHECK:       ## %bb.0:223; CHECK-NEXT:    vmovd %xmm0, %eax224; CHECK-NEXT:    kmovd %eax, %k0225; CHECK-NEXT:    vpmovm2b %k0, %ymm0226; CHECK-NEXT:    retq227  %a = bitcast float %x to <32 x i1>228  ret <32 x i1> %a229}230 231define <64 x i1> @bitcast_f64_to_v64i1(double %x) {232; CHECK-LABEL: bitcast_f64_to_v64i1:233; CHECK:       ## %bb.0:234; CHECK-NEXT:    vmovq %xmm0, %rax235; CHECK-NEXT:    kmovq %rax, %k0236; CHECK-NEXT:    vpmovm2b %k0, %zmm0237; CHECK-NEXT:    retq238  %a = bitcast double %x to <64 x i1>239  ret <64 x i1> %a240}241 242define float @bitcast_v32i1_to_f32(<32 x i1> %x) {243; CHECK-LABEL: bitcast_v32i1_to_f32:244; CHECK:       ## %bb.0:245; CHECK-NEXT:    vpsllw $7, %ymm0, %ymm0246; CHECK-NEXT:    vpmovmskb %ymm0, %eax247; CHECK-NEXT:    vmovd %eax, %xmm0248; CHECK-NEXT:    vzeroupper249; CHECK-NEXT:    retq250  %a = bitcast <32 x i1> %x to float251  ret float %a252}253 254define double @bitcast_v64i1_to_f64(<64 x i1> %x) {255; CHECK-LABEL: bitcast_v64i1_to_f64:256; CHECK:       ## %bb.0:257; CHECK-NEXT:    vpsllw $7, %zmm0, %zmm0258; CHECK-NEXT:    vpmovb2m %zmm0, %k0259; CHECK-NEXT:    kmovq %k0, %rax260; CHECK-NEXT:    vmovq %rax, %xmm0261; CHECK-NEXT:    vzeroupper262; CHECK-NEXT:    retq263  %a = bitcast <64 x i1> %x to double264  ret double %a265}266 267