Nuno Lopes 952e069393 [NFC] remove 'br undef' from InstCombine test cases
This is UB and allows the compiler to give any result, so these tests weren't meaningful
InstCombine tests are now clean of 'br undef'
2022-06-10 15:28:57 +01:00

54 lines
1.9 KiB
LLVM

; RUN: opt < %s -passes=instcombine -S | FileCheck %s
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128-ni:1"
target triple = "wasm32-unknown-unknown"
%struct.quux = type { i32 }
%struct.blam = type <{ %struct.quux }>
declare void @foo()
declare void @bar(%struct.quux*)
declare i32 @__gxx_wasm_personality_v0(...)
define void @test(i1 %c1) personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
bb:
%tmp0 = alloca %struct.blam, align 4
br i1 %c1, label %bb1, label %bb2
bb1: ; preds = %bb
%tmp1 = getelementptr inbounds %struct.blam, %struct.blam* %tmp0, i32 0, i32 0
invoke void @foo()
to label %bb3 unwind label %bb4
bb2: ; preds = %bb
%tmp2 = getelementptr inbounds %struct.blam, %struct.blam* %tmp0, i32 0, i32 0
invoke void @foo()
to label %bb3 unwind label %bb4
bb3: ; preds = %bb2, %bb1
unreachable
bb4: ; preds = %bb2, %bb1
; This PHI should not be combined into a non-PHI instruction, because
; catchswitch BB cannot have any non-PHI instruction other than catchswitch
; itself.
; CHECK: bb4:
; CHECK-NEXT: phi
; CHECK-NEXT: catchswitch
%tmp3 = phi %struct.quux* [ %tmp1, %bb1 ], [ %tmp2, %bb2 ]
%tmp4 = catchswitch within none [label %bb5] unwind label %bb7
bb5: ; preds = %bb4
%tmp5 = catchpad within %tmp4 [i8* null]
invoke void @foo() [ "funclet"(token %tmp5) ]
to label %bb6 unwind label %bb7
bb6: ; preds = %bb5
unreachable
bb7: ; preds = %bb5, %bb4
%tmp6 = cleanuppad within none []
call void @bar(%struct.quux* %tmp3) [ "funclet"(token %tmp6) ]
unreachable
}