blob: 6896b08cbbaf0d7eaaae1eacfd651af5108ab370 [file] [log] [blame]
; Check if landing pads are kept in a separate eh section
; RUN: llc -simplifycfg-require-and-preserve-domtree=1 < %s -mtriple=i386-unknown-linux-gnu -function-sections -basic-block-sections=all -unique-basic-block-section-names | FileCheck %s -check-prefix=LINUX-SECTIONS
@_ZTIb = external dso_local constant ptr
define i32 @_Z3foob(i1 zeroext %0) #0 personality ptr @__gxx_personality_v0 {
%2 = alloca i32, align 4
%3 = alloca i8, align 1
%4 = alloca ptr
%5 = alloca i32
%6 = alloca i8, align 1
%7 = zext i1 %0 to i8
store i8 %7, ptr %3, align 1
%8 = load i8, ptr %3, align 1
%9 = trunc i8 %8 to i1
br i1 %9, label %10, label %11
10: ; preds = %1
store i32 1, ptr %2, align 4
br label %31
11: ; preds = %1
%12 = call ptr @__cxa_allocate_exception(i64 1) #2
%13 = load i8, ptr %3, align 1
%14 = trunc i8 %13 to i1
%15 = zext i1 %14 to i8
store i8 %15, ptr %12, align 16
invoke void @__cxa_throw(ptr %12, ptr @_ZTIb, ptr null) #3
to label %38 unwind label %16
16: ; preds = %11
%17 = landingpad { ptr, i32 }
catch ptr @_ZTIb
%18 = extractvalue { ptr, i32 } %17, 0
store ptr %18, ptr %4, align 8
%19 = extractvalue { ptr, i32 } %17, 1
store i32 %19, ptr %5, align 4
br label %20
20: ; preds = %16
%21 = load i32, ptr %5, align 4
%22 = call i32 @llvm.eh.typeid.for(ptr @_ZTIb) #2
%23 = icmp eq i32 %21, %22
br i1 %23, label %24, label %33
24: ; preds = %20
%25 = load ptr, ptr %4, align 8
%26 = call ptr @__cxa_begin_catch(ptr %25) #2
%27 = load i8, ptr %26, align 1
%28 = trunc i8 %27 to i1
%29 = zext i1 %28 to i8
store i8 %29, ptr %6, align 1
call void @__cxa_end_catch() #2
br label %30
30: ; preds = %24
store i32 0, ptr %2, align 4
br label %31
31: ; preds = %30, %10
%32 = load i32, ptr %2, align 4
ret i32 %32
33: ; preds = %20
%34 = load ptr, ptr %4, align 8
%35 = load i32, ptr %5, align 4
%36 = insertvalue { ptr, i32 } undef, ptr %34, 0
%37 = insertvalue { ptr, i32 } %36, i32 %35, 1
resume { ptr, i32 } %37
38: ; preds = %11
unreachable
}
declare ptr @__cxa_allocate_exception(i64)
declare void @__cxa_throw(ptr, ptr, ptr)
declare i32 @__gxx_personality_v0(...)
; Function Attrs: nounwind readnone
declare i32 @llvm.eh.typeid.for(ptr) #1
declare ptr @__cxa_begin_catch(ptr)
declare void @__cxa_end_catch()
;LINUX-SECTIONS: .section .text._Z3foob,"ax",@progbits
;LINUX-SECTIONS: _Z3foob:
;LINUX-SECTIONS: .section .text._Z3foob._Z3foob.__part.{{[0-9]+}},"ax",@progbits
;LINUX-SECTIONS-LABEL: _Z3foob.__part.{{[0-9]+}}:
;LINUX-SECTIONS: calll __cxa_begin_catch