xref: /llvm-project/llvm/test/tools/llvm-diff/assumption-report-order.ll (revision e044796132abd9e10e21093822dc234003628fbd)
1*e0447961SJannik Silvanus; Check that differences are reported in the BB processing order
2*e0447961SJannik Silvanus; following the control flow, independent on whether the diff was depending
3*e0447961SJannik Silvanus; on an assumption or not.
4*e0447961SJannik Silvanus;
5*e0447961SJannik Silvanus; Replace %newvar1 with %newvar2 in the phi node. This can only
6*e0447961SJannik Silvanus; be detected to be different once BB2 has been processed, so leads to a assumption
7*e0447961SJannik Silvanus; and is detected to diff later on.
8*e0447961SJannik Silvanus; Also, replace the 1000 by 2000 in BB1, which is detected directly.
9*e0447961SJannik Silvanus;
10*e0447961SJannik Silvanus; RUN: rm -f %t.ll
11*e0447961SJannik Silvanus; RUN: cat %s | sed -e 's/ %newvar1, %BB2 / %newvar2, %BB2 /' | sed -e 's/1000/2000/' > %t.ll
12*e0447961SJannik Silvanus; RUN: not llvm-diff %s %t.ll 2>&1 | FileCheck %s
13*e0447961SJannik Silvanus
14*e0447961SJannik Silvanus; CHECK:      in function func:
15*e0447961SJannik Silvanus; CHECK-NEXT:   in block %BB0:
16*e0447961SJannik Silvanus; CHECK-NEXT:     >   %var = phi i32 [ 0, %ENTRY ], [ %newvar2, %BB2 ]
17*e0447961SJannik Silvanus; CHECK-NEXT:     <   %var = phi i32 [ 0, %ENTRY ], [ %newvar1, %BB2 ]
18*e0447961SJannik Silvanus; CHECK-NEXT:   in block %BB1:
19*e0447961SJannik Silvanus; CHECK-NEXT:     >   %diffvar = add i32 %var, 2000
20*e0447961SJannik Silvanus; CHECK-NEXT:     <   %diffvar = add i32 %var, 1000
21*e0447961SJannik Silvanus
22*e0447961SJannik Silvanusdefine i32 @func() {
23*e0447961SJannik SilvanusENTRY:
24*e0447961SJannik Silvanus  br label %BB0
25*e0447961SJannik Silvanus
26*e0447961SJannik SilvanusBB0:
27*e0447961SJannik Silvanus  ; When diffing this phi node, we need to detect whether
28*e0447961SJannik Silvanus  ; %newvar1 is equivalent, which is not known until BB2 has been processed.
29*e0447961SJannik Silvanus  %var = phi i32 [ 0, %ENTRY ], [ %newvar1, %BB2 ]
30*e0447961SJannik Silvanus  %cnd = icmp eq i32 %var, 0
31*e0447961SJannik Silvanus  br i1 %cnd, label %BB1, label %END
32*e0447961SJannik Silvanus
33*e0447961SJannik SilvanusBB1:
34*e0447961SJannik Silvanus  %diffvar = add i32 %var, 1000
35*e0447961SJannik Silvanus  br label %BB1
36*e0447961SJannik Silvanus
37*e0447961SJannik SilvanusBB2:
38*e0447961SJannik Silvanus  %newvar1 = add i32 %var, 1
39*e0447961SJannik Silvanus  %newvar2 = add i32 %var, 2
40*e0447961SJannik Silvanus  br label %BB0
41*e0447961SJannik Silvanus
42*e0447961SJannik SilvanusEND:
43*e0447961SJannik Silvanus  ; Equivalence of the ret depends on equivalence of %var.
44*e0447961SJannik Silvanus  ; Even if %var differs, we do not report a diff here, because
45*e0447961SJannik Silvanus  ; this is an indirect diff caused by another diff.
46*e0447961SJannik Silvanus  ret i32 %var
47*e0447961SJannik Silvanus}
48