Skip to content

Commit 248e430

Browse files
committed
precommit test for D109845/D106852
1 parent acaca56 commit 248e430

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

llvm/test/Analysis/ScalarEvolution/no-wrap-add-exprs.ll

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,3 +284,81 @@ define void @f3(i8* %x_addr, i8* %y_addr, i32* %tmp_addr) {
284284

285285
ret void
286286
}
287+
288+
289+
; The next two tests demonstrate that (at the time of being written), SCEV
290+
; will incorrectly propagate flags from an add in one scope to an add in
291+
; another scope. Note as well that the results are visit order dependent
292+
; and (as shown in the _b variant) the printer frequently makes the actual
293+
; bug very hard to see.
294+
define i1 @test2_a(i32 %a, i32 %b, i1 %will_overflow) {
295+
; CHECK-LABEL: 'test2_a'
296+
; CHECK-NEXT: Classifying expressions for: @test2_a
297+
; CHECK-NEXT: %iv = phi i32 [ %a, %entry ], [ %iv.next, %loop ]
298+
; CHECK-NEXT: --> {%a,+,%b}<nuw><nsw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
299+
; CHECK-NEXT: %iv.next = add nuw nsw i32 %iv, %b
300+
; CHECK-NEXT: --> {(%a + %b)<nuw><nsw>,+,%b}<nuw><nsw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
301+
; CHECK-NEXT: %trap = udiv i32 %a, %iv.next
302+
; CHECK-NEXT: --> (%a /u {(%a + %b)<nuw><nsw>,+,%b}<nuw><nsw><%loop>) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
303+
; CHECK-NEXT: %c = add i32 %a, %b
304+
; CHECK-NEXT: --> (%a + %b)<nuw><nsw> U: full-set S: full-set
305+
; CHECK-NEXT: Determining loop execution counts for: @test2_a
306+
; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
307+
; CHECK-NEXT: Loop %loop: Unpredictable max backedge-taken count.
308+
; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count.
309+
;
310+
entry:
311+
br i1 %will_overflow, label %exit1, label %loop
312+
313+
loop:
314+
%iv = phi i32 [%a, %entry], [%iv.next, %loop]
315+
%iv.next = add nuw nsw i32 %iv, %b
316+
%trap = udiv i32 %a, %iv.next ;; Use to force poison -> UB
317+
%ret2 = icmp ult i32 %iv.next, %a
318+
; Note: backedge is unreachable here
319+
br i1 %ret2, label %loop, label %exit2
320+
321+
exit2:
322+
ret i1 false
323+
324+
exit1:
325+
%c = add i32 %a, %b
326+
%ret1 = icmp ult i32 %c, %a
327+
ret i1 false
328+
}
329+
330+
define i1 @test2_b(i32 %a, i32 %b, i1 %will_overflow) {
331+
; CHECK-LABEL: 'test2_b'
332+
; CHECK-NEXT: Classifying expressions for: @test2_b
333+
; CHECK-NEXT: %c = add i32 %a, %b
334+
; CHECK-NEXT: --> (%a + %b) U: full-set S: full-set
335+
; CHECK-NEXT: %iv = phi i32 [ %a, %entry ], [ %iv.next, %loop ]
336+
; CHECK-NEXT: --> {%a,+,%b}<nuw><nsw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
337+
; CHECK-NEXT: %iv.next = add nuw nsw i32 %iv, %b
338+
; CHECK-NEXT: --> {(%a + %b)<nuw><nsw>,+,%b}<nuw><nsw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
339+
; CHECK-NEXT: %trap = udiv i32 %a, %iv.next
340+
; CHECK-NEXT: --> (%a /u {(%a + %b)<nuw><nsw>,+,%b}<nuw><nsw><%loop>) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
341+
; CHECK-NEXT: Determining loop execution counts for: @test2_b
342+
; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
343+
; CHECK-NEXT: Loop %loop: Unpredictable max backedge-taken count.
344+
; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count.
345+
;
346+
entry:
347+
br i1 %will_overflow, label %exit1, label %loop
348+
349+
exit1:
350+
%c = add i32 %a, %b
351+
%ret1 = icmp ult i32 %c, %a
352+
ret i1 false
353+
354+
loop:
355+
%iv = phi i32 [%a, %entry], [%iv.next, %loop]
356+
%iv.next = add nuw nsw i32 %iv, %b
357+
%trap = udiv i32 %a, %iv.next
358+
%ret2 = icmp ult i32 %iv.next, %a
359+
; Note: backedge is unreachable here
360+
br i1 %ret2, label %loop, label %exit2
361+
362+
exit2:
363+
ret i1 false
364+
}

0 commit comments

Comments
 (0)