brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · 94de1b4 Raw
249 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52 3; RUN: llc -mtriple arm64e-apple-darwin \4; RUN:   -aarch64-enable-collect-loh=false \5; RUN:   -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \6; RUN:   -o - %s | FileCheck %s --check-prefix=MACHO7 8; RUN: llc -mtriple arm64e-apple-darwin \9; RUN:   -fast-isel \10; RUN:   -aarch64-enable-collect-loh=false \11; RUN:   -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \12; RUN:   -o - %s | FileCheck %s --check-prefix=MACHO13 14; RUN: llc -mtriple arm64e-apple-darwin \15; RUN:   -global-isel -global-isel-abort=1 -verify-machineinstrs \16; RUN:   -aarch64-enable-collect-loh=false \17; RUN:   -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \18; RUN:   -o - %s | FileCheck %s --check-prefix=MACHO19 20; RUN: llc -mtriple aarch64-elf -mattr=+pauth \21; RUN:   -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \22; RUN:   -o - %s | FileCheck %s --check-prefix=ELF23 24; RUN: llc -mtriple aarch64-elf -mattr=+pauth \25; RUN:   -fast-isel \26; RUN:   -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \27; RUN:   -o - %s | FileCheck %s --check-prefix=ELF28 29; RUN: llc -mtriple aarch64-elf -mattr=+pauth \30; RUN:   -global-isel -global-isel-abort=1 -verify-machineinstrs \31; RUN:   -aarch64-min-jump-table-entries=1 -aarch64-enable-atomic-cfg-tidy=0 \32; RUN:   -o - %s | FileCheck %s --check-prefix=ELF33 34;; The discriminator is the same for all blockaddresses in the function.35;; ptrauth_string_discriminator("test_indirectbr blockaddress") == 3494736 37define i32 @test_indirectbr() #0 {38; MACHO-LABEL: test_indirectbr:39; MACHO:       ; %bb.0: ; %entry40; MACHO-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill41; MACHO-NEXT:    adrp x16, Ltmp0@PAGE42; MACHO-NEXT:    add x16, x16, Ltmp0@PAGEOFF43; MACHO-NEXT:    mov x17, #34947 ; =0x888344; MACHO-NEXT:    pacia x16, x1745; MACHO-NEXT:    mov x0, x1646; MACHO-NEXT:    adrp x16, Ltmp1@PAGE47; MACHO-NEXT:    add x16, x16, Ltmp1@PAGEOFF48; MACHO-NEXT:    mov x17, #34947 ; =0x888349; MACHO-NEXT:    pacia x16, x1750; MACHO-NEXT:    mov x1, x1651; MACHO-NEXT:    bl _dummy_choose52; MACHO-NEXT:    mov x17, #34947 ; =0x888353; MACHO-NEXT:    braa x0, x1754; MACHO-NEXT:  Ltmp0: ; Block address taken55; MACHO-NEXT:  LBB0_1: ; %bb156; MACHO-NEXT:    mov w0, #1 ; =0x157; MACHO-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload58; MACHO-NEXT:    ret59; MACHO-NEXT:  Ltmp1: ; Block address taken60; MACHO-NEXT:  LBB0_2: ; %bb261; MACHO-NEXT:    mov w0, #2 ; =0x262; MACHO-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload63; MACHO-NEXT:    ret64;65; ELF-LABEL: test_indirectbr:66; ELF:       // %bb.0: // %entry67; ELF-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill68; ELF-NEXT:    adrp x16, .Ltmp069; ELF-NEXT:    add x16, x16, :lo12:.Ltmp070; ELF-NEXT:    mov x17, #34947 // =0x888371; ELF-NEXT:    pacia x16, x1772; ELF-NEXT:    mov x0, x1673; ELF-NEXT:    adrp x16, .Ltmp174; ELF-NEXT:    add x16, x16, :lo12:.Ltmp175; ELF-NEXT:    mov x17, #34947 // =0x888376; ELF-NEXT:    pacia x16, x1777; ELF-NEXT:    mov x1, x1678; ELF-NEXT:    bl dummy_choose79; ELF-NEXT:    mov x17, #34947 // =0x888380; ELF-NEXT:    braa x0, x1781; ELF-NEXT:  .Ltmp0: // Block address taken82; ELF-NEXT:  .LBB0_1: // %bb183; ELF-NEXT:    mov w0, #1 // =0x184; ELF-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload85; ELF-NEXT:    ret86; ELF-NEXT:  .Ltmp1: // Block address taken87; ELF-NEXT:  .LBB0_2: // %bb288; ELF-NEXT:    mov w0, #2 // =0x289; ELF-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload90; ELF-NEXT:    ret91entry:92  %tmp0 = call ptr @dummy_choose(ptr blockaddress(@test_indirectbr, %bb1), ptr blockaddress(@test_indirectbr, %bb2))93  indirectbr ptr %tmp0, [label %bb1, label %bb2]94 95bb1:96  ret i32 197 98bb2:99  ret i32 2100}101 102define ptr @test_indirectbr_other_function() #0 {103; MACHO-LABEL: test_indirectbr_other_function:104; MACHO:       ; %bb.0:105; MACHO-NEXT:    adrp x16, Ltmp0@PAGE106; MACHO-NEXT:    add x16, x16, Ltmp0@PAGEOFF107; MACHO-NEXT:    mov x17, #34947 ; =0x8883108; MACHO-NEXT:    pacia x16, x17109; MACHO-NEXT:    mov x0, x16110; MACHO-NEXT:    ret111;112; ELF-LABEL: test_indirectbr_other_function:113; ELF:       // %bb.0:114; ELF-NEXT:    adrp x16, .Ltmp0115; ELF-NEXT:    add x16, x16, :lo12:.Ltmp0116; ELF-NEXT:    mov x17, #34947 // =0x8883117; ELF-NEXT:    pacia x16, x17118; ELF-NEXT:    mov x0, x16119; ELF-NEXT:    ret120  ret ptr blockaddress(@test_indirectbr, %bb1)121}122 123;; Test another function to compare the discriminator.124;; ptrauth_string_discriminator("test_indirectbr_2 blockaddress") == 40224125 126define i32 @test_indirectbr_2() #0 {127; MACHO-LABEL: test_indirectbr_2:128; MACHO:       ; %bb.0: ; %entry129; MACHO-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill130; MACHO-NEXT:    adrp x16, Ltmp2@PAGE131; MACHO-NEXT:    add x16, x16, Ltmp2@PAGEOFF132; MACHO-NEXT:    mov x17, #40224 ; =0x9d20133; MACHO-NEXT:    pacia x16, x17134; MACHO-NEXT:    mov x0, x16135; MACHO-NEXT:    adrp x16, Ltmp3@PAGE136; MACHO-NEXT:    add x16, x16, Ltmp3@PAGEOFF137; MACHO-NEXT:    mov x17, #40224 ; =0x9d20138; MACHO-NEXT:    pacia x16, x17139; MACHO-NEXT:    mov x1, x16140; MACHO-NEXT:    bl _dummy_choose141; MACHO-NEXT:    mov x17, #40224 ; =0x9d20142; MACHO-NEXT:    braa x0, x17143; MACHO-NEXT:  Ltmp2: ; Block address taken144; MACHO-NEXT:  LBB2_1: ; %bb1145; MACHO-NEXT:    mov w0, #1 ; =0x1146; MACHO-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload147; MACHO-NEXT:    ret148; MACHO-NEXT:  Ltmp3: ; Block address taken149; MACHO-NEXT:  LBB2_2: ; %bb2150; MACHO-NEXT:    mov w0, #2 ; =0x2151; MACHO-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload152; MACHO-NEXT:    ret153;154; ELF-LABEL: test_indirectbr_2:155; ELF:       // %bb.0: // %entry156; ELF-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill157; ELF-NEXT:    adrp x16, .Ltmp2158; ELF-NEXT:    add x16, x16, :lo12:.Ltmp2159; ELF-NEXT:    mov x17, #40224 // =0x9d20160; ELF-NEXT:    pacia x16, x17161; ELF-NEXT:    mov x0, x16162; ELF-NEXT:    adrp x16, .Ltmp3163; ELF-NEXT:    add x16, x16, :lo12:.Ltmp3164; ELF-NEXT:    mov x17, #40224 // =0x9d20165; ELF-NEXT:    pacia x16, x17166; ELF-NEXT:    mov x1, x16167; ELF-NEXT:    bl dummy_choose168; ELF-NEXT:    mov x17, #40224 // =0x9d20169; ELF-NEXT:    braa x0, x17170; ELF-NEXT:  .Ltmp2: // Block address taken171; ELF-NEXT:  .LBB2_1: // %bb1172; ELF-NEXT:    mov w0, #1 // =0x1173; ELF-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload174; ELF-NEXT:    ret175; ELF-NEXT:  .Ltmp3: // Block address taken176; ELF-NEXT:  .LBB2_2: // %bb2177; ELF-NEXT:    mov w0, #2 // =0x2178; ELF-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload179; ELF-NEXT:    ret180entry:181  %tmp0 = call ptr @dummy_choose(ptr blockaddress(@test_indirectbr_2, %bb1), ptr blockaddress(@test_indirectbr_2, %bb2))182  indirectbr ptr %tmp0, [label %bb1, label %bb2]183 184bb1:185  ret i32 1186 187bb2:188  ret i32 2189}190 191;; Check we don't interfere with jump-table BRIND lowering.192 193; MACHO-LABEL: test_jumptable:194; MACHO:        adrp x9, LJTI3_0@PAGE195; MACHO-NEXT:   add x9, x9, LJTI3_0@PAGEOFF196; MACHO-NEXT:   adr x10, LBB3_2197; MACHO-NEXT:   ldrb w11, [x9, x8]198; MACHO-NEXT:   add x10, x10, x11, lsl #2199; MACHO-NEXT:   br x10200 201; ELF-LABEL: test_jumptable:202; ELF:        adrp x9, .LJTI3_0203; ELF-NEXT:   add x9, x9, :lo12:.LJTI3_0204; ELF-NEXT:   adr x10, .LBB3_2205; ELF-NEXT:   ldrb w11, [x9, x8]206; ELF-NEXT:   add x10, x10, x11, lsl #2207; ELF-NEXT:   br x10208define i32 @test_jumptable(i32 %in) #0 {209  switch i32 %in, label %def [210    i32 0, label %lbl1211    i32 1, label %lbl2212  ]213 214def:215  ret i32 0216 217lbl1:218  ret i32 1219 220lbl2:221  ret i32 2222}223 224; MACHO-LABEL: .globl _test_indirectbr_array225; MACHO-NEXT:  .p2align 4226; MACHO-NEXT:  _test_indirectbr_array:227; MACHO-NEXT:   .quad Ltmp0@AUTH(ia,34947)228; MACHO-NEXT:   .quad Ltmp1@AUTH(ia,34947)229; MACHO-NEXT:   .quad Ltmp2@AUTH(ia,40224)230; MACHO-NEXT:   .quad Ltmp3@AUTH(ia,40224)231 232; ELF-LABEL: .globl test_indirectbr_array233; ELF-NEXT:  .p2align 4, 0x0234; ELF-NEXT:  test_indirectbr_array:235; ELF-NEXT:   .xword .Ltmp0@AUTH(ia,34947)236; ELF-NEXT:   .xword .Ltmp1@AUTH(ia,34947)237; ELF-NEXT:   .xword .Ltmp2@AUTH(ia,40224)238; ELF-NEXT:   .xword .Ltmp3@AUTH(ia,40224)239; ELF-NEXT:   .size test_indirectbr_array, 32240 241@test_indirectbr_array = constant [4 x ptr] [242  ptr blockaddress(@test_indirectbr, %bb1), ptr blockaddress(@test_indirectbr, %bb2),243  ptr blockaddress(@test_indirectbr_2, %bb1), ptr blockaddress(@test_indirectbr_2, %bb2)244]245 246declare ptr @dummy_choose(ptr, ptr)247 248attributes #0 = { "ptrauth-indirect-gotos" nounwind }249