Skip to content

Commit e385f88

Browse files
PeddleSpamLeon Clark
authored andcommitted
Automerge: [VectorCombine] Fix rotation in phi narrowing. (#160465)
Fix bug in #140188 where incoming vectors are rotated in the wrong direction. Co-authored-by: Leon Clark <[email protected]>
2 parents 48c6427 + 8df643f commit e385f88

File tree

3 files changed

+25
-25
lines changed

3 files changed

+25
-25
lines changed

llvm/lib/Transforms/Vectorize/VectorCombine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4433,7 +4433,7 @@ bool VectorCombine::shrinkPhiOfShuffles(Instruction &I) {
44334433

44344434
// Create new mask using difference of the two incoming masks.
44354435
int MaskOffset = NewMask[0u];
4436-
unsigned Index = (InputNumElements - MaskOffset) % InputNumElements;
4436+
unsigned Index = (InputNumElements + MaskOffset) % InputNumElements;
44374437
NewMask.clear();
44384438

44394439
for (unsigned I = 0u; I < InputNumElements; ++I) {

llvm/test/Transforms/VectorCombine/AMDGPU/narrow-phi-of-shuffles.ll

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ define <4 x i32> @shuffle_v4i32(<3 x i32> %arg0, i1 %cond) {
392392
; CHECK-NEXT: [[ENTRY:.*:]]
393393
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
394394
; CHECK: [[THEN]]:
395-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x i32> [[ARG0]], <3 x i32> poison, <3 x i32> <i32 1, i32 2, i32 0>
395+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x i32> [[ARG0]], <3 x i32> poison, <3 x i32> <i32 2, i32 0, i32 1>
396396
; CHECK-NEXT: tail call void @func0()
397397
; CHECK-NEXT: br label %[[FINALLY:.*]]
398398
; CHECK: [[ELSE]]:
@@ -427,7 +427,7 @@ define <8 x i32> @shuffle_v8i32(<3 x i32> %arg0, i1 %cond) {
427427
; CHECK-NEXT: [[ENTRY:.*:]]
428428
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
429429
; CHECK: [[THEN]]:
430-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x i32> [[ARG0]], <3 x i32> poison, <3 x i32> <i32 1, i32 2, i32 0>
430+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x i32> [[ARG0]], <3 x i32> poison, <3 x i32> <i32 2, i32 0, i32 1>
431431
; CHECK-NEXT: tail call void @func0()
432432
; CHECK-NEXT: br label %[[FINALLY:.*]]
433433
; CHECK: [[ELSE]]:
@@ -462,7 +462,7 @@ define <16 x i32> @shuffle_v16i32(<3 x i32> %arg0, i1 %cond) {
462462
; CHECK-NEXT: [[ENTRY:.*:]]
463463
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
464464
; CHECK: [[THEN]]:
465-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x i32> [[ARG0]], <3 x i32> poison, <3 x i32> <i32 1, i32 2, i32 0>
465+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x i32> [[ARG0]], <3 x i32> poison, <3 x i32> <i32 2, i32 0, i32 1>
466466
; CHECK-NEXT: tail call void @func0()
467467
; CHECK-NEXT: br label %[[FINALLY:.*]]
468468
; CHECK: [[ELSE]]:
@@ -497,7 +497,7 @@ define <32 x i32> @shuffle_v32i32(<3 x i32> %arg0, i1 %cond) {
497497
; CHECK-NEXT: [[ENTRY:.*:]]
498498
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
499499
; CHECK: [[THEN]]:
500-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x i32> [[ARG0]], <3 x i32> poison, <3 x i32> <i32 1, i32 2, i32 0>
500+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x i32> [[ARG0]], <3 x i32> poison, <3 x i32> <i32 2, i32 0, i32 1>
501501
; CHECK-NEXT: tail call void @func0()
502502
; CHECK-NEXT: br label %[[FINALLY:.*]]
503503
; CHECK: [[ELSE]]:
@@ -1092,7 +1092,7 @@ define <4 x float> @shuffle_v4f32(<3 x float> %arg0, i1 %cond) {
10921092
; CHECK-NEXT: [[ENTRY:.*:]]
10931093
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
10941094
; CHECK: [[THEN]]:
1095-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 1, i32 2, i32 0>
1095+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 2, i32 0, i32 1>
10961096
; CHECK-NEXT: tail call void @func0()
10971097
; CHECK-NEXT: br label %[[FINALLY:.*]]
10981098
; CHECK: [[ELSE]]:
@@ -1127,7 +1127,7 @@ define <6 x float> @shuffle_v6f32(<3 x float> %arg0, i1 %cond) {
11271127
; CHECK-NEXT: [[ENTRY:.*:]]
11281128
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
11291129
; CHECK: [[THEN]]:
1130-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 1, i32 2, i32 0>
1130+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 2, i32 0, i32 1>
11311131
; CHECK-NEXT: tail call void @func0()
11321132
; CHECK-NEXT: br label %[[FINALLY:.*]]
11331133
; CHECK: [[ELSE]]:
@@ -1162,7 +1162,7 @@ define <8 x float> @shuffle_v8f32(<3 x float> %arg0, i1 %cond) {
11621162
; CHECK-NEXT: [[ENTRY:.*:]]
11631163
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
11641164
; CHECK: [[THEN]]:
1165-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 1, i32 2, i32 0>
1165+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 2, i32 0, i32 1>
11661166
; CHECK-NEXT: tail call void @func0()
11671167
; CHECK-NEXT: br label %[[FINALLY:.*]]
11681168
; CHECK: [[ELSE]]:
@@ -1197,7 +1197,7 @@ define <16 x float> @shuffle_v16f32(<3 x float> %arg0, i1 %cond) {
11971197
; CHECK-NEXT: [[ENTRY:.*:]]
11981198
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
11991199
; CHECK: [[THEN]]:
1200-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 1, i32 2, i32 0>
1200+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 2, i32 0, i32 1>
12011201
; CHECK-NEXT: tail call void @func0()
12021202
; CHECK-NEXT: br label %[[FINALLY:.*]]
12031203
; CHECK: [[ELSE]]:
@@ -1232,7 +1232,7 @@ define <32 x float> @shuffle_v32f32(<3 x float> %arg0, i1 %cond) {
12321232
; CHECK-NEXT: [[ENTRY:.*:]]
12331233
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
12341234
; CHECK: [[THEN]]:
1235-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 1, i32 2, i32 0>
1235+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x float> [[ARG0]], <3 x float> poison, <3 x i32> <i32 2, i32 0, i32 1>
12361236
; CHECK-NEXT: tail call void @func0()
12371237
; CHECK-NEXT: br label %[[FINALLY:.*]]
12381238
; CHECK: [[ELSE]]:

llvm/test/Transforms/VectorCombine/X86/narrow-phi-of-shuffles.ll

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,7 @@ define <4 x bfloat> @shuffle_v4bf16(<3 x bfloat> %arg0, i1 %cond) {
605605
; CHECK-NEXT: [[ENTRY:.*:]]
606606
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
607607
; CHECK: [[THEN]]:
608-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 1, i32 2, i32 0>
608+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 2, i32 0, i32 1>
609609
; CHECK-NEXT: tail call void @func0()
610610
; CHECK-NEXT: br label %[[FINALLY:.*]]
611611
; CHECK: [[ELSE]]:
@@ -640,7 +640,7 @@ define <6 x bfloat> @shuffle_v6bf16(<3 x bfloat> %arg0, i1 %cond) {
640640
; CHECK-NEXT: [[ENTRY:.*:]]
641641
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
642642
; CHECK: [[THEN]]:
643-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 1, i32 2, i32 0>
643+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 2, i32 0, i32 1>
644644
; CHECK-NEXT: tail call void @func0()
645645
; CHECK-NEXT: br label %[[FINALLY:.*]]
646646
; CHECK: [[ELSE]]:
@@ -675,7 +675,7 @@ define <8 x bfloat> @shuffle_v8bf16(<3 x bfloat> %arg0, i1 %cond) {
675675
; CHECK-NEXT: [[ENTRY:.*:]]
676676
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
677677
; CHECK: [[THEN]]:
678-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 1, i32 2, i32 0>
678+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 2, i32 0, i32 1>
679679
; CHECK-NEXT: tail call void @func0()
680680
; CHECK-NEXT: br label %[[FINALLY:.*]]
681681
; CHECK: [[ELSE]]:
@@ -710,7 +710,7 @@ define <16 x bfloat> @shuffle_v16bf16(<3 x bfloat> %arg0, i1 %cond) {
710710
; CHECK-NEXT: [[ENTRY:.*:]]
711711
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
712712
; CHECK: [[THEN]]:
713-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 1, i32 2, i32 0>
713+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 2, i32 0, i32 1>
714714
; CHECK-NEXT: tail call void @func0()
715715
; CHECK-NEXT: br label %[[FINALLY:.*]]
716716
; CHECK: [[ELSE]]:
@@ -745,7 +745,7 @@ define <32 x bfloat> @shuffle_v32bf16(<3 x bfloat> %arg0, i1 %cond) {
745745
; CHECK-NEXT: [[ENTRY:.*:]]
746746
; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
747747
; CHECK: [[THEN]]:
748-
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 1, i32 2, i32 0>
748+
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <3 x bfloat> [[ARG0]], <3 x bfloat> poison, <3 x i32> <i32 2, i32 0, i32 1>
749749
; CHECK-NEXT: tail call void @func0()
750750
; CHECK-NEXT: br label %[[FINALLY:.*]]
751751
; CHECK: [[ELSE]]:
@@ -850,7 +850,7 @@ define <4 x half> @shuffle_v4f16(<3 x half> %arg0, i1 %cond) {
850850
; CHECK-V1-NEXT: [[ENTRY:.*:]]
851851
; CHECK-V1-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
852852
; CHECK-V1: [[THEN]]:
853-
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
853+
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
854854
; CHECK-V1-NEXT: tail call void @func0()
855855
; CHECK-V1-NEXT: br label %[[FINALLY:.*]]
856856
; CHECK-V1: [[ELSE]]:
@@ -866,7 +866,7 @@ define <4 x half> @shuffle_v4f16(<3 x half> %arg0, i1 %cond) {
866866
; CHECK-V2-NEXT: [[ENTRY:.*:]]
867867
; CHECK-V2-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
868868
; CHECK-V2: [[THEN]]:
869-
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
869+
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
870870
; CHECK-V2-NEXT: tail call void @func0()
871871
; CHECK-V2-NEXT: br label %[[FINALLY:.*]]
872872
; CHECK-V2: [[ELSE]]:
@@ -933,7 +933,7 @@ define <6 x half> @shuffle_v6f16(<3 x half> %arg0, i1 %cond) {
933933
; CHECK-V1-NEXT: [[ENTRY:.*:]]
934934
; CHECK-V1-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
935935
; CHECK-V1: [[THEN]]:
936-
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
936+
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
937937
; CHECK-V1-NEXT: tail call void @func0()
938938
; CHECK-V1-NEXT: br label %[[FINALLY:.*]]
939939
; CHECK-V1: [[ELSE]]:
@@ -949,7 +949,7 @@ define <6 x half> @shuffle_v6f16(<3 x half> %arg0, i1 %cond) {
949949
; CHECK-V2-NEXT: [[ENTRY:.*:]]
950950
; CHECK-V2-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
951951
; CHECK-V2: [[THEN]]:
952-
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
952+
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
953953
; CHECK-V2-NEXT: tail call void @func0()
954954
; CHECK-V2-NEXT: br label %[[FINALLY:.*]]
955955
; CHECK-V2: [[ELSE]]:
@@ -1016,7 +1016,7 @@ define <8 x half> @shuffle_v8f16(<3 x half> %arg0, i1 %cond) {
10161016
; CHECK-V1-NEXT: [[ENTRY:.*:]]
10171017
; CHECK-V1-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
10181018
; CHECK-V1: [[THEN]]:
1019-
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
1019+
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
10201020
; CHECK-V1-NEXT: tail call void @func0()
10211021
; CHECK-V1-NEXT: br label %[[FINALLY:.*]]
10221022
; CHECK-V1: [[ELSE]]:
@@ -1032,7 +1032,7 @@ define <8 x half> @shuffle_v8f16(<3 x half> %arg0, i1 %cond) {
10321032
; CHECK-V2-NEXT: [[ENTRY:.*:]]
10331033
; CHECK-V2-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
10341034
; CHECK-V2: [[THEN]]:
1035-
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
1035+
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
10361036
; CHECK-V2-NEXT: tail call void @func0()
10371037
; CHECK-V2-NEXT: br label %[[FINALLY:.*]]
10381038
; CHECK-V2: [[ELSE]]:
@@ -1099,7 +1099,7 @@ define <16 x half> @shuffle_v16f16(<3 x half> %arg0, i1 %cond) {
10991099
; CHECK-V1-NEXT: [[ENTRY:.*:]]
11001100
; CHECK-V1-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
11011101
; CHECK-V1: [[THEN]]:
1102-
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
1102+
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
11031103
; CHECK-V1-NEXT: tail call void @func0()
11041104
; CHECK-V1-NEXT: br label %[[FINALLY:.*]]
11051105
; CHECK-V1: [[ELSE]]:
@@ -1115,7 +1115,7 @@ define <16 x half> @shuffle_v16f16(<3 x half> %arg0, i1 %cond) {
11151115
; CHECK-V2-NEXT: [[ENTRY:.*:]]
11161116
; CHECK-V2-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
11171117
; CHECK-V2: [[THEN]]:
1118-
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
1118+
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
11191119
; CHECK-V2-NEXT: tail call void @func0()
11201120
; CHECK-V2-NEXT: br label %[[FINALLY:.*]]
11211121
; CHECK-V2: [[ELSE]]:
@@ -1182,7 +1182,7 @@ define <32 x half> @shuffle_v32f16(<3 x half> %arg0, i1 %cond) {
11821182
; CHECK-V1-NEXT: [[ENTRY:.*:]]
11831183
; CHECK-V1-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
11841184
; CHECK-V1: [[THEN]]:
1185-
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
1185+
; CHECK-V1-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
11861186
; CHECK-V1-NEXT: tail call void @func0()
11871187
; CHECK-V1-NEXT: br label %[[FINALLY:.*]]
11881188
; CHECK-V1: [[ELSE]]:
@@ -1198,7 +1198,7 @@ define <32 x half> @shuffle_v32f16(<3 x half> %arg0, i1 %cond) {
11981198
; CHECK-V2-NEXT: [[ENTRY:.*:]]
11991199
; CHECK-V2-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
12001200
; CHECK-V2: [[THEN]]:
1201-
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 1, i32 2, i32 0>
1201+
; CHECK-V2-NEXT: [[TMP0:%.*]] = shufflevector <3 x half> [[ARG0]], <3 x half> poison, <3 x i32> <i32 2, i32 0, i32 1>
12021202
; CHECK-V2-NEXT: tail call void @func0()
12031203
; CHECK-V2-NEXT: br label %[[FINALLY:.*]]
12041204
; CHECK-V2: [[ELSE]]:

0 commit comments

Comments
 (0)