llvm-project/llvm/test/CodeGen/X86/code-model-kernel.ll
Roman Lebedev 2461cdb417
[CodeGen][SimplifyCFG] Teach DwarfEHPrepare to preserve DomTree
Once the default for SimplifyCFG flips, we can no longer pass nullptr
instead of DomTree to SimplifyCFG, so we need to propagate it here.

We don't strictly need to actually preserve DomTree in DwarfEHPrepare,
but we might as well do it, since it's trivial.
2021-01-02 01:01:19 +03:00

80 lines
2.5 KiB
LLVM

; RUN: llc -mtriple=x86_64-pc-linux-gnu -code-model=kernel -simplifycfg-require-and-preserve-domtree=1 %s -o - | FileCheck %s
; CHECK-LABEL: main
; CHECK: .cfi_startproc
; CHECK: .cfi_personality 0, __gxx_personality_v0
; CHECK: .cfi_lsda 0, [[EXCEPTION_LABEL:.L[^ ]*]]
; CHECK: [[EXCEPTION_LABEL]]:
; CHECK: .byte 0 # @TType Encoding = absptr
; CHECK: .quad _ZTIi
@_ZTIi = external constant i8*
; Function Attrs: noinline norecurse optnone uwtable
define i32 @main() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
%1 = alloca i32, align 4
%2 = alloca i8*
%3 = alloca i32
%4 = alloca i32, align 4
store i32 0, i32* %1, align 4
%5 = call i8* @__cxa_allocate_exception(i64 4) #2
%6 = bitcast i8* %5 to i32*
store i32 20, i32* %6, align 16
invoke void @__cxa_throw(i8* %5, i8* bitcast (i8** @_ZTIi to i8*), i8* null) #3
to label %26 unwind label %7
; <label>:7: ; preds = %0
%8 = landingpad { i8*, i32 }
catch i8* bitcast (i8** @_ZTIi to i8*)
%9 = extractvalue { i8*, i32 } %8, 0
store i8* %9, i8** %2, align 8
%10 = extractvalue { i8*, i32 } %8, 1
store i32 %10, i32* %3, align 4
br label %11
; <label>:11: ; preds = %7
%12 = load i32, i32* %3, align 4
%13 = call i32 @llvm.eh.typeid.for(i8* bitcast (i8** @_ZTIi to i8*)) #2
%14 = icmp eq i32 %12, %13
br i1 %14, label %15, label %21
; <label>:15: ; preds = %11
%16 = load i8*, i8** %2, align 8
%17 = call i8* @__cxa_begin_catch(i8* %16) #2
%18 = bitcast i8* %17 to i32*
%19 = load i32, i32* %18, align 4
store i32 %19, i32* %4, align 4
call void @__cxa_end_catch() #2
br label %20
; <label>:20: ; preds = %15
ret i32 0
; <label>:21: ; preds = %11
%22 = load i8*, i8** %2, align 8
%23 = load i32, i32* %3, align 4
%24 = insertvalue { i8*, i32 } undef, i8* %22, 0
%25 = insertvalue { i8*, i32 } %24, i32 %23, 1
resume { i8*, i32 } %25
; <label>:26: ; preds = %0
unreachable
}
declare i8* @__cxa_allocate_exception(i64)
declare void @__cxa_throw(i8*, i8*, i8*)
declare i32 @__gxx_personality_v0(...)
; Function Attrs: nounwind readnone
declare i32 @llvm.eh.typeid.for(i8*) #1
declare i8* @__cxa_begin_catch(i8*)
declare void @__cxa_end_catch()
attributes #0 = { noinline norecurse optnone uwtable }
attributes #1 = { nounwind readnone }
attributes #2 = { nounwind }
attributes #3 = { noreturn }