@@ -2377,3 +2377,47 @@ define <2 x i32> @not_splat_shuffle2(i32 %x) {
2377
2377
%shuf = shufflevector <2 x i32 > %vec , <2 x i32 > undef , <2 x i32 > <i32 1 , i32 3 >
2378
2378
ret <2 x i32 > %shuf
2379
2379
}
2380
+ define <2 x i32 > @foldselect0 (i1 %c ) {
2381
+ ; CHECK-LABEL: @foldselect0(
2382
+ ; CHECK-NEXT: [[SHUF:%.*]] = select i1 [[C:%.*]], <2 x i32> <i32 7, i32 42>, <2 x i32> <i32 1, i32 0>
2383
+ ; CHECK-NEXT: ret <2 x i32> [[SHUF]]
2384
+ ;
2385
+ %sel = select i1 %c , <2 x i32 > <i32 42 , i32 7 >, <2 x i32 > <i32 0 , i32 1 >
2386
+ %shuf = shufflevector <2 x i32 > %sel , <2 x i32 > poison, <2 x i32 > <i32 1 , i32 0 >
2387
+ ret <2 x i32 > %shuf
2388
+ }
2389
+
2390
+ declare i1 @cond ()
2391
+ declare <4 x i32 > @value ()
2392
+
2393
+ define <4 x i32 > @foldphi1 () {
2394
+ ; CHECK-LABEL: @foldphi1(
2395
+ ; CHECK-NEXT: entry:
2396
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
2397
+ ; CHECK: loop:
2398
+ ; CHECK-NEXT: [[V:%.*]] = phi <4 x i32> [ zeroinitializer, [[ENTRY:%.*]] ], [ [[XOR:%.*]], [[LOOP]] ]
2399
+ ; CHECK-NEXT: [[VAL:%.*]] = call <4 x i32> @value()
2400
+ ; CHECK-NEXT: [[XOR]] = xor <4 x i32> [[V]], [[VAL]]
2401
+ ; CHECK-NEXT: [[C:%.*]] = call i1 @cond()
2402
+ ; CHECK-NEXT: br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
2403
+ ; CHECK: exit:
2404
+ ; CHECK-NEXT: [[SHUF1:%.*]] = shufflevector <4 x i32> [[XOR]], <4 x i32> poison, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
2405
+ ; CHECK-NEXT: ret <4 x i32> [[SHUF1]]
2406
+ ;
2407
+ entry:
2408
+ br label %loop
2409
+
2410
+ loop:
2411
+ %v = phi <4 x i32 > [zeroinitializer , %entry ], [%shuf1 , %loop ]
2412
+
2413
+ %shuf0 = shufflevector <4 x i32 > %v , <4 x i32 > poison, <4 x i32 > <i32 1 , i32 2 , i32 3 , i32 0 >
2414
+ %val = call <4 x i32 > @value ()
2415
+ %xor = xor <4 x i32 > %shuf0 , %val
2416
+ %shuf1 = shufflevector <4 x i32 > %xor , <4 x i32 > poison, <4 x i32 > <i32 3 , i32 0 , i32 1 , i32 2 >
2417
+
2418
+ %c = call i1 @cond ()
2419
+ br i1 %c , label %loop , label %exit
2420
+
2421
+ exit:
2422
+ ret <4 x i32 > %shuf1
2423
+ }
0 commit comments