169 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple aarch64 %s -o - | \3; RUN: FileCheck %s --check-prefixes CHECK,V8A4; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple aarch64 -mattr=+v8.3a %s -o - | \5; RUN: FileCheck %s --check-prefixes CHECK,V83A6 7define i64 @a(i64 %x) "sign-return-address"="non-leaf" "sign-return-address-key"="b_key" {8; V8A-LABEL: a:9; V8A: // %bb.0:10; V8A-NEXT: .cfi_b_key_frame11; V8A-NEXT: hint #2712; V8A-NEXT: .cfi_negate_ra_state13; V8A-NEXT: sub sp, sp, #3214; V8A-NEXT: str x30, [sp, #16] // 8-byte Spill15; V8A-NEXT: .cfi_def_cfa_offset 3216; V8A-NEXT: .cfi_offset w30, -1617; V8A-NEXT: bl OUTLINED_FUNCTION_018; V8A-NEXT: //APP19; V8A-NEXT: mov x30, x020; V8A-NEXT: //NO_APP21; V8A-NEXT: ldr x30, [sp, #16] // 8-byte Reload22; V8A-NEXT: add sp, sp, #3223; V8A-NEXT: hint #3124; V8A-NEXT: ret25;26; V83A-LABEL: a:27; V83A: // %bb.0:28; V83A-NEXT: .cfi_b_key_frame29; V83A-NEXT: pacibsp30; V83A-NEXT: .cfi_negate_ra_state31; V83A-NEXT: sub sp, sp, #3232; V83A-NEXT: str x30, [sp, #16] // 8-byte Spill33; V83A-NEXT: .cfi_def_cfa_offset 3234; V83A-NEXT: .cfi_offset w30, -1635; V83A-NEXT: bl OUTLINED_FUNCTION_036; V83A-NEXT: //APP37; V83A-NEXT: mov x30, x038; V83A-NEXT: //NO_APP39; V83A-NEXT: ldr x30, [sp, #16] // 8-byte Reload40; V83A-NEXT: add sp, sp, #3241; V83A-NEXT: retab42 %1 = alloca i32, align 443 %2 = alloca i32, align 444 %3 = alloca i32, align 445 %4 = alloca i32, align 446 %5 = alloca i32, align 447 %6 = alloca i32, align 448 store i32 1, ptr %1, align 449 store i32 2, ptr %2, align 450 store i32 3, ptr %3, align 451 store i32 4, ptr %4, align 452 store i32 5, ptr %5, align 453 store i32 6, ptr %6, align 454 call void asm sideeffect "mov x30, $0", "r,~{lr}"(i64 %x) #155 ret i64 %x56}57 58define i64 @b(i64 %x) "sign-return-address"="non-leaf" "sign-return-address-key"="b_key" {59; V8A-LABEL: b:60; V8A: // %bb.0:61; V8A-NEXT: .cfi_b_key_frame62; V8A-NEXT: hint #2763; V8A-NEXT: .cfi_negate_ra_state64; V8A-NEXT: sub sp, sp, #3265; V8A-NEXT: str x30, [sp, #16] // 8-byte Spill66; V8A-NEXT: .cfi_def_cfa_offset 3267; V8A-NEXT: .cfi_offset w30, -1668; V8A-NEXT: bl OUTLINED_FUNCTION_069; V8A-NEXT: //APP70; V8A-NEXT: mov x30, x071; V8A-NEXT: //NO_APP72; V8A-NEXT: ldr x30, [sp, #16] // 8-byte Reload73; V8A-NEXT: add sp, sp, #3274; V8A-NEXT: hint #3175; V8A-NEXT: ret76;77; V83A-LABEL: b:78; V83A: // %bb.0:79; V83A-NEXT: .cfi_b_key_frame80; V83A-NEXT: pacibsp81; V83A-NEXT: .cfi_negate_ra_state82; V83A-NEXT: sub sp, sp, #3283; V83A-NEXT: str x30, [sp, #16] // 8-byte Spill84; V83A-NEXT: .cfi_def_cfa_offset 3285; V83A-NEXT: .cfi_offset w30, -1686; V83A-NEXT: bl OUTLINED_FUNCTION_087; V83A-NEXT: //APP88; V83A-NEXT: mov x30, x089; V83A-NEXT: //NO_APP90; V83A-NEXT: ldr x30, [sp, #16] // 8-byte Reload91; V83A-NEXT: add sp, sp, #3292; V83A-NEXT: retab93 %1 = alloca i32, align 494 %2 = alloca i32, align 495 %3 = alloca i32, align 496 %4 = alloca i32, align 497 %5 = alloca i32, align 498 %6 = alloca i32, align 499 store i32 1, ptr %1, align 4100 store i32 2, ptr %2, align 4101 store i32 3, ptr %3, align 4102 store i32 4, ptr %4, align 4103 store i32 5, ptr %5, align 4104 store i32 6, ptr %6, align 4105 call void asm sideeffect "mov x30, $0", "r,~{lr}"(i64 %x) #1106 ret i64 %x107}108 109define i64 @c(i64 %x) "sign-return-address"="non-leaf" "sign-return-address-key"="b_key" {110; V8A-LABEL: c:111; V8A: // %bb.0:112; V8A-NEXT: .cfi_b_key_frame113; V8A-NEXT: hint #27114; V8A-NEXT: .cfi_negate_ra_state115; V8A-NEXT: sub sp, sp, #32116; V8A-NEXT: str x30, [sp, #16] // 8-byte Spill117; V8A-NEXT: .cfi_def_cfa_offset 32118; V8A-NEXT: .cfi_offset w30, -16119; V8A-NEXT: bl OUTLINED_FUNCTION_0120; V8A-NEXT: //APP121; V8A-NEXT: mov x30, x0122; V8A-NEXT: //NO_APP123; V8A-NEXT: ldr x30, [sp, #16] // 8-byte Reload124; V8A-NEXT: add sp, sp, #32125; V8A-NEXT: hint #31126; V8A-NEXT: ret127;128; V83A-LABEL: c:129; V83A: // %bb.0:130; V83A-NEXT: .cfi_b_key_frame131; V83A-NEXT: pacibsp132; V83A-NEXT: .cfi_negate_ra_state133; V83A-NEXT: sub sp, sp, #32134; V83A-NEXT: str x30, [sp, #16] // 8-byte Spill135; V83A-NEXT: .cfi_def_cfa_offset 32136; V83A-NEXT: .cfi_offset w30, -16137; V83A-NEXT: bl OUTLINED_FUNCTION_0138; V83A-NEXT: //APP139; V83A-NEXT: mov x30, x0140; V83A-NEXT: //NO_APP141; V83A-NEXT: ldr x30, [sp, #16] // 8-byte Reload142; V83A-NEXT: add sp, sp, #32143; V83A-NEXT: retab144 %1 = alloca i32, align 4145 %2 = alloca i32, align 4146 %3 = alloca i32, align 4147 %4 = alloca i32, align 4148 %5 = alloca i32, align 4149 %6 = alloca i32, align 4150 store i32 1, ptr %1, align 4151 store i32 2, ptr %2, align 4152 store i32 3, ptr %3, align 4153 store i32 4, ptr %4, align 4154 store i32 5, ptr %5, align 4155 store i32 6, ptr %6, align 4156 call void asm sideeffect "mov x30, $0", "r,~{lr}"(i64 %x) #1157 ret i64 %x158}159 160;; Outlined function is leaf-function => don't sign it161; CHECK-LABEL: OUTLINED_FUNCTION_0:162; CHECK-NOT: .cfi_b_key_frame163; CHECK-NOT: paci{{[a,b]}}sp164; CHECK-NOT: hint #2{{[5,7]}}165; CHECK-NOT: .cfi_negate_ra_state166; CHECK-NOT: auti{{[a,b]}}sp167;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:168; CHECK: {{.*}}169