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

36 lines
1.2 KiB
LLVM

; RUN: opt -disable-output -passes='loop-mssa(licm),print<memoryssa>' < %s 2>&1 | FileCheck %s
@v_274 = external dso_local global i64, align 1
@v_295 = external dso_local global i16, align 1
@v_335 = external dso_local global i32, align 1
; CHECK-LABEL: @main(i1 %arg)
; CHECK-NOT: 5 = MemoryPhi(
; CHECK-NOT: 6 = MemoryPhi(
; CHECK: 4 = MemoryPhi(
; CHECK-NOT: 7 = MemoryPhi(
define dso_local void @main(i1 %arg) {
entry:
store i32 undef, ptr @v_335, align 1
br i1 %arg, label %gate, label %exit
nopredentry1: ; No predecessors!
br label %preinfiniteloop
nopredentry2: ; No predecessors!
br label %gate
gate: ; preds = %nopredentry2, %entry
br i1 %arg, label %preinfiniteloop, label %exit
preinfiniteloop: ; preds = %gate, %nopredentry1
br label %infiniteloop
infiniteloop: ; preds = %infiniteloop, %preinfiniteloop
store i16 undef, ptr @v_295, align 1
br label %infiniteloop
exit: ; preds = %gate, %entry
store i64 undef, ptr @v_274, align 1
ret void
}