brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.3 KiB · f6b3a88 Raw
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