83 lines · plain
1; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple \2; RUN: aarch64-arm-linux-gnu %s -o - | FileCheck %s3 4; Check that outlined functions use the dedicated RETAA/RETAB instructions5; to sign their return address if available.6 7define void @a() #0 {8; CHECK-LABEL: a: // @a9; CHECK: // %bb.0:10; CHECK-NEXT: pacibsp11; CHECK: bl [[OUTLINED_FUNC:OUTLINED_FUNCTION_[0-9]+]]12 %1 = alloca i32, align 413 %2 = alloca i32, align 414 %3 = alloca i32, align 415 %4 = alloca i32, align 416 %5 = alloca i32, align 417 %6 = alloca i32, align 418 store i32 1, ptr %1, align 419 store i32 2, ptr %2, align 420 store i32 3, ptr %3, align 421 store i32 4, ptr %4, align 422 store i32 5, ptr %5, align 423 store i32 6, ptr %6, align 424; CHECK-NOT: auti{{[a,b]}}sp25; CHECK: retab26 ret void27}28 29define void @b() #0 {30; CHECK-LABEL: b: // @b31; CHECK: // %bb.0:32; CHECK-NEXT: pacibsp33; CHECK: bl OUTLINED_FUNC34 %1 = alloca i32, align 435 %2 = alloca i32, align 436 %3 = alloca i32, align 437 %4 = alloca i32, align 438 %5 = alloca i32, align 439 %6 = alloca i32, align 440 store i32 1, ptr %1, align 441 store i32 2, ptr %2, align 442 store i32 3, ptr %3, align 443 store i32 4, ptr %4, align 444 store i32 5, ptr %5, align 445 store i32 6, ptr %6, align 446; CHECK-NOT: auti{{[a,b]}}sp47; CHECK: retab48 ret void49}50 51define void @c() #0 {52; CHECK-LABEL: c: // @c53; CHECK: // %bb.0:54; CHECK-NEXT: pacibsp55; CHECK: bl OUTLINED_FUNC56 %1 = alloca i32, align 457 %2 = alloca i32, align 458 %3 = alloca i32, align 459 %4 = alloca i32, align 460 %5 = alloca i32, align 461 %6 = alloca i32, align 462 store i32 1, ptr %1, align 463 store i32 2, ptr %2, align 464 store i32 3, ptr %3, align 465 store i32 4, ptr %4, align 466 store i32 5, ptr %5, align 467 store i32 6, ptr %6, align 468; CHECK-NOT: auti{{[a,b]}}sp69; CHECK: retab70 ret void71}72 73attributes #0 = { "sign-return-address"="all"74 "sign-return-address-key"="b_key"75 "target-features"="+v8.3a"76 nounwind }77 78; CHECK: OUTLINED_FUNC79; CHECK: // %bb.0:80; CHECK-NEXT: pacibsp81; CHECK-NOT: auti{{[a,b]}}sp82; CHECK: retab83