brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.9 KiB · e58295f Raw
259 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK,X644 5; PR822426define <8 x i32> @cmp_eq_bitcast(<8 x i32> %x) {7; X86-LABEL: cmp_eq_bitcast:8; X86:       # %bb.0:9; X86-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm010; X86-NEXT:    vcvtdq2ps %ymm0, %ymm011; X86-NEXT:    vcmpeqps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm012; X86-NEXT:    retl13;14; X64-LABEL: cmp_eq_bitcast:15; X64:       # %bb.0:16; X64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm017; X64-NEXT:    vcvtdq2ps %ymm0, %ymm018; X64-NEXT:    vcmpeqps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm019; X64-NEXT:    retq20  %and = and <8 x i32> %x, <i32 7, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>21  %cmp = icmp eq <8 x i32> %and, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>22  %sext = sext <8 x i1> %cmp to <8 x i32>23  ret <8 x i32> %sext24}25 26define <8 x i32> @cmp_ne_sitofp(<8 x i32> %x) {27; CHECK-LABEL: cmp_ne_sitofp:28; CHECK:       # %bb.0:29; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm130; CHECK-NEXT:    vbroadcastss {{.*#+}} xmm2 = [3,3,3,3]31; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm132; CHECK-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm333; CHECK-NEXT:    vpxor %xmm3, %xmm1, %xmm134; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm035; CHECK-NEXT:    vpxor %xmm3, %xmm0, %xmm036; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm037; CHECK-NEXT:    ret{{[l|q]}}38  %cmp = icmp ne <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>39  %sext = sext <8 x i1> %cmp to <8 x i32>40  ret <8 x i32> %sext41}42 43define <8 x i32> @cmp_slt_fail_no_const(<8 x i32> %x, <8 x i32> %y) {44; X86-LABEL: cmp_slt_fail_no_const:45; X86:       # %bb.0:46; X86-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm047; X86-NEXT:    vextractf128 $1, %ymm1, %xmm248; X86-NEXT:    vextractf128 $1, %ymm0, %xmm349; X86-NEXT:    vpcmpgtd %xmm3, %xmm2, %xmm250; X86-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm051; X86-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm052; X86-NEXT:    retl53;54; X64-LABEL: cmp_slt_fail_no_const:55; X64:       # %bb.0:56; X64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm057; X64-NEXT:    vextractf128 $1, %ymm1, %xmm258; X64-NEXT:    vextractf128 $1, %ymm0, %xmm359; X64-NEXT:    vpcmpgtd %xmm3, %xmm2, %xmm260; X64-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm061; X64-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm062; X64-NEXT:    retq63  %and = and <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>64  %cmp = icmp slt <8 x i32> %and, %y65  %sext = sext <8 x i1> %cmp to <8 x i32>66  ret <8 x i32> %sext67}68 69define <8 x i32> @cmp_eq_sitofp(<8 x i32> %x) {70; CHECK-LABEL: cmp_eq_sitofp:71; CHECK:       # %bb.0:72; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm173; CHECK-NEXT:    vbroadcastss {{.*#+}} xmm2 = [4294967293,4294967293,4294967293,4294967293]74; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm175; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm076; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm077; CHECK-NEXT:    ret{{[l|q]}}78  %cmp = icmp eq <8 x i32> %x, <i32 -3, i32 -3, i32 -3, i32 -3, i32 -3, i32 -3, i32 -3, i32 -3>79  %sext = sext <8 x i1> %cmp to <8 x i32>80  ret <8 x i32> %sext81}82 83define <8 x i32> @cmp_sgt_fail_no_bounds(<8 x i32> %x, <8 x i32> %y) {84; CHECK-LABEL: cmp_sgt_fail_no_bounds:85; CHECK:       # %bb.0:86; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm287; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm388; CHECK-NEXT:    vpcmpgtd %xmm2, %xmm3, %xmm289; CHECK-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm090; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm091; CHECK-NEXT:    ret{{[l|q]}}92  %cmp = icmp slt <8 x i32> %x, %y93  %sext = sext <8 x i1> %cmp to <8 x i32>94  ret <8 x i32> %sext95}96 97define <8 x i32> @cmp_sgt_bitcast(<8 x i32> %xx, <8 x i32> %yy) {98; CHECK-LABEL: cmp_sgt_bitcast:99; CHECK:       # %bb.0:100; CHECK-NEXT:    vbroadcastss {{.*#+}} ymm2 = [2139095040,2139095040,2139095040,2139095040,2139095040,2139095040,2139095040,2139095040]101; CHECK-NEXT:    vandps %ymm2, %ymm0, %ymm0102; CHECK-NEXT:    vandps %ymm2, %ymm1, %ymm1103; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm2104; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm3105; CHECK-NEXT:    vpcmpgtd %xmm2, %xmm3, %xmm2106; CHECK-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0107; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0108; CHECK-NEXT:    ret{{[l|q]}}109  %x = and <8 x i32> %xx, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>110  %y = and <8 x i32> %yy, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>111 112  %cmp = icmp sgt <8 x i32> %x, %y113  %sext = sext <8 x i1> %cmp to <8 x i32>114  ret <8 x i32> %sext115}116 117define <8 x i32> @cmp_sle_fail_out_of_bounds(<8 x i32> %xx) {118; X86-LABEL: cmp_sle_fail_out_of_bounds:119; X86:       # %bb.0:120; X86-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0121; X86-NEXT:    vextractf128 $1, %ymm0, %xmm1122; X86-NEXT:    vbroadcastss {{.*#+}} xmm2 = [2139095041,2139095041,2139095041,2139095041]123; X86-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1124; X86-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm0125; X86-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0126; X86-NEXT:    retl127;128; X64-LABEL: cmp_sle_fail_out_of_bounds:129; X64:       # %bb.0:130; X64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0131; X64-NEXT:    vextractf128 $1, %ymm0, %xmm1132; X64-NEXT:    vbroadcastss {{.*#+}} xmm2 = [2139095041,2139095041,2139095041,2139095041]133; X64-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1134; X64-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm0135; X64-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0136; X64-NEXT:    retq137  %x = and <8 x i32> %xx, <i32 2139095041, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>138  %cmp = icmp sle <8 x i32> %x, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>139  %sext = sext <8 x i1> %cmp to <8 x i32>140  ret <8 x i32> %sext141}142 143define <8 x i32> @cmp_eq_fail_out_of_bounds(<8 x i32> %x) {144; CHECK-LABEL: cmp_eq_fail_out_of_bounds:145; CHECK:       # %bb.0:146; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1147; CHECK-NEXT:    vbroadcastss {{.*#+}} xmm2 = [16777216,16777216,16777216,16777216]148; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1149; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0150; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0151; CHECK-NEXT:    ret{{[l|q]}}152  %cmp = icmp eq <8 x i32> %x, <i32 16777216, i32 16777216, i32 16777216, i32 16777216, i32 16777216, i32 16777216, i32 16777216, i32 16777216>153  %sext = sext <8 x i1> %cmp to <8 x i32>154  ret <8 x i32> %sext155}156 157define <8 x i32> @cmp_eq_fail_out_of_bounds2(<8 x i32> %x) {158; CHECK-LABEL: cmp_eq_fail_out_of_bounds2:159; CHECK:       # %bb.0:160; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1161; CHECK-NEXT:    vbroadcastss {{.*#+}} xmm2 = [4278190080,4278190080,4278190080,4278190080]162; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1163; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0164; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0165; CHECK-NEXT:    ret{{[l|q]}}166  %cmp = icmp eq <8 x i32> %x, <i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216>167  %sext = sext <8 x i1> %cmp to <8 x i32>168  ret <8 x i32> %sext169}170 171define <8 x i32> @cmp_eq_todo(<8 x i32> %x) {172; X86-LABEL: cmp_eq_todo:173; X86:       # %bb.0:174; X86-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm1175; X86-NEXT:    vextractf128 $1, %ymm0, %xmm0176; X86-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0177; X86-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0178; X86-NEXT:    retl179;180; X64-LABEL: cmp_eq_todo:181; X64:       # %bb.0:182; X64-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1183; X64-NEXT:    vextractf128 $1, %ymm0, %xmm0184; X64-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0185; X64-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0186; X64-NEXT:    retq187  %cmp = icmp eq <8 x i32> %x, <i32 -16777215, i32 16777215, i32 16777215, i32 -16777215, i32 16777215, i32 -16777215, i32 16777215, i32 -16777215>188  %sext = sext <8 x i1> %cmp to <8 x i32>189  ret <8 x i32> %sext190}191 192define <8 x i32> @cmp_ult_fail_maybe_negative(<8 x i32> %x) {193; CHECK-LABEL: cmp_ult_fail_maybe_negative:194; CHECK:       # %bb.0:195; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1196; CHECK-NEXT:    vbroadcastss {{.*#+}} xmm2 = [2,2,2,2]197; CHECK-NEXT:    vpminud %xmm2, %xmm1, %xmm3198; CHECK-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1199; CHECK-NEXT:    vpminud %xmm2, %xmm0, %xmm2200; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0201; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0202; CHECK-NEXT:    ret{{[l|q]}}203  %cmp = icmp ult <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>204  %sext = sext <8 x i1> %cmp to <8 x i32>205  ret <8 x i32> %sext206}207 208define <8 x i32> @cmp_ule_bitcast(<8 x i32> %xx) {209; X86-LABEL: cmp_ule_bitcast:210; X86:       # %bb.0:211; X86-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0212; X86-NEXT:    vextractf128 $1, %ymm0, %xmm1213; X86-NEXT:    vbroadcastss {{.*#+}} xmm2 = [4,4,4,4]214; X86-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1215; X86-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm0216; X86-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0217; X86-NEXT:    retl218;219; X64-LABEL: cmp_ule_bitcast:220; X64:       # %bb.0:221; X64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0222; X64-NEXT:    vextractf128 $1, %ymm0, %xmm1223; X64-NEXT:    vbroadcastss {{.*#+}} xmm2 = [4,4,4,4]224; X64-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm1225; X64-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm0226; X64-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0227; X64-NEXT:    retq228  %x = and <8 x i32> %xx, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>229  %cmp = icmp ule <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>230  %sext = sext <8 x i1> %cmp to <8 x i32>231  ret <8 x i32> %sext232}233 234define <8 x i32> @cmp_ugt_sitofp(<8 x i32> %xx) {235; X86-LABEL: cmp_ugt_sitofp:236; X86:       # %bb.0:237; X86-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0238; X86-NEXT:    vextractf128 $1, %ymm0, %xmm1239; X86-NEXT:    vbroadcastss {{.*#+}} xmm2 = [3,3,3,3]240; X86-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1241; X86-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0242; X86-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0243; X86-NEXT:    retl244;245; X64-LABEL: cmp_ugt_sitofp:246; X64:       # %bb.0:247; X64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0248; X64-NEXT:    vextractf128 $1, %ymm0, %xmm1249; X64-NEXT:    vbroadcastss {{.*#+}} xmm2 = [3,3,3,3]250; X64-NEXT:    vpcmpgtd %xmm2, %xmm1, %xmm1251; X64-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0252; X64-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0253; X64-NEXT:    retq254  %x = and <8 x i32> %xx, <i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647>255  %cmp = icmp ugt <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>256  %sext = sext <8 x i1> %cmp to <8 x i32>257  ret <8 x i32> %sext258}259