88 lines · plain
1; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple \2; RUN: aarch64-arm-linux-gnu %s -o - | FileCheck %s3 4; Check that functions that should sign their return addresses don't get5; outlined if not all of the function either support v8.3a features or all of6; the functions don't!!7 8define void @a() #0 {9; CHECK-LABEL: a: // @a10; CHECK: // %bb.0:11; CHECK-NEXT: .cfi_b_key_frame12; CHECK-NEXT: pacibsp13; CHECK-NEXT: .cfi_negate_ra_state14; CHECK-NOT: OUTLINED_FUNCTION_15 %1 = alloca i32, align 416 %2 = alloca i32, align 417 %3 = alloca i32, align 418 %4 = alloca i32, align 419 %5 = alloca i32, align 420 %6 = alloca i32, align 421 store i32 1, ptr %1, align 422 store i32 2, ptr %2, align 423 store i32 3, ptr %3, align 424 store i32 4, ptr %4, align 425 store i32 5, ptr %5, align 426 store i32 6, ptr %6, align 427; CHECK-NOT: auti{{[a,b]}}sp28; CHECK: retab29 ret void30}31 32define void @b() #0 {33; CHECK-LABEL: b: // @b34; CHECK: // %bb.0:35; CHECK-NEXT: .cfi_b_key_frame36; CHECK-NEXT: pacibsp37; CHECK-NEXT: .cfi_negate_ra_state38; CHECK-NOT: OUTLINED_FUNCTION_39 %1 = alloca i32, align 440 %2 = alloca i32, align 441 %3 = alloca i32, align 442 %4 = alloca i32, align 443 %5 = alloca i32, align 444 %6 = alloca i32, align 445 store i32 1, ptr %1, align 446 store i32 2, ptr %2, align 447 store i32 3, ptr %3, align 448 store i32 4, ptr %4, align 449 store i32 5, ptr %5, align 450 store i32 6, ptr %6, align 451; CHECK-NOT: auti{{[a,b]}}sp52; CHECK: retab53 ret void54}55 56define void @c() #1 {57; CHECK-LABEL: c: // @c58; CHECK: // %bb.0:59; CHECK-NEXT: .cfi_b_key_frame60; CHECK-NEXT: hint #2761; CHECK-NEXT: .cfi_negate_ra_state62; CHECK-NOT: OUTLINED_FUNCTION_63 %1 = alloca i32, align 464 %2 = alloca i32, align 465 %3 = alloca i32, align 466 %4 = alloca i32, align 467 %5 = alloca i32, align 468 %6 = alloca i32, align 469 store i32 1, ptr %1, align 470 store i32 2, ptr %2, align 471 store i32 3, ptr %3, align 472 store i32 4, ptr %4, align 473 store i32 5, ptr %5, align 474 store i32 6, ptr %6, align 475; CHECK: hint #3176; CHECK-NOT: ret{{[a,b]}}77 ret void78}79 80attributes #0 = { "sign-return-address"="all"81 "sign-return-address-key"="b_key"82 "target-features"="+v8.3a" }83 84attributes #1 = { "sign-return-address"="all"85 "sign-return-address-key"="b_key" }86 87; CHECK-NOT: OUTLINED_FUNCTION_88