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