Skip to content

Commit 9b1419a

Browse files
committed
[NFC][LVI][CVP] Tests where pre-specified add no-wrap flags could be used by LVI
There's `ConstantRange::addWithNoWrap()`, LVI could use it to further constrain the range, if an `add` already has some no-wrap flags specified.
1 parent f9b1dc5 commit 9b1419a

File tree

1 file changed

+136
-0
lines changed
  • llvm/test/Transforms/CorrelatedValuePropagation

1 file changed

+136
-0
lines changed

llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll

+136
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,140 @@ out:
242242
ret i1 %ret
243243
}
244244

245+
define i1 @test7(i32 %a, i32 %b) {
246+
; CHECK-LABEL: @test7(
247+
; CHECK-NEXT: begin:
248+
; CHECK-NEXT: [[CMP0:%.*]] = icmp sge i32 [[A:%.*]], 0
249+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[B:%.*]], 0
250+
; CHECK-NEXT: [[BR:%.*]] = and i1 [[CMP0]], [[CMP1]]
251+
; CHECK-NEXT: br i1 [[BR]], label [[BB:%.*]], label [[EXIT:%.*]]
252+
; CHECK: bb:
253+
; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[A]], [[B]]
254+
; CHECK-NEXT: br label [[CONT:%.*]]
255+
; CHECK: cont:
256+
; CHECK-NEXT: [[RES:%.*]] = icmp sge i32 [[ADD]], 0
257+
; CHECK-NEXT: br label [[EXIT]]
258+
; CHECK: exit:
259+
; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ]
260+
; CHECK-NEXT: ret i1 [[IV]]
261+
;
262+
begin:
263+
%cmp0 = icmp sge i32 %a, 0
264+
%cmp1 = icmp sge i32 %b, 0
265+
%br = and i1 %cmp0, %cmp1
266+
br i1 %br, label %bb, label %exit
267+
268+
bb:
269+
%add = add i32 %a, %b
270+
br label %cont
271+
272+
cont:
273+
%res = icmp sge i32 %add, 0
274+
br label %exit
275+
276+
exit:
277+
%iv = phi i1 [ true, %begin ], [ %res, %cont ]
278+
ret i1 %iv
279+
}
280+
281+
define i1 @test8(i32 %a, i32 %b) {
282+
; CHECK-LABEL: @test8(
283+
; CHECK-NEXT: begin:
284+
; CHECK-NEXT: [[CMP0:%.*]] = icmp sge i32 [[A:%.*]], 0
285+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[B:%.*]], 0
286+
; CHECK-NEXT: [[BR:%.*]] = and i1 [[CMP0]], [[CMP1]]
287+
; CHECK-NEXT: br i1 [[BR]], label [[BB:%.*]], label [[EXIT:%.*]]
288+
; CHECK: bb:
289+
; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i32 [[A]], [[B]]
290+
; CHECK-NEXT: br label [[CONT:%.*]]
291+
; CHECK: cont:
292+
; CHECK-NEXT: [[RES:%.*]] = icmp sge i32 [[ADD]], 0
293+
; CHECK-NEXT: br label [[EXIT]]
294+
; CHECK: exit:
295+
; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ]
296+
; CHECK-NEXT: ret i1 [[IV]]
297+
;
298+
begin:
299+
%cmp0 = icmp sge i32 %a, 0
300+
%cmp1 = icmp sge i32 %b, 0
301+
%br = and i1 %cmp0, %cmp1
302+
br i1 %br, label %bb, label %exit
303+
304+
bb:
305+
%add = add nsw i32 %a, %b
306+
br label %cont
307+
308+
cont:
309+
%res = icmp sge i32 %add, 0
310+
br label %exit
311+
312+
exit:
313+
%iv = phi i1 [ true, %begin ], [ %res, %cont ]
314+
ret i1 %iv
315+
}
316+
317+
define i1 @test10(i32 %a, i32 %b) {
318+
; CHECK-LABEL: @test10(
319+
; CHECK-NEXT: begin:
320+
; CHECK-NEXT: [[CMP:%.*]] = icmp uge i32 [[A:%.*]], -256
321+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
322+
; CHECK: bb:
323+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[A]], [[B:%.*]]
324+
; CHECK-NEXT: br label [[CONT:%.*]]
325+
; CHECK: cont:
326+
; CHECK-NEXT: [[RES:%.*]] = icmp uge i32 [[ADD]], -256
327+
; CHECK-NEXT: br label [[EXIT]]
328+
; CHECK: exit:
329+
; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ]
330+
; CHECK-NEXT: ret i1 [[IV]]
331+
;
332+
begin:
333+
%cmp = icmp uge i32 %a, 4294967040
334+
br i1 %cmp, label %bb, label %exit
335+
336+
bb:
337+
%add = add i32 %a, %b
338+
br label %cont
339+
340+
cont:
341+
%res = icmp uge i32 %add, 4294967040
342+
br label %exit
343+
344+
exit:
345+
%iv = phi i1 [ true, %begin ], [ %res, %cont ]
346+
ret i1 %iv
347+
}
348+
349+
define i1 @test11(i32 %a, i32 %b) {
350+
; CHECK-LABEL: @test11(
351+
; CHECK-NEXT: begin:
352+
; CHECK-NEXT: [[CMP:%.*]] = icmp uge i32 [[A:%.*]], -256
353+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
354+
; CHECK: bb:
355+
; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[A]], [[B:%.*]]
356+
; CHECK-NEXT: br label [[CONT:%.*]]
357+
; CHECK: cont:
358+
; CHECK-NEXT: [[RES:%.*]] = icmp uge i32 [[ADD]], -256
359+
; CHECK-NEXT: br label [[EXIT]]
360+
; CHECK: exit:
361+
; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ]
362+
; CHECK-NEXT: ret i1 [[IV]]
363+
;
364+
begin:
365+
%cmp = icmp uge i32 %a, 4294967040
366+
br i1 %cmp, label %bb, label %exit
367+
368+
bb:
369+
%add = add nuw i32 %a, %b
370+
br label %cont
371+
372+
cont:
373+
%res = icmp uge i32 %add, 4294967040
374+
br label %exit
375+
376+
exit:
377+
%iv = phi i1 [ true, %begin ], [ %res, %cont ]
378+
ret i1 %iv
379+
}
380+
245381
attributes #4 = { noreturn }

0 commit comments

Comments
 (0)