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