Skip to content

Commit a696451

Browse files
committed
[LSR][NFC] Add pre-commit test
1 parent 4f3f09e commit a696451

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed

llvm/test/Transforms/LoopStrengthReduce/preserve-lcssa.ll

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,118 @@ loop_exit_7: ; preds = %be_6, %loop_4
8989
%val_i32_24.lcssa = phi i32 [ %val_i32_24, %be_6 ], [ %val_i32_24, %loop_4 ]
9090
br label %bb_5
9191
}
92+
93+
define i64 @test_duplicated_phis(i64 noundef %N) {
94+
; LEGACYPM-LABEL: define i64 @test_duplicated_phis
95+
; LEGACYPM-SAME: (i64 noundef [[N:%.*]]) {
96+
; LEGACYPM-NEXT: entry:
97+
; LEGACYPM-NEXT: [[MUL:%.*]] = shl i64 [[N]], 1
98+
; LEGACYPM-NEXT: [[CMP6_NOT:%.*]] = icmp eq i64 [[MUL]], 0
99+
; LEGACYPM-NEXT: br i1 [[CMP6_NOT]], label [[FOR_END:%.*]], label [[FOR_BODY_PREHEADER:%.*]]
100+
; LEGACYPM: for.body.preheader:
101+
; LEGACYPM-NEXT: [[TMP0:%.*]] = icmp ult i64 [[MUL]], 4
102+
; LEGACYPM-NEXT: br i1 [[TMP0]], label [[FOR_END_LOOPEXIT_UNR_LCSSA:%.*]], label [[FOR_BODY_PREHEADER_NEW:%.*]]
103+
; LEGACYPM: for.body.preheader.new:
104+
; LEGACYPM-NEXT: [[UNROLL_ITER:%.*]] = and i64 [[MUL]], -4
105+
; LEGACYPM-NEXT: br label [[FOR_BODY:%.*]]
106+
; LEGACYPM: for.body:
107+
; LEGACYPM-NEXT: [[LSR_IV:%.*]] = phi i64 [ [[LSR_IV_NEXT:%.*]], [[FOR_BODY]] ], [ -1, [[FOR_BODY_PREHEADER_NEW]] ]
108+
; LEGACYPM-NEXT: [[I_07:%.*]] = phi i64 [ 0, [[FOR_BODY_PREHEADER_NEW]] ], [ [[INC_3:%.*]], [[FOR_BODY]] ]
109+
; LEGACYPM-NEXT: [[INC_3]] = add i64 [[I_07]], 4
110+
; LEGACYPM-NEXT: [[LSR_IV_NEXT]] = add i64 [[LSR_IV]], -2
111+
; LEGACYPM-NEXT: [[NITER_NCMP_3_NOT:%.*]] = icmp eq i64 [[UNROLL_ITER]], [[INC_3]]
112+
; LEGACYPM-NEXT: br i1 [[NITER_NCMP_3_NOT]], label [[FOR_END_LOOPEXIT_UNR_LCSSA_LOOPEXIT:%.*]], label [[FOR_BODY]]
113+
; LEGACYPM: for.end.loopexit.unr-lcssa.loopexit:
114+
; LEGACYPM-NEXT: [[LSR_IV_NEXT_LCSSA:%.*]] = phi i64 [ [[LSR_IV_NEXT]], [[FOR_BODY]] ]
115+
; LEGACYPM-NEXT: [[TMP1:%.*]] = add i64 [[LSR_IV_NEXT]], 1
116+
; LEGACYPM-NEXT: br label [[FOR_END_LOOPEXIT_UNR_LCSSA]]
117+
; LEGACYPM: for.end.loopexit.unr-lcssa:
118+
; LEGACYPM-NEXT: [[RES_1_LCSSA_PH:%.*]] = phi i64 [ undef, [[FOR_BODY_PREHEADER]] ], [ [[TMP1]], [[FOR_END_LOOPEXIT_UNR_LCSSA_LOOPEXIT]] ]
119+
; LEGACYPM-NEXT: [[RES_09_UNR:%.*]] = phi i64 [ -1, [[FOR_BODY_PREHEADER]] ], [ [[LSR_IV_NEXT_LCSSA]], [[FOR_END_LOOPEXIT_UNR_LCSSA_LOOPEXIT]] ]
120+
; LEGACYPM-NEXT: [[TMP2:%.*]] = and i64 [[N]], 1
121+
; LEGACYPM-NEXT: [[LCMP_MOD_NOT:%.*]] = icmp eq i64 [[TMP2]], 0
122+
; LEGACYPM-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[LCMP_MOD_NOT]], i64 [[RES_1_LCSSA_PH]], i64 [[RES_09_UNR]]
123+
; LEGACYPM-NEXT: br label [[FOR_END]]
124+
; LEGACYPM: for.end:
125+
; LEGACYPM-NEXT: [[RES_0_LCSSA:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[SPEC_SELECT]], [[FOR_END_LOOPEXIT_UNR_LCSSA]] ]
126+
; LEGACYPM-NEXT: ret i64 [[RES_0_LCSSA]]
127+
;
128+
; NEWPM-LABEL: define i64 @test_duplicated_phis
129+
; NEWPM-SAME: (i64 noundef [[N:%.*]]) {
130+
; NEWPM-NEXT: entry:
131+
; NEWPM-NEXT: [[MUL:%.*]] = shl i64 [[N]], 1
132+
; NEWPM-NEXT: [[CMP6_NOT:%.*]] = icmp eq i64 [[MUL]], 0
133+
; NEWPM-NEXT: br i1 [[CMP6_NOT]], label [[FOR_END:%.*]], label [[FOR_BODY_PREHEADER:%.*]]
134+
; NEWPM: for.body.preheader:
135+
; NEWPM-NEXT: [[TMP0:%.*]] = icmp ult i64 [[MUL]], 4
136+
; NEWPM-NEXT: br i1 [[TMP0]], label [[FOR_END_LOOPEXIT_UNR_LCSSA:%.*]], label [[FOR_BODY_PREHEADER_NEW:%.*]]
137+
; NEWPM: for.body.preheader.new:
138+
; NEWPM-NEXT: [[UNROLL_ITER:%.*]] = and i64 [[MUL]], -4
139+
; NEWPM-NEXT: br label [[FOR_BODY:%.*]]
140+
; NEWPM: for.body:
141+
; NEWPM-NEXT: [[LSR_IV:%.*]] = phi i64 [ [[LSR_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 3, [[FOR_BODY_PREHEADER_NEW]] ]
142+
; NEWPM-NEXT: [[I_07:%.*]] = phi i64 [ 0, [[FOR_BODY_PREHEADER_NEW]] ], [ [[INC_3:%.*]], [[FOR_BODY]] ]
143+
; NEWPM-NEXT: [[INC_3]] = add i64 [[I_07]], 4
144+
; NEWPM-NEXT: [[LSR_IV_NEXT]] = add nsw i64 [[LSR_IV]], -2
145+
; NEWPM-NEXT: [[NITER_NCMP_3_NOT:%.*]] = icmp eq i64 [[UNROLL_ITER]], [[INC_3]]
146+
; NEWPM-NEXT: [[TMP1:%.*]] = add i64 [[LSR_IV_NEXT]], -3
147+
; NEWPM-NEXT: br i1 [[NITER_NCMP_3_NOT]], label [[FOR_END_LOOPEXIT_UNR_LCSSA_LOOPEXIT:%.*]], label [[FOR_BODY]]
148+
; NEWPM: for.end.loopexit.unr-lcssa.loopexit:
149+
; NEWPM-NEXT: [[REASS_SUB_LCSSA:%.*]] = phi i64 [ [[LSR_IV_NEXT]], [[FOR_BODY]] ]
150+
; NEWPM-NEXT: [[RES_1_3_LCSSA:%.*]] = phi i64 [ [[TMP1]], [[FOR_BODY]] ]
151+
; NEWPM-NEXT: [[TMP2:%.*]] = add i64 [[REASS_SUB_LCSSA]], -4
152+
; NEWPM-NEXT: br label [[FOR_END_LOOPEXIT_UNR_LCSSA]]
153+
; NEWPM: for.end.loopexit.unr-lcssa:
154+
; NEWPM-NEXT: [[RES_1_LCSSA_PH:%.*]] = phi i64 [ undef, [[FOR_BODY_PREHEADER]] ], [ [[RES_1_3_LCSSA]], [[FOR_END_LOOPEXIT_UNR_LCSSA_LOOPEXIT]] ]
155+
; NEWPM-NEXT: [[RES_09_UNR:%.*]] = phi i64 [ -1, [[FOR_BODY_PREHEADER]] ], [ [[TMP2]], [[FOR_END_LOOPEXIT_UNR_LCSSA_LOOPEXIT]] ]
156+
; NEWPM-NEXT: [[TMP3:%.*]] = and i64 [[N]], 1
157+
; NEWPM-NEXT: [[LCMP_MOD_NOT:%.*]] = icmp eq i64 [[TMP3]], 0
158+
; NEWPM-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[LCMP_MOD_NOT]], i64 [[RES_1_LCSSA_PH]], i64 [[RES_09_UNR]]
159+
; NEWPM-NEXT: br label [[FOR_END]]
160+
; NEWPM: for.end:
161+
; NEWPM-NEXT: [[RES_0_LCSSA:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[SPEC_SELECT]], [[FOR_END_LOOPEXIT_UNR_LCSSA]] ]
162+
; NEWPM-NEXT: ret i64 [[RES_0_LCSSA]]
163+
;
164+
entry:
165+
%mul = shl i64 %N, 1
166+
%cmp6.not = icmp eq i64 %mul, 0
167+
br i1 %cmp6.not, label %for.end, label %for.body.preheader
168+
169+
for.body.preheader:
170+
%0 = icmp ult i64 %mul, 4
171+
br i1 %0, label %for.end.loopexit.unr-lcssa, label %for.body.preheader.new
172+
173+
for.body.preheader.new:
174+
%unroll_iter = and i64 %mul, -4
175+
br label %for.body
176+
177+
for.body:
178+
%res.09 = phi i64 [ 0, %for.body.preheader.new ], [ %res.1.3, %for.body ]
179+
%i.07 = phi i64 [ 0, %for.body.preheader.new ], [ %inc.3, %for.body ]
180+
%niter = phi i64 [ 0, %for.body.preheader.new ], [ %niter.next.3, %for.body ]
181+
%res.1.1 = add i64 %res.09, -1
182+
%inc.1 = or disjoint i64 %i.07, 2
183+
%res.1.2 = add i64 %inc.1, %res.1.1
184+
%reass.sub = sub i64 %res.1.2, %i.07
185+
%res.1.3 = add i64 %reass.sub, -3
186+
%inc.3 = add nuw i64 %i.07, 4
187+
%niter.next.3 = add i64 %niter, 4
188+
%niter.ncmp.3.not = icmp eq i64 %niter.next.3, %unroll_iter
189+
br i1 %niter.ncmp.3.not, label %for.end.loopexit.unr-lcssa.loopexit, label %for.body
190+
191+
for.end.loopexit.unr-lcssa.loopexit:
192+
%1 = add i64 %reass.sub, -4
193+
br label %for.end.loopexit.unr-lcssa
194+
195+
for.end.loopexit.unr-lcssa:
196+
%res.1.lcssa.ph = phi i64 [ undef, %for.body.preheader ], [ %res.1.3, %for.end.loopexit.unr-lcssa.loopexit ]
197+
%res.09.unr = phi i64 [ -1, %for.body.preheader ], [ %1, %for.end.loopexit.unr-lcssa.loopexit ]
198+
%2 = and i64 %N, 1
199+
%lcmp.mod.not = icmp eq i64 %2, 0
200+
%spec.select = select i1 %lcmp.mod.not, i64 %res.1.lcssa.ph, i64 %res.09.unr
201+
br label %for.end
202+
203+
for.end:
204+
%res.0.lcssa = phi i64 [ 0, %entry ], [ %spec.select, %for.end.loopexit.unr-lcssa ]
205+
ret i64 %res.0.lcssa
206+
}

0 commit comments

Comments
 (0)