Files
clang-p2996/llvm/test/Transforms/SROA/phi-catchswitch.ll
Nikita Popov 74e652786b [SROA] Migrate tests to opaque pointers (NFC)
Tests were updated with this script:
https://gist.github.com/nikic/98357b71fd67756b0f064c9517b62a34

However, in this case a lot of fixup was required, due to many
minor, but ultimately immaterial differences in results. In
particular, the GEP representation changes slightly in many cases,
either because we now use an i8 GEP, or because we now leave a
GEP alone, using it's original index types and (lack of) inbounds.

basictest-opaque-ptrs.ll has been dropped, because it was an
opaque pointers duplicate of basictest.ll.
2022-06-21 12:54:52 +02:00

45 lines
1.6 KiB
LLVM

; RUN: opt < %s -passes=sroa -S | FileCheck %s
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"
%struct.foo = type { i32 }
declare i32 @__gxx_wasm_personality_v0(...)
declare void @foo()
; Tests if the SROA pass correctly bails out on rewriting PHIs in a catchswitch
; BB.
; CHECK-LABEL: @test_phi_catchswitch
define void @test_phi_catchswitch() personality ptr @__gxx_wasm_personality_v0 {
entry:
; CHECK: alloca
%tmp = alloca %struct.foo, align 4
invoke void @foo()
to label %bb3 unwind label %bb10
bb3: ; preds = %entry
invoke void @foo()
to label %bb9 unwind label %catch.dispatch
catch.dispatch: ; preds = %bb3
; While rewriting the alloca in the entry BB, the SROA pass tries to insert a
; non-PHI instruction in this BB by calling getFirstInsertionPt(), which is
; not possible in a catchswitch BB. This test checks if we correctly bail out
; on these cases.
%tmp5 = phi ptr [ %tmp, %bb3 ]
%tmp6 = catchswitch within none [label %catch.start] unwind label %bb10
catch.start: ; preds = %catch.dispatch
%tmp8 = catchpad within %tmp6 [ptr null]
unreachable
bb9: ; preds = %bb3
unreachable
bb10: ; preds = %catch.dispatch, %entry
%tmp11 = phi ptr [ %tmp, %entry ], [ %tmp5, %catch.dispatch ]
%tmp12 = cleanuppad within none []
store i32 0, ptr %tmp11, align 4
unreachable
}