Skip to content

Commit 4549a8d

Browse files
committed
[InstCombine] Add additional tests for select of phi transform (NFC)
Test coverage for the canSelectOperandBeMappingIntoPredBlock() logic.
1 parent a800533 commit 4549a8d

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

llvm/test/Transforms/InstCombine/phi-select-constant.ll

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,89 @@ join:
195195
%sel = select i1 %phi1, i32 %phi2, i32 %phi3
196196
ret i32 %sel
197197
}
198+
199+
define i32 @dominating_values_select_same_block(i1 %c1, i1 %c2, ptr %p, ptr %p2) {
200+
; CHECK-LABEL: @dominating_values_select_same_block(
201+
; CHECK-NEXT: entry:
202+
; CHECK-NEXT: [[B:%.*]] = load i32, ptr [[P2:%.*]], align 4
203+
; CHECK-NEXT: br i1 [[C1:%.*]], label [[FINAL:%.*]], label [[DELAY:%.*]]
204+
; CHECK: delay:
205+
; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
206+
; CHECK-NEXT: [[TMP0:%.*]] = select i1 [[C2:%.*]], i32 [[A]], i32 [[B]]
207+
; CHECK-NEXT: br label [[FINAL]]
208+
; CHECK: final:
209+
; CHECK-NEXT: [[USE2:%.*]] = phi i32 [ [[B]], [[ENTRY:%.*]] ], [ [[TMP0]], [[DELAY]] ]
210+
; CHECK-NEXT: ret i32 [[USE2]]
211+
;
212+
entry:
213+
%a = load i32, ptr %p
214+
%b = load i32, ptr %p2
215+
br i1 %c1, label %final, label %delay
216+
217+
delay:
218+
br label %final
219+
220+
final:
221+
%use2 = phi i1 [ false, %entry ], [ %c2, %delay ]
222+
%value = select i1 %use2, i32 %a, i32 %b
223+
ret i32 %value
224+
}
225+
226+
define i32 @dominating_values_select_not_same_block(i1 %c1, i1 %c2, ptr %p, ptr %p2) {
227+
; CHECK-LABEL: @dominating_values_select_not_same_block(
228+
; CHECK-NEXT: entry:
229+
; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
230+
; CHECK-NEXT: [[B:%.*]] = load i32, ptr [[P2:%.*]], align 4
231+
; CHECK-NEXT: br i1 [[C1:%.*]], label [[FINAL:%.*]], label [[DELAY:%.*]]
232+
; CHECK: delay:
233+
; CHECK-NEXT: br label [[FINAL]]
234+
; CHECK: final:
235+
; CHECK-NEXT: [[USE2:%.*]] = phi i1 [ false, [[ENTRY:%.*]] ], [ [[C2:%.*]], [[DELAY]] ]
236+
; CHECK-NEXT: br label [[SPLIT:%.*]]
237+
; CHECK: split:
238+
; CHECK-NEXT: [[VALUE:%.*]] = select i1 [[USE2]], i32 [[A]], i32 [[B]]
239+
; CHECK-NEXT: ret i32 [[VALUE]]
240+
;
241+
entry:
242+
%a = load i32, ptr %p
243+
%b = load i32, ptr %p2
244+
br i1 %c1, label %final, label %delay
245+
246+
delay:
247+
br label %final
248+
249+
final:
250+
%use2 = phi i1 [ false, %entry ], [ %c2, %delay ]
251+
br label %split
252+
253+
split:
254+
%value = select i1 %use2, i32 %a, i32 %b
255+
ret i32 %value
256+
}
257+
258+
define i32 @not_dominating_values(i1 %c1, i1 %c2, ptr %p, ptr %p2) {
259+
; CHECK-LABEL: @not_dominating_values(
260+
; CHECK-NEXT: entry:
261+
; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
262+
; CHECK-NEXT: br i1 [[C1:%.*]], label [[FINAL:%.*]], label [[DELAY:%.*]]
263+
; CHECK: delay:
264+
; CHECK-NEXT: br label [[FINAL]]
265+
; CHECK: final:
266+
; CHECK-NEXT: [[USE2:%.*]] = phi i1 [ false, [[ENTRY:%.*]] ], [ [[C2:%.*]], [[DELAY]] ]
267+
; CHECK-NEXT: [[B:%.*]] = load i32, ptr [[P2:%.*]], align 4
268+
; CHECK-NEXT: [[VALUE:%.*]] = select i1 [[USE2]], i32 [[A]], i32 [[B]]
269+
; CHECK-NEXT: ret i32 [[VALUE]]
270+
;
271+
entry:
272+
%a = load i32, ptr %p
273+
br i1 %c1, label %final, label %delay
274+
275+
delay:
276+
br label %final
277+
278+
final:
279+
%use2 = phi i1 [ false, %entry ], [ %c2, %delay ]
280+
%b = load i32, ptr %p2
281+
%value = select i1 %use2, i32 %a, i32 %b
282+
ret i32 %value
283+
}

0 commit comments

Comments
 (0)