245 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mcpu=yonah -mtriple=i386-apple-darwin | FileCheck %s3 4 5define <4 x i32> @test1(<4 x i32> %A, <4 x i32> %B) nounwind {6; CHECK-LABEL: test1:7; CHECK: ## %bb.0:8; CHECK-NEXT: pcmpgtd %xmm1, %xmm09; CHECK-NEXT: retl10 11 %C = icmp sgt <4 x i32> %A, %B12 %D = sext <4 x i1> %C to <4 x i32>13 ret <4 x i32> %D14}15 16define <4 x i32> @test2(<4 x i32> %A, <4 x i32> %B) nounwind {17; CHECK-LABEL: test2:18; CHECK: ## %bb.0:19; CHECK-NEXT: pcmpgtd %xmm0, %xmm120; CHECK-NEXT: pcmpeqd %xmm0, %xmm021; CHECK-NEXT: pxor %xmm1, %xmm022; CHECK-NEXT: retl23 %C = icmp sge <4 x i32> %A, %B24 %D = sext <4 x i1> %C to <4 x i32>25 ret <4 x i32> %D26}27 28define <4 x i32> @test3(<4 x i32> %A, <4 x i32> %B) nounwind {29; CHECK-LABEL: test3:30; CHECK: ## %bb.0:31; CHECK-NEXT: pcmpgtd %xmm0, %xmm132; CHECK-NEXT: movdqa %xmm1, %xmm033; CHECK-NEXT: retl34 %C = icmp slt <4 x i32> %A, %B35 %D = sext <4 x i1> %C to <4 x i32>36 ret <4 x i32> %D37}38 39define <4 x i32> @test4(<4 x i32> %A, <4 x i32> %B) nounwind {40; CHECK-LABEL: test4:41; CHECK: ## %bb.0:42; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]43; CHECK-NEXT: pxor %xmm2, %xmm144; CHECK-NEXT: pxor %xmm2, %xmm045; CHECK-NEXT: pcmpgtd %xmm1, %xmm046; CHECK-NEXT: retl47 %C = icmp ugt <4 x i32> %A, %B48 %D = sext <4 x i1> %C to <4 x i32>49 ret <4 x i32> %D50}51 52define <2 x i64> @test5(<2 x i64> %A, <2 x i64> %B) nounwind {53; CHECK-LABEL: test5:54; CHECK: ## %bb.0:55; CHECK-NEXT: pcmpeqd %xmm1, %xmm056; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]57; CHECK-NEXT: pand %xmm1, %xmm058; CHECK-NEXT: retl59 %C = icmp eq <2 x i64> %A, %B60 %D = sext <2 x i1> %C to <2 x i64>61 ret <2 x i64> %D62}63 64define <2 x i64> @test6(<2 x i64> %A, <2 x i64> %B) nounwind {65; CHECK-LABEL: test6:66; CHECK: ## %bb.0:67; CHECK-NEXT: pcmpeqd %xmm1, %xmm068; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]69; CHECK-NEXT: pand %xmm1, %xmm070; CHECK-NEXT: pcmpeqd %xmm1, %xmm171; CHECK-NEXT: pxor %xmm1, %xmm072; CHECK-NEXT: retl73 %C = icmp ne <2 x i64> %A, %B74 %D = sext <2 x i1> %C to <2 x i64>75 ret <2 x i64> %D76}77 78define <2 x i64> @test7(<2 x i64> %A, <2 x i64> %B) nounwind {79; CHECK-LABEL: test7:80; CHECK: ## %bb.0:81; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]82; CHECK-NEXT: pxor %xmm2, %xmm183; CHECK-NEXT: pxor %xmm2, %xmm084; CHECK-NEXT: movdqa %xmm0, %xmm285; CHECK-NEXT: pcmpgtd %xmm1, %xmm286; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]87; CHECK-NEXT: pcmpeqd %xmm1, %xmm088; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]89; CHECK-NEXT: pand %xmm3, %xmm190; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]91; CHECK-NEXT: por %xmm1, %xmm092; CHECK-NEXT: retl93 %C = icmp sgt <2 x i64> %A, %B94 %D = sext <2 x i1> %C to <2 x i64>95 ret <2 x i64> %D96}97 98define <2 x i64> @test8(<2 x i64> %A, <2 x i64> %B) nounwind {99; CHECK-LABEL: test8:100; CHECK: ## %bb.0:101; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]102; CHECK-NEXT: pxor %xmm2, %xmm0103; CHECK-NEXT: pxor %xmm2, %xmm1104; CHECK-NEXT: movdqa %xmm1, %xmm2105; CHECK-NEXT: pcmpgtd %xmm0, %xmm2106; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]107; CHECK-NEXT: pcmpeqd %xmm0, %xmm1108; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]109; CHECK-NEXT: pand %xmm3, %xmm1110; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]111; CHECK-NEXT: por %xmm1, %xmm0112; CHECK-NEXT: retl113 %C = icmp slt <2 x i64> %A, %B114 %D = sext <2 x i1> %C to <2 x i64>115 ret <2 x i64> %D116}117 118define <2 x i64> @test9(<2 x i64> %A, <2 x i64> %B) nounwind {119; CHECK-LABEL: test9:120; CHECK: ## %bb.0:121; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]122; CHECK-NEXT: pxor %xmm2, %xmm0123; CHECK-NEXT: pxor %xmm2, %xmm1124; CHECK-NEXT: movdqa %xmm1, %xmm2125; CHECK-NEXT: pcmpgtd %xmm0, %xmm2126; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]127; CHECK-NEXT: pcmpeqd %xmm0, %xmm1128; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]129; CHECK-NEXT: pand %xmm3, %xmm0130; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]131; CHECK-NEXT: por %xmm0, %xmm1132; CHECK-NEXT: pcmpeqd %xmm0, %xmm0133; CHECK-NEXT: pxor %xmm1, %xmm0134; CHECK-NEXT: retl135 %C = icmp sge <2 x i64> %A, %B136 %D = sext <2 x i1> %C to <2 x i64>137 ret <2 x i64> %D138}139 140define <2 x i64> @test10(<2 x i64> %A, <2 x i64> %B) nounwind {141; CHECK-LABEL: test10:142; CHECK: ## %bb.0:143; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]144; CHECK-NEXT: pxor %xmm2, %xmm1145; CHECK-NEXT: pxor %xmm2, %xmm0146; CHECK-NEXT: movdqa %xmm0, %xmm2147; CHECK-NEXT: pcmpgtd %xmm1, %xmm2148; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]149; CHECK-NEXT: pcmpeqd %xmm1, %xmm0150; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]151; CHECK-NEXT: pand %xmm3, %xmm0152; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]153; CHECK-NEXT: por %xmm0, %xmm1154; CHECK-NEXT: pcmpeqd %xmm0, %xmm0155; CHECK-NEXT: pxor %xmm1, %xmm0156; CHECK-NEXT: retl157 %C = icmp sle <2 x i64> %A, %B158 %D = sext <2 x i1> %C to <2 x i64>159 ret <2 x i64> %D160}161 162define <2 x i64> @test11(<2 x i64> %A, <2 x i64> %B) nounwind {163; CHECK-LABEL: test11:164; CHECK: ## %bb.0:165; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]166; CHECK-NEXT: pxor %xmm2, %xmm1167; CHECK-NEXT: pxor %xmm2, %xmm0168; CHECK-NEXT: movdqa %xmm0, %xmm2169; CHECK-NEXT: pcmpgtd %xmm1, %xmm2170; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]171; CHECK-NEXT: pcmpeqd %xmm1, %xmm0172; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]173; CHECK-NEXT: pand %xmm3, %xmm1174; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]175; CHECK-NEXT: por %xmm1, %xmm0176; CHECK-NEXT: retl177 %C = icmp ugt <2 x i64> %A, %B178 %D = sext <2 x i1> %C to <2 x i64>179 ret <2 x i64> %D180}181 182define <2 x i64> @test12(<2 x i64> %A, <2 x i64> %B) nounwind {183; CHECK-LABEL: test12:184; CHECK: ## %bb.0:185; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]186; CHECK-NEXT: pxor %xmm2, %xmm0187; CHECK-NEXT: pxor %xmm2, %xmm1188; CHECK-NEXT: movdqa %xmm1, %xmm2189; CHECK-NEXT: pcmpgtd %xmm0, %xmm2190; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]191; CHECK-NEXT: pcmpeqd %xmm0, %xmm1192; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]193; CHECK-NEXT: pand %xmm3, %xmm1194; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]195; CHECK-NEXT: por %xmm1, %xmm0196; CHECK-NEXT: retl197 %C = icmp ult <2 x i64> %A, %B198 %D = sext <2 x i1> %C to <2 x i64>199 ret <2 x i64> %D200}201 202define <2 x i64> @test13(<2 x i64> %A, <2 x i64> %B) nounwind {203; CHECK-LABEL: test13:204; CHECK: ## %bb.0:205; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]206; CHECK-NEXT: pxor %xmm2, %xmm0207; CHECK-NEXT: pxor %xmm2, %xmm1208; CHECK-NEXT: movdqa %xmm1, %xmm2209; CHECK-NEXT: pcmpgtd %xmm0, %xmm2210; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]211; CHECK-NEXT: pcmpeqd %xmm0, %xmm1212; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]213; CHECK-NEXT: pand %xmm3, %xmm0214; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]215; CHECK-NEXT: por %xmm0, %xmm1216; CHECK-NEXT: pcmpeqd %xmm0, %xmm0217; CHECK-NEXT: pxor %xmm1, %xmm0218; CHECK-NEXT: retl219 %C = icmp uge <2 x i64> %A, %B220 %D = sext <2 x i1> %C to <2 x i64>221 ret <2 x i64> %D222}223 224define <2 x i64> @test14(<2 x i64> %A, <2 x i64> %B) nounwind {225; CHECK-LABEL: test14:226; CHECK: ## %bb.0:227; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]228; CHECK-NEXT: pxor %xmm2, %xmm1229; CHECK-NEXT: pxor %xmm2, %xmm0230; CHECK-NEXT: movdqa %xmm0, %xmm2231; CHECK-NEXT: pcmpgtd %xmm1, %xmm2232; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]233; CHECK-NEXT: pcmpeqd %xmm1, %xmm0234; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]235; CHECK-NEXT: pand %xmm3, %xmm0236; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]237; CHECK-NEXT: por %xmm0, %xmm1238; CHECK-NEXT: pcmpeqd %xmm0, %xmm0239; CHECK-NEXT: pxor %xmm1, %xmm0240; CHECK-NEXT: retl241 %C = icmp ule <2 x i64> %A, %B242 %D = sext <2 x i1> %C to <2 x i64>243 ret <2 x i64> %D244}245