Lee Wei 1469d82e1c
Remove br i1 undef from some regression tests [NFC] (#115130)
As defined in LangRef, branching on `undef` is undefined behavior.
This PR aims to remove undefined behavior from tests. As UB tests break
Alive2 and may be the root cause of breaking future optimizations.

Here's an Alive2 proof for one of the examples:
https://alive2.llvm.org/ce/z/TncxhP
2024-11-07 08:11:15 +00:00

221 lines
8.3 KiB
LLVM

; RUN: opt < %s -passes='print<scalar-evolution>'
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
%JavaObject = type { ptr, ptr }
define void @JnJVM_antlr_CSharpCodeGenerator_genBitSet__Lantlr_collections_impl_BitSet_2I(ptr, ptr, i32, i1 %arg) {
start:
br i1 %arg, label %"stack overflow", label %"no stack overflow"
"GOTO or IF*2": ; preds = %"true verifyAndComputePtr89", %verifyNullCont84
unreachable
"GOTO or IF*5": ; preds = %"true verifyAndComputePtr127", %"GOTO or IF*6"
unreachable
"GOTO or IF*6": ; preds = %"true verifyAndComputePtr131.GOTO or IF*6_crit_edge", %"true verifyAndComputePtr89"
%indvar = phi i32 [ %indvar.next, %"true verifyAndComputePtr131.GOTO or IF*6_crit_edge" ], [ 0, %"true verifyAndComputePtr89" ] ; <i32> [#uses=2]
%.0.in = add i32 %indvar, 0 ; <i32> [#uses=1]
%.0 = add i32 %.0.in, 1 ; <i32> [#uses=1]
%3 = icmp slt i32 %.0, %4 ; <i1> [#uses=1]
br i1 %3, label %verifyNullCont126, label %"GOTO or IF*5"
end: ; preds = %"no exception block35"
ret void
"stack overflow": ; preds = %start
ret void
"no stack overflow": ; preds = %start
br i1 %arg, label %verifyNullCont, label %"no stack overflow.end_crit_edge"
"no stack overflow.end_crit_edge": ; preds = %"no stack overflow"
ret void
verifyNullCont: ; preds = %"no stack overflow"
br i1 %arg, label %verifyNullCont9, label %verifyNullCont.end_crit_edge
verifyNullCont.end_crit_edge: ; preds = %verifyNullCont
ret void
verifyNullCont9: ; preds = %verifyNullCont
br i1 %arg, label %verifyNullCont12, label %verifyNullCont9.end_crit_edge
verifyNullCont9.end_crit_edge: ; preds = %verifyNullCont9
ret void
verifyNullCont12: ; preds = %verifyNullCont9
br i1 %arg, label %"no exception block13", label %verifyNullCont12.end_crit_edge
verifyNullCont12.end_crit_edge: ; preds = %verifyNullCont12
ret void
"no exception block13": ; preds = %verifyNullCont12
br i1 %arg, label %verifyNullExit14, label %verifyNullCont15
verifyNullExit14: ; preds = %"no exception block13"
ret void
verifyNullCont15: ; preds = %"no exception block13"
br i1 %arg, label %"no exception block16", label %verifyNullCont15.end_crit_edge
verifyNullCont15.end_crit_edge: ; preds = %verifyNullCont15
ret void
"no exception block16": ; preds = %verifyNullCont15
br i1 %arg, label %verifyNullExit17, label %verifyNullCont18
verifyNullExit17: ; preds = %"no exception block16"
ret void
verifyNullCont18: ; preds = %"no exception block16"
br i1 %arg, label %"no exception block19", label %verifyNullCont18.end_crit_edge
verifyNullCont18.end_crit_edge: ; preds = %verifyNullCont18
ret void
"no exception block19": ; preds = %verifyNullCont18
br i1 %arg, label %verifyNullExit20, label %verifyNullCont21
verifyNullExit20: ; preds = %"no exception block19"
ret void
verifyNullCont21: ; preds = %"no exception block19"
br i1 %arg, label %verifyNullCont24, label %verifyNullCont21.end_crit_edge
verifyNullCont21.end_crit_edge: ; preds = %verifyNullCont21
ret void
verifyNullCont24: ; preds = %verifyNullCont21
br i1 %arg, label %verifyNullCont27, label %verifyNullCont24.end_crit_edge
verifyNullCont24.end_crit_edge: ; preds = %verifyNullCont24
ret void
verifyNullCont27: ; preds = %verifyNullCont24
br i1 %arg, label %verifyNullCont32, label %verifyNullCont27.end_crit_edge
verifyNullCont27.end_crit_edge: ; preds = %verifyNullCont27
ret void
verifyNullCont32: ; preds = %verifyNullCont27
br i1 %arg, label %verifyNullExit33, label %verifyNullCont34
verifyNullExit33: ; preds = %verifyNullCont32
ret void
verifyNullCont34: ; preds = %verifyNullCont32
br i1 %arg, label %"no exception block35", label %verifyNullCont34.end_crit_edge
verifyNullCont34.end_crit_edge: ; preds = %verifyNullCont34
ret void
"no exception block35": ; preds = %verifyNullCont34
br i1 %arg, label %end, label %verifyNullCont60
verifyNullCont60: ; preds = %"no exception block35"
br i1 %arg, label %verifyNullCont63, label %verifyNullCont60.end_crit_edge
verifyNullCont60.end_crit_edge: ; preds = %verifyNullCont60
ret void
verifyNullCont63: ; preds = %verifyNullCont60
br i1 %arg, label %"no exception block64", label %verifyNullCont63.end_crit_edge
verifyNullCont63.end_crit_edge: ; preds = %verifyNullCont63
ret void
"no exception block64": ; preds = %verifyNullCont63
br i1 %arg, label %verifyNullExit65, label %verifyNullCont66
verifyNullExit65: ; preds = %"no exception block64"
ret void
verifyNullCont66: ; preds = %"no exception block64"
br i1 %arg, label %"no exception block67", label %verifyNullCont66.end_crit_edge
verifyNullCont66.end_crit_edge: ; preds = %verifyNullCont66
ret void
"no exception block67": ; preds = %verifyNullCont66
br i1 %arg, label %verifyNullExit68, label %verifyNullCont69
verifyNullExit68: ; preds = %"no exception block67"
ret void
verifyNullCont69: ; preds = %"no exception block67"
br i1 %arg, label %"no exception block70", label %verifyNullCont69.end_crit_edge
verifyNullCont69.end_crit_edge: ; preds = %verifyNullCont69
ret void
"no exception block70": ; preds = %verifyNullCont69
br i1 %arg, label %verifyNullExit71, label %verifyNullCont72
verifyNullExit71: ; preds = %"no exception block70"
ret void
verifyNullCont72: ; preds = %"no exception block70"
br i1 %arg, label %verifyNullCont75, label %verifyNullCont72.end_crit_edge
verifyNullCont72.end_crit_edge: ; preds = %verifyNullCont72
ret void
verifyNullCont75: ; preds = %verifyNullCont72
br i1 %arg, label %verifyNullCont78, label %verifyNullCont75.end_crit_edge
verifyNullCont75.end_crit_edge: ; preds = %verifyNullCont75
ret void
verifyNullCont78: ; preds = %verifyNullCont75
br i1 %arg, label %"verifyNullCont78.GOTO or IF*4_crit_edge", label %verifyNullCont78.end_crit_edge
"verifyNullCont78.GOTO or IF*4_crit_edge": ; preds = %verifyNullCont78
br i1 %arg, label %verifyNullExit80, label %verifyNullCont81
verifyNullCont78.end_crit_edge: ; preds = %verifyNullCont78
ret void
verifyNullExit80: ; preds = %"verifyNullCont78.GOTO or IF*4_crit_edge"
ret void
verifyNullCont81: ; preds = %"verifyNullCont78.GOTO or IF*4_crit_edge"
%4 = ptrtoint ptr undef to i32 ; <i32> [#uses=2]
%5 = icmp slt i32 0, %4 ; <i1> [#uses=1]
br i1 %5, label %verifyNullCont84, label %verifyNullCont172
verifyNullCont84: ; preds = %verifyNullCont81
br i1 %arg, label %"GOTO or IF*2", label %verifyNullCont86
verifyNullCont86: ; preds = %verifyNullCont84
br i1 %arg, label %"true verifyAndComputePtr", label %"false verifyAndComputePtr"
"true verifyAndComputePtr": ; preds = %verifyNullCont86
br i1 %arg, label %"true verifyAndComputePtr89", label %"false verifyAndComputePtr90"
"false verifyAndComputePtr": ; preds = %verifyNullCont86
ret void
"true verifyAndComputePtr89": ; preds = %"true verifyAndComputePtr"
br i1 %arg, label %"GOTO or IF*6", label %"GOTO or IF*2"
"false verifyAndComputePtr90": ; preds = %"true verifyAndComputePtr"
ret void
verifyNullCont126: ; preds = %"GOTO or IF*6"
br i1 %arg, label %"true verifyAndComputePtr127", label %"false verifyAndComputePtr128"
"true verifyAndComputePtr127": ; preds = %verifyNullCont126
br i1 %arg, label %"true verifyAndComputePtr131.GOTO or IF*6_crit_edge", label %"GOTO or IF*5"
"false verifyAndComputePtr128": ; preds = %verifyNullCont126
ret void
"true verifyAndComputePtr131.GOTO or IF*6_crit_edge": ; preds = %"true verifyAndComputePtr127"
%indvar.next = add i32 %indvar, 1 ; <i32> [#uses=1]
br label %"GOTO or IF*6"
verifyNullCont172: ; preds = %verifyNullCont81
unreachable
}