xref: /llvm-project/llvm/test/tools/llvm-diff/loop.ll (revision e044796132abd9e10e21093822dc234003628fbd)
1*e0447961SJannik Silvanus; Diff file with itself, assert no difference by return code
2*e0447961SJannik Silvanus; RUN: llvm-diff %s %s
391351377SJannik Silvanus
491351377SJannik Silvanus; Replace %newvar1 with %newvar2 in the phi node. This can only
591351377SJannik Silvanus; be detected to be different once BB1 has been processed.
691351377SJannik Silvanus; RUN: rm -f %t.ll
791351377SJannik Silvanus; RUN: cat %s | sed -e 's/ %newvar1, %BB1 / %newvar2, %BB1 /' > %t.ll
891351377SJannik Silvanus; RUN: not llvm-diff %s %t.ll 2>&1 | FileCheck --check-prefix DIFFERENT-VAR %s
991351377SJannik Silvanus
1091351377SJannik Silvanus; DIFFERENT-VAR:      in function func:
1191351377SJannik Silvanus; DIFFERENT-VAR-NEXT:   in block %BB0:
1291351377SJannik Silvanus; DIFFERENT-VAR-NEXT:     >   %var = phi i32 [ 0, %ENTRY ], [ %newvar2, %BB1 ]
1391351377SJannik Silvanus; DIFFERENT-VAR-NEXT:     <   %var = phi i32 [ 0, %ENTRY ], [ %newvar1, %BB1 ]
1491351377SJannik Silvanusdefine i32 @func() {
1591351377SJannik SilvanusENTRY:
1691351377SJannik Silvanus  br label %BB0
1791351377SJannik Silvanus
1891351377SJannik SilvanusBB0:
1991351377SJannik Silvanus  ; When diffing this phi node, we need to detect whether
2091351377SJannik Silvanus  ; %newvar1 is equivalent, which is not known until BB1 has been processed.
2191351377SJannik Silvanus  %var = phi i32 [ 0, %ENTRY ], [ %newvar1, %BB1 ]
2291351377SJannik Silvanus  %cnd = icmp eq i32 %var, 0
2391351377SJannik Silvanus  br i1 %cnd, label %BB1, label %END
2491351377SJannik Silvanus
2591351377SJannik SilvanusBB1:
2691351377SJannik Silvanus  %newvar1 = add i32 %var, 1
2791351377SJannik Silvanus  %newvar2 = add i32 %var, 2
2891351377SJannik Silvanus  br label %BB0
2991351377SJannik Silvanus
3091351377SJannik SilvanusEND:
3191351377SJannik Silvanus  ; Equivalence of the ret depends on equivalence of %var.
3291351377SJannik Silvanus  ; Even if %var differs, we do not report a diff here, because
3391351377SJannik Silvanus  ; this is an indirect diff caused by another diff.
3491351377SJannik Silvanus  ret i32 %var
3591351377SJannik Silvanus}
36