Skip to content

Commit 2e67f5c

Browse files
committed
[SLP][NFC]Add udiv/srem test cases, NFC
1 parent 0b8381a commit 2e67f5c

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

llvm/test/Transforms/SLPVectorizer/X86/no_alternate_divrem.ll

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,54 @@ entry:
5555
ret void
5656
}
5757

58+
define void @test_add_udiv(ptr %arr1, ptr %arr2, i32 %a0, i32 %a1, i32 %a2, i32 %a3) {
59+
; CHECK-LABEL: @test_add_udiv(
60+
; CHECK-NEXT: entry:
61+
; CHECK-NEXT: [[GEP1_2:%.*]] = getelementptr i32, ptr [[ARR1:%.*]], i32 2
62+
; CHECK-NEXT: [[GEP1_3:%.*]] = getelementptr i32, ptr [[ARR1]], i32 3
63+
; CHECK-NEXT: [[V2:%.*]] = load i32, ptr [[GEP1_2]], align 4
64+
; CHECK-NEXT: [[V3:%.*]] = load i32, ptr [[GEP1_3]], align 4
65+
; CHECK-NEXT: [[Y2:%.*]] = add nsw i32 [[A2:%.*]], 42
66+
; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i32>, ptr [[ARR1]], align 4
67+
; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i32> <i32 poison, i32 poison, i32 0, i32 poison>, i32 [[A0:%.*]], i32 0
68+
; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i32> [[TMP1]], i32 [[A1:%.*]], i32 1
69+
; CHECK-NEXT: [[TMP3:%.*]] = insertelement <4 x i32> [[TMP2]], i32 [[A3:%.*]], i32 3
70+
; CHECK-NEXT: [[TMP4:%.*]] = add nsw <4 x i32> <i32 1146, i32 146, i32 0, i32 0>, [[TMP3]]
71+
; CHECK-NEXT: [[RES2:%.*]] = udiv i32 [[V2]], [[Y2]]
72+
; CHECK-NEXT: [[TMP5:%.*]] = insertelement <4 x i32> poison, i32 [[RES2]], i32 2
73+
; CHECK-NEXT: [[TMP6:%.*]] = insertelement <4 x i32> [[TMP5]], i32 [[V3]], i32 3
74+
; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <2 x i32> [[TMP0]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
75+
; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> [[TMP7]], <4 x i32> <i32 4, i32 5, i32 2, i32 3>
76+
; CHECK-NEXT: [[TMP9:%.*]] = add nsw <4 x i32> [[TMP8]], [[TMP4]]
77+
; CHECK-NEXT: store <4 x i32> [[TMP9]], ptr [[ARR2:%.*]], align 4
78+
; CHECK-NEXT: ret void
79+
;
80+
entry:
81+
%gep1.1 = getelementptr i32, ptr %arr1, i32 1
82+
%gep1.2 = getelementptr i32, ptr %arr1, i32 2
83+
%gep1.3 = getelementptr i32, ptr %arr1, i32 3
84+
%gep2.1 = getelementptr i32, ptr %arr2, i32 1
85+
%gep2.2 = getelementptr i32, ptr %arr2, i32 2
86+
%gep2.3 = getelementptr i32, ptr %arr2, i32 3
87+
%v0 = load i32, ptr %arr1
88+
%v1 = load i32, ptr %gep1.1
89+
%v2 = load i32, ptr %gep1.2
90+
%v3 = load i32, ptr %gep1.3
91+
%y0 = add nsw i32 %a0, 1146
92+
%y1 = add nsw i32 %a1, 146
93+
%y2 = add nsw i32 %a2, 42
94+
%y3 = add nsw i32 %a3, 0
95+
%res0 = add nsw i32 %v0, %y0
96+
%res1 = add nsw i32 %v1, %y1
97+
%res2 = udiv i32 %v2, %y2
98+
%res3 = add nsw i32 %v3, %y3
99+
store i32 %res0, ptr %arr2
100+
store i32 %res1, ptr %gep2.1
101+
store i32 %res2, ptr %gep2.2
102+
store i32 %res3, ptr %gep2.3
103+
ret void
104+
}
105+
58106
;; Similar test, but now div/rem is main opcode and not the alternate one. Same issue.
59107
define void @test_urem_add(ptr %arr1, ptr %arr2, i32 %a0, i32 %a1, i32 %a2, i32 %a3) {
60108
; CHECK-LABEL: @test_urem_add(
@@ -114,3 +162,56 @@ entry:
114162
store i32 %res3, ptr %gep2.3
115163
ret void
116164
}
165+
166+
define void @test_srem_add(ptr %arr1, ptr %arr2, i32 %a0, i32 %a1, i32 %a2, i32 %a3) {
167+
; CHECK-LABEL: @test_srem_add(
168+
; CHECK-NEXT: entry:
169+
; CHECK-NEXT: [[GEP1_1:%.*]] = getelementptr i32, ptr [[ARR1:%.*]], i32 1
170+
; CHECK-NEXT: [[GEP1_2:%.*]] = getelementptr i32, ptr [[ARR1]], i32 2
171+
; CHECK-NEXT: [[GEP1_3:%.*]] = getelementptr i32, ptr [[ARR1]], i32 3
172+
; CHECK-NEXT: [[GEP2_1:%.*]] = getelementptr i32, ptr [[ARR2:%.*]], i32 1
173+
; CHECK-NEXT: [[GEP2_2:%.*]] = getelementptr i32, ptr [[ARR2]], i32 2
174+
; CHECK-NEXT: [[GEP2_3:%.*]] = getelementptr i32, ptr [[ARR2]], i32 3
175+
; CHECK-NEXT: [[V0:%.*]] = load i32, ptr [[ARR1]], align 4
176+
; CHECK-NEXT: [[V1:%.*]] = load i32, ptr [[GEP1_1]], align 4
177+
; CHECK-NEXT: [[V2:%.*]] = load i32, ptr [[GEP1_2]], align 4
178+
; CHECK-NEXT: [[V3:%.*]] = load i32, ptr [[GEP1_3]], align 4
179+
; CHECK-NEXT: [[Y0:%.*]] = add nsw i32 [[A0:%.*]], 1146
180+
; CHECK-NEXT: [[Y1:%.*]] = add nsw i32 [[A1:%.*]], 146
181+
; CHECK-NEXT: [[Y2:%.*]] = add nsw i32 [[A2:%.*]], 42
182+
; CHECK-NEXT: [[Y3:%.*]] = add nsw i32 [[A3:%.*]], 0
183+
; CHECK-NEXT: [[RES0:%.*]] = srem i32 [[V0]], [[Y0]]
184+
; CHECK-NEXT: [[RES1:%.*]] = srem i32 [[V1]], [[Y1]]
185+
; CHECK-NEXT: [[RES2:%.*]] = srem i32 [[V2]], [[Y2]]
186+
; CHECK-NEXT: [[RES3:%.*]] = add nsw i32 [[V3]], [[Y3]]
187+
; CHECK-NEXT: store i32 [[RES0]], ptr [[ARR2]], align 4
188+
; CHECK-NEXT: store i32 [[RES1]], ptr [[GEP2_1]], align 4
189+
; CHECK-NEXT: store i32 [[RES2]], ptr [[GEP2_2]], align 4
190+
; CHECK-NEXT: store i32 [[RES3]], ptr [[GEP2_3]], align 4
191+
; CHECK-NEXT: ret void
192+
;
193+
entry:
194+
%gep1.1 = getelementptr i32, ptr %arr1, i32 1
195+
%gep1.2 = getelementptr i32, ptr %arr1, i32 2
196+
%gep1.3 = getelementptr i32, ptr %arr1, i32 3
197+
%gep2.1 = getelementptr i32, ptr %arr2, i32 1
198+
%gep2.2 = getelementptr i32, ptr %arr2, i32 2
199+
%gep2.3 = getelementptr i32, ptr %arr2, i32 3
200+
%v0 = load i32, ptr %arr1
201+
%v1 = load i32, ptr %gep1.1
202+
%v2 = load i32, ptr %gep1.2
203+
%v3 = load i32, ptr %gep1.3
204+
%y0 = add nsw i32 %a0, 1146
205+
%y1 = add nsw i32 %a1, 146
206+
%y2 = add nsw i32 %a2, 42
207+
%y3 = add nsw i32 %a3, 0
208+
%res0 = srem i32 %v0, %y0
209+
%res1 = srem i32 %v1, %y1
210+
%res2 = srem i32 %v2, %y2
211+
%res3 = add nsw i32 %v3, %y3
212+
store i32 %res0, ptr %arr2
213+
store i32 %res1, ptr %gep2.1
214+
store i32 %res2, ptr %gep2.2
215+
store i32 %res3, ptr %gep2.3
216+
ret void
217+
}

0 commit comments

Comments
 (0)