474 lines · plain
1; RUN: llc -mtriple arm64e-apple-darwin -o - %s \2; RUN: | FileCheck %s --check-prefixes=CHECK,DARWIN,DARWIN-SDAG3 4; RUN: llc -mtriple aarch64 -mattr=+pauth -o - %s \5; RUN: | FileCheck %s --check-prefixes=CHECK,ELF,ELF-SDAG6 7; RUN: llc -mtriple arm64e-apple-darwin -o - %s \8; RUN: -global-isel -global-isel-abort=1 -verify-machineinstrs \9; RUN: | FileCheck %s --check-prefixes=CHECK,DARWIN,DARWIN-GISEL10 11; RUN: llc -mtriple aarch64 -mattr=+pauth -o - %s \12; RUN: -global-isel -global-isel-abort=1 -verify-machineinstrs \13; RUN: | FileCheck %s --check-prefixes=CHECK,ELF,ELF-GISEL14 15; DARWIN-LABEL: _test_invoke_ia_0:16; DARWIN-NEXT: [[FNBEGIN:L.*]]:17; DARWIN-NEXT: .cfi_startproc18; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v019; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]20; DARWIN-NEXT: ; %bb.0:21; DARWIN-NEXT: stp x20, x19, [sp, #-32]!22; DARWIN-NEXT: stp x29, x30, [sp, #16]23; DARWIN-NEXT: .cfi_def_cfa_offset 3224; DARWIN-NEXT: .cfi_offset w30, -825; DARWIN-NEXT: .cfi_offset w29, -1626; DARWIN-NEXT: .cfi_offset w19, -2427; DARWIN-NEXT: .cfi_offset w20, -3228; DARWIN-NEXT: [[PRECALL:L.*]]:29; DARWIN-NEXT: blraaz x030 31; DARWIN-SDAG-NEXT: [[POSTCALL:L.*]]:32; DARWIN-SDAG-NEXT: ; %bb.1:33; DARWIN-SDAG-NEXT: mov x19, x034 35; DARWIN-GISEL-NEXT: mov x19, x036; DARWIN-GISEL-NEXT: [[POSTCALL:L.*]]:37 38; DARWIN-NEXT: [[CALLBB:L.*]]:39; DARWIN-NEXT: bl _foo40; DARWIN-NEXT: mov x0, x1941; DARWIN-NEXT: ldp x29, x30, [sp, #16]42; DARWIN-NEXT: ldp x20, x19, [sp], #3243; DARWIN-NEXT: ret44; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:45; DARWIN-NEXT: [[LPAD:L.*]]:46; DARWIN-NEXT: mov w19, #-147; DARWIN-NEXT: b [[CALLBB]]48 49; ELF-LABEL: test_invoke_ia_0:50; ELF-NEXT: [[FNBEGIN:.L.*]]:51; ELF-NEXT: .cfi_startproc52; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v053; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]54; ELF-NEXT: // %bb.0:55; ELF-NEXT: stp x30, x19, [sp, #-16]!56; ELF-NEXT: .cfi_def_cfa_offset 1657; ELF-NEXT: .cfi_offset w19, -858; ELF-NEXT: .cfi_offset w30, -1659; ELF-NEXT: [[PRECALL:.L.*]]:60; ELF-NEXT: blraaz x061 62; ELF-SDAG-NEXT: [[POSTCALL:.L.*]]:63; ELF-SDAG-NEXT: // %bb.1:64; ELF-SDAG-NEXT: mov w19, w065 66; ELF-GISEL-NEXT: mov w19, w067; ELF-GISEL-NEXT: [[POSTCALL:.L.*]]:68 69; ELF-NEXT: [[CALLBB:.L.*]]:70; ELF-NEXT: bl foo71; ELF-NEXT: mov w0, w1972; ELF-NEXT: ldp x30, x19, [sp], #1673; ELF-NEXT: ret74; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:75; ELF-NEXT: [[LPAD:.L.*]]:76; ELF-NEXT: mov w19, #-177; ELF-NEXT: b [[CALLBB]]78 79; CHECK-LABEL: GCC_except_table{{.*}}:80; CHECK-NEXT: [[EXCEPT]]:81; CHECK: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]82; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]83; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup84 85define i32 @test_invoke_ia_0(ptr %arg0) #0 personality ptr @__gxx_personality_v0 {86 %tmp0 = invoke i32 %arg0() [ "ptrauth"(i32 0, i64 0) ] to label %continuebb87 unwind label %unwindbb88 89unwindbb:90 %tmp1 = landingpad { ptr, i32 } cleanup91 call void @foo()92 ret i32 -193 94continuebb:95 call void @foo()96 ret i32 %tmp097}98 99@_ZTIPKc = external constant ptr100@hello_str = private unnamed_addr constant [6 x i8] c"hello\00", align 1101 102; DARWIN-LABEL: _test_invoke_ib_42_catch:103; DARWIN-NEXT: [[FNBEGIN:L.*]]:104; DARWIN-NEXT: .cfi_startproc105; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v0106; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]107; DARWIN-NEXT: ; %bb.0:108; DARWIN-NEXT: stp x20, x19, [sp, #-32]!109; DARWIN-NEXT: stp x29, x30, [sp, #16]110; DARWIN-NEXT: .cfi_def_cfa_offset 32111; DARWIN-NEXT: .cfi_offset w30, -8112; DARWIN-NEXT: .cfi_offset w29, -16113; DARWIN-NEXT: .cfi_offset w19, -24114; DARWIN-NEXT: .cfi_offset w20, -32115; DARWIN-NEXT: mov x19, x0116; DARWIN-NEXT: mov w0, #8117; DARWIN-NEXT: bl ___cxa_allocate_exception118; DARWIN-NEXT: Lloh{{.*}}:119; DARWIN-NEXT: adrp x8, l_hello_str@PAGE120; DARWIN-NEXT: Lloh{{.*}}:121; DARWIN-NEXT: add x8, x8, l_hello_str@PAGEOFF122; DARWIN-NEXT: str x8, [x0]123; DARWIN-NEXT: [[PRECALL:L.*]]:124; DARWIN-NEXT: Lloh{{.*}}:125; DARWIN-NEXT: adrp x1, __ZTIPKc@GOTPAGE126; DARWIN-NEXT: Lloh{{.*}}:127; DARWIN-NEXT: ldr x1, [x1, __ZTIPKc@GOTPAGEOFF]128; DARWIN-NEXT: mov x2, #0129; DARWIN-NEXT: mov x17, #42130; DARWIN-NEXT: blrab x19, x17131; DARWIN-NEXT: [[POSTCALL:L.*]]:132; DARWIN-NEXT: ; %bb.1:133; DARWIN-NEXT: brk #0x1134; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:135; DARWIN-NEXT: [[LPAD:L.*]]:136; DARWIN-NEXT: mov x19, x1137; DARWIN-NEXT: bl ___cxa_begin_catch138; DARWIN-NEXT: cmp w19, #2139; DARWIN-NEXT: b.ne [[EXITBB:LBB[0-9_]+]]140; DARWIN-NEXT: ; %bb.3:141; DARWIN-NEXT: bl _bar142; DARWIN-NEXT: [[EXITBB]]:143; DARWIN-NEXT: bl _foo144; DARWIN-NEXT: bl ___cxa_end_catch145; DARWIN-NEXT: ldp x29, x30, [sp, #16]146; DARWIN-NEXT: ldp x20, x19, [sp], #32147; DARWIN-NEXT: ret148; DARWIN-NEXT: .loh {{.*}}149; DARWIN-NEXT: .loh {{.*}}150; DARWIN-NEXT: [[FNEND:L.*]]:151 152; ELF-LABEL: test_invoke_ib_42_catch:153; ELF-NEXT: [[FNBEGIN:.L.*]]:154; ELF-NEXT: .cfi_startproc155; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v0156; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]157; ELF-NEXT: // %bb.0:158; ELF-NEXT: stp x30, x19, [sp, #-16]!159; ELF-NEXT: .cfi_def_cfa_offset 16160; ELF-NEXT: .cfi_offset w19, -8161; ELF-NEXT: .cfi_offset w30, -16162; ELF-NEXT: mov x19, x0163; ELF-NEXT: mov w0, #8164; ELF-NEXT: bl __cxa_allocate_exception165; ELF-NEXT: adrp x8, .Lhello_str166; ELF-NEXT: add x8, x8, :lo12:.Lhello_str167; ELF-NEXT: str x8, [x0]168; ELF-NEXT: [[PRECALL:.L.*]]:169; ELF-NEXT: adrp x1, :got:_ZTIPKc170; ELF-NEXT: mov x2, xzr171; ELF-NEXT: ldr x1, [x1, :got_lo12:_ZTIPKc]172; ELF-NEXT: mov x17, #42173; ELF-NEXT: blrab x19, x17174; ELF-NEXT: [[POSTCALL:.L.*]]:175; ELF-NEXT: // %bb.1:176; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:177; ELF-NEXT: [[LPAD:.L.*]]:178; ELF-NEXT: mov x19, x1179; ELF-NEXT: bl __cxa_begin_catch180; ELF-NEXT: cmp w19, #2181; ELF-NEXT: b.ne [[EXITBB:.LBB[0-9_]+]]182; ELF-NEXT: // %bb.3:183; ELF-NEXT: bl bar184; ELF-NEXT: [[EXITBB]]:185; ELF-NEXT: bl foo186; ELF-NEXT: bl __cxa_end_catch187; ELF-NEXT: ldp x30, x19, [sp], #16188; ELF-NEXT: ret189; ELF-NEXT: [[FNEND:.L.*]]:190 191; CHECK-LABEL: GCC_except_table{{.*}}:192; CHECK-NEXT: [[EXCEPT]]:193; CHECK-NEXT: .byte 255 {{.*}} @LPStart Encoding = omit194; DARWIN-NEXT: .byte 155 {{.*}} @TType Encoding = indirect pcrel sdata4195; ELF-NEXT: .byte 156 {{.*}} @TType Encoding = indirect pcrel sdata8196; CHECK-NEXT: .uleb128 [[TT:.?L.*]]-[[TTREF:.?L.*]]197; CHECK-NEXT: [[TTREF]]:198; CHECK-NEXT: .byte 1 {{.*}} Call site Encoding = uleb128199; CHECK-NEXT: .uleb128 [[CSEND:.?L.*]]-[[CSBEGIN:.?L.*]]200; CHECK-NEXT: [[CSBEGIN]]:201; CHECK-NEXT: .uleb128 [[FNBEGIN]]-[[FNBEGIN]] {{.*}} >> Call Site 1 <<202; CHECK-NEXT: .uleb128 [[PRECALL]]-[[FNBEGIN]] {{.*}} Call between [[FNBEGIN]] and [[PRECALL]]203; CHECK-NEXT: .byte 0 {{.*}} has no landing pad204; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup205; CHECK-NEXT: .uleb128 [[PRECALL]]-[[FNBEGIN]] {{.*}} >> Call Site 2 <<206; CHECK-NEXT: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]207; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]208; CHECK-NEXT: .byte 3 {{.*}} On action: 2209; CHECK-NEXT: .uleb128 [[POSTCALL]]-[[FNBEGIN]] {{.*}} >> Call Site 3 <<210; CHECK-NEXT: .uleb128 [[FNEND]]-[[POSTCALL]] {{.*}} Call between [[POSTCALL]] and [[FNEND]]211; CHECK-NEXT: .byte 0 {{.*}} has no landing pad212; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup213; CHECK-NEXT: [[CSEND]]:214 215; CHECK-NEXT: .byte 1 {{.*}} >> Action Record 1 <<216; CHECK-NEXT: {{.*}} Catch TypeInfo 1217; CHECK-NEXT: .byte 0 {{.*}} No further actions218; CHECK-NEXT: .byte 2 {{.*}} >> Action Record 2 <<219; CHECK-NEXT: {{.*}} Catch TypeInfo 2220; CHECK-NEXT: .byte 125 {{.*}} Continue to action 1221; CHECK-NEXT: .p2align 2222; CHECK-NEXT: {{.*}} >> Catch TypeInfos <<223 224; DARWIN-NEXT: [[TI:L.*]]: {{.*}} TypeInfo 2225; DARWIN-NEXT: .long __ZTIPKc@GOT-[[TI]]226; DARWIN-NEXT: .long 0 {{.*}} TypeInfo 1227; ELF-NEXT: [[TI:.?L.*]]: {{.*}} TypeInfo 2228; ELF-NEXT: .xword .L_ZTIPKc.DW.stub-[[TI]]229; ELF-NEXT: .xword 0 {{.*}} TypeInfo 1230 231; CHECK-NEXT: [[TT]]:232 233define void @test_invoke_ib_42_catch(ptr %fptr) #0 personality ptr @__gxx_personality_v0 {234 %tmp0 = call ptr @__cxa_allocate_exception(i64 8)235 store ptr getelementptr inbounds ([6 x i8], ptr @hello_str, i64 0, i64 0), ptr %tmp0, align 8236 invoke void %fptr(ptr %tmp0, ptr @_ZTIPKc, ptr null) [ "ptrauth"(i32 1, i64 42) ]237 to label %continuebb unwind label %catchbb238 239catchbb:240 %tmp2 = landingpad { ptr, i32 }241 catch ptr @_ZTIPKc242 catch ptr null243 %tmp3 = extractvalue { ptr, i32 } %tmp2, 0244 %tmp4 = extractvalue { ptr, i32 } %tmp2, 1245 %tmp5 = call i32 @llvm.eh.typeid.for(ptr @_ZTIPKc)246 %tmp6 = icmp eq i32 %tmp4, %tmp5247 %tmp7 = call ptr @__cxa_begin_catch(ptr %tmp3)248 br i1 %tmp6, label %PKc_catchbb, label %any_catchbb249 250PKc_catchbb:251 call void @bar(ptr %tmp7)252 br label %any_catchbb253 254any_catchbb:255 call void @foo()256 call void @__cxa_end_catch()257 ret void258 259continuebb:260 unreachable261}262 263; DARWIN-LABEL: _test_invoke_ia_0_direct:264; DARWIN-NEXT: [[FNBEGIN:L.*]]:265; DARWIN-NEXT: .cfi_startproc266; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v0267; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]268; DARWIN-NEXT: ; %bb.0:269; DARWIN-NEXT: stp x20, x19, [sp, #-32]!270; DARWIN-NEXT: stp x29, x30, [sp, #16]271; DARWIN-NEXT: .cfi_def_cfa_offset 32272; DARWIN-NEXT: .cfi_offset w30, -8273; DARWIN-NEXT: .cfi_offset w29, -16274; DARWIN-NEXT: .cfi_offset w19, -24275; DARWIN-NEXT: .cfi_offset w20, -32276; DARWIN-NEXT: [[PRECALL:L.*]]:277; DARWIN-NEXT: bl _baz278 279; DARWIN-SDAG-NEXT: [[POSTCALL:L.*]]:280; DARWIN-SDAG-NEXT: ; %bb.1:281; DARWIN-SDAG-NEXT: mov x19, x0282 283; DARWIN-GISEL-NEXT: mov x19, x0284; DARWIN-GISEL-NEXT: [[POSTCALL:L.*]]:285 286; DARWIN-NEXT: [[CALLBB:L.*]]:287; DARWIN-NEXT: bl _foo288; DARWIN-NEXT: mov x0, x19289; DARWIN-NEXT: ldp x29, x30, [sp, #16]290; DARWIN-NEXT: ldp x20, x19, [sp], #32291; DARWIN-NEXT: ret292; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:293; DARWIN-NEXT: [[LPAD:L.*]]:294; DARWIN-NEXT: mov w19, #-1295; DARWIN-NEXT: b [[CALLBB]]296 297; ELF-LABEL: test_invoke_ia_0_direct:298; ELF-NEXT: [[FNBEGIN:.L.*]]:299; ELF-NEXT: .cfi_startproc300; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v0301; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]302; ELF-NEXT: // %bb.0:303; ELF-NEXT: stp x30, x19, [sp, #-16]!304; ELF-NEXT: .cfi_def_cfa_offset 16305; ELF-NEXT: .cfi_offset w19, -8306; ELF-NEXT: .cfi_offset w30, -16307; ELF-NEXT: [[PRECALL:.L.*]]:308; ELF-NEXT: bl baz309 310; ELF-SDAG-NEXT: [[POSTCALL:.L.*]]:311; ELF-SDAG-NEXT: // %bb.1:312; ELF-SDAG-NEXT: mov w19, w0313 314; ELF-GISEL-NEXT: mov w19, w0315; ELF-GISEL-NEXT: [[POSTCALL:.L.*]]:316 317; ELF-NEXT: [[CALLBB:.L.*]]:318; ELF-NEXT: bl foo319; ELF-NEXT: mov w0, w19320; ELF-NEXT: ldp x30, x19, [sp], #16321; ELF-NEXT: ret322; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:323; ELF-NEXT: [[LPAD:.L.*]]:324; ELF-NEXT: mov w19, #-1325; ELF-NEXT: b [[CALLBB]]326 327; CHECK-LABEL: GCC_except_table{{.*}}:328; CHECK-NEXT: [[EXCEPT]]:329; CHECK: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]330; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]331; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup332 333define i32 @test_invoke_ia_0_direct() #0 personality ptr @__gxx_personality_v0 {334 %tmp0 = invoke i32 ptrauth (ptr @baz, i32 0)() [ "ptrauth"(i32 0, i64 0) ] to label %continuebb335 unwind label %unwindbb336 337unwindbb:338 %tmp1 = landingpad { ptr, i32 } cleanup339 call void @foo()340 ret i32 -1341 342continuebb:343 call void @foo()344 ret i32 %tmp0345}346 347; DARWIN-LABEL: _test_invoke_ib_2_direct_mismatch:348; DARWIN-NEXT: [[FNBEGIN:L.*]]:349; DARWIN-NEXT: .cfi_startproc350; DARWIN-NEXT: .cfi_personality 155, ___gxx_personality_v0351; DARWIN-NEXT: .cfi_lsda 16, [[EXCEPT:Lexception[0-9]+]]352; DARWIN-NEXT: ; %bb.0:353; DARWIN-NEXT: stp x20, x19, [sp, #-32]!354; DARWIN-NEXT: stp x29, x30, [sp, #16]355; DARWIN-NEXT: .cfi_def_cfa_offset 32356; DARWIN-NEXT: .cfi_offset w30, -8357; DARWIN-NEXT: .cfi_offset w29, -16358; DARWIN-NEXT: .cfi_offset w19, -24359; DARWIN-NEXT: .cfi_offset w20, -32360 361; DARWIN-SDAG-NEXT: [[PRECALL:L.*]]:362; DARWIN-SDAG-NEXT: adrp x16, _baz@GOTPAGE363; DARWIN-SDAG-NEXT: ldr x16, [x16, _baz@GOTPAGEOFF]364; DARWIN-SDAG-NEXT: mov x17, #1234365; DARWIN-SDAG-NEXT: pacia x16, x17366; DARWIN-SDAG-NEXT: mov x8, x16367; DARWIN-SDAG-NEXT: mov x17, #2368; DARWIN-SDAG-NEXT: blrab x8, x17369; DARWIN-SDAG-NEXT: [[POSTCALL:L.*]]:370; DARWIN-SDAG-NEXT: ; %bb.1:371; DARWIN-SDAG-NEXT: mov x19, x0372 373; DARWIN-GISEL-NEXT: adrp x16, _baz@GOTPAGE374; DARWIN-GISEL-NEXT: ldr x16, [x16, _baz@GOTPAGEOFF]375; DARWIN-GISEL-NEXT: mov x17, #1234376; DARWIN-GISEL-NEXT: pacia x16, x17377; DARWIN-GISEL-NEXT: mov x8, x16378; DARWIN-GISEL-NEXT: [[PRECALL:L.*]]:379; DARWIN-GISEL-NEXT: mov x17, #2380; DARWIN-GISEL-NEXT: blrab x8, x17381; DARWIN-GISEL-NEXT: mov x19, x0382; DARWIN-GISEL-NEXT: [[POSTCALL:L.*]]:383 384; DARWIN-NEXT: [[CALLBB:L.*]]:385; DARWIN-NEXT: bl _foo386; DARWIN-NEXT: mov x0, x19387; DARWIN-NEXT: ldp x29, x30, [sp, #16]388; DARWIN-NEXT: ldp x20, x19, [sp], #32389; DARWIN-NEXT: ret390; DARWIN-NEXT: [[LPADBB:LBB[0-9_]+]]:391; DARWIN-NEXT: [[LPAD:L.*]]:392; DARWIN-NEXT: mov w19, #-1393; DARWIN-NEXT: b [[CALLBB]]394 395; ELF-LABEL: test_invoke_ib_2_direct_mismatch:396; ELF-NEXT: [[FNBEGIN:.L.*]]:397; ELF-NEXT: .cfi_startproc398; ELF-NEXT: .cfi_personality 156, DW.ref.__gxx_personality_v0399; ELF-NEXT: .cfi_lsda 28, [[EXCEPT:.Lexception[0-9]+]]400; ELF-NEXT: // %bb.0:401; ELF-NEXT: stp x30, x19, [sp, #-16]!402; ELF-NEXT: .cfi_def_cfa_offset 16403; ELF-NEXT: .cfi_offset w19, -8404; ELF-NEXT: .cfi_offset w30, -16405 406; ELF-SDAG-NEXT: [[PRECALL:.L.*]]:407; ELF-SDAG-NEXT: adrp x16, :got:baz408; ELF-SDAG-NEXT: ldr x16, [x16, :got_lo12:baz]409; ELF-SDAG-NEXT: mov x17, #1234410; ELF-SDAG-NEXT: pacia x16, x17411; ELF-SDAG-NEXT: mov x8, x16412; ELF-SDAG-NEXT: mov x17, #2413; ELF-SDAG-NEXT: blrab x8, x17414; ELF-SDAG-NEXT: [[POSTCALL:.L.*]]:415; ELF-SDAG-NEXT: // %bb.1:416; ELF-SDAG-NEXT: mov w19, w0417 418; ELF-GISEL-NEXT: adrp x16, :got:baz419; ELF-GISEL-NEXT: ldr x16, [x16, :got_lo12:baz]420; ELF-GISEL-NEXT: mov x17, #1234421; ELF-GISEL-NEXT: pacia x16, x17422; ELF-GISEL-NEXT: mov x8, x16423; ELF-GISEL-NEXT: [[PRECALL:.L.*]]:424; ELF-GISEL-NEXT: mov x17, #2425; ELF-GISEL-NEXT: blrab x8, x17426; ELF-GISEL-NEXT: mov w19, w0427; ELF-GISEL-NEXT: [[POSTCALL:.L.*]]:428 429; ELF-NEXT: [[CALLBB:.L.*]]:430; ELF-NEXT: bl foo431; ELF-NEXT: mov w0, w19432; ELF-NEXT: ldp x30, x19, [sp], #16433; ELF-NEXT: ret434; ELF-NEXT: [[LPADBB:.LBB[0-9_]+]]:435; ELF-NEXT: [[LPAD:.L.*]]:436; ELF-NEXT: mov w19, #-1437; ELF-NEXT: b [[CALLBB]]438 439; CHECK-LABEL: GCC_except_table{{.*}}:440; CHECK-NEXT: [[EXCEPT]]:441; CHECK: .uleb128 [[POSTCALL]]-[[PRECALL]] {{.*}} Call between [[PRECALL]] and [[POSTCALL]]442; CHECK-NEXT: .uleb128 [[LPAD]]-[[FNBEGIN]] {{.*}} jumps to [[LPAD]]443; CHECK-NEXT: .byte 0 {{.*}} On action: cleanup444 445define i32 @test_invoke_ib_2_direct_mismatch() #0 personality ptr @__gxx_personality_v0 {446 %tmp0 = invoke i32 ptrauth (ptr @baz, i32 0, i64 1234)() [ "ptrauth"(i32 1, i64 2) ] to label %continuebb447 unwind label %unwindbb448 449unwindbb:450 %tmp1 = landingpad { ptr, i32 } cleanup451 call void @foo()452 ret i32 -1453 454continuebb:455 call void @foo()456 ret i32 %tmp0457}458 459; ELF-LABEL: .L_ZTIPKc.DW.stub:460; ELF-NEXT: .xword _ZTIPKc461 462declare void @foo()463declare void @bar(ptr)464declare i32 @baz()465 466declare i32 @__gxx_personality_v0(...)467declare ptr @__cxa_allocate_exception(i64)468declare void @__cxa_throw(ptr, ptr, ptr)469declare i32 @llvm.eh.typeid.for(ptr)470declare ptr @__cxa_begin_catch(ptr)471declare void @__cxa_end_catch()472 473attributes #0 = { nounwind }474