123 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s | FileCheck %s3 4; Test case to demonstrate a bug where calls to OUTLINED_FUNCTION_1 are5; inserted at a point where LR is live.6 7target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"8target triple = "aarch64"9 10define hidden void @_ZTv0_n24_N2C6D1Ev(ptr %this) minsize sspreq "target-features"="+harden-sls-retbr" {11; CHECK-LABEL: _ZTv0_n24_N2C6D1Ev:12; CHECK: // %bb.0: // %entry13; CHECK-NEXT: sub sp, sp, #3214; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill15; CHECK-NEXT: .cfi_def_cfa_offset 3216; CHECK-NEXT: .cfi_offset w30, -1617; CHECK-NEXT: bl OUTLINED_FUNCTION_018; CHECK-NEXT: b.ne .LBB0_219; CHECK-NEXT: // %bb.1: // %entry20; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload21; CHECK-NEXT: add x0, x0, x822; CHECK-NEXT: add sp, sp, #3223; CHECK-NEXT: b _ZN2C6D1Ev24; CHECK-NEXT: dsb sy25; CHECK-NEXT: isb26; CHECK-NEXT: .LBB0_2: // %entry27; CHECK-NEXT: bl __stack_chk_fail28entry:29 %0 = load ptr, ptr %this, align 830 %1 = getelementptr inbounds i8, ptr %0, i64 -2431 %2 = load i64, ptr %1, align 832 %3 = getelementptr inbounds i8, ptr %this, i64 %233 tail call void @_ZN2C6D1Ev(ptr %3)34 ret void35}36 37;38define hidden void @_ZTv0_n24_N2C6D0Ev(ptr %this) minsize sspreq "target-features"="+harden-sls-retbr" {39; CHECK-LABEL: _ZTv0_n24_N2C6D0Ev:40; CHECK: // %bb.0: // %entry41; CHECK-NEXT: sub sp, sp, #3242; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill43; CHECK-NEXT: .cfi_def_cfa_offset 3244; CHECK-NEXT: .cfi_offset w30, -1645; CHECK-NEXT: bl OUTLINED_FUNCTION_046; CHECK-NEXT: b.ne .LBB1_247; CHECK-NEXT: // %bb.1: // %entry48; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload49; CHECK-NEXT: add x0, x0, x850; CHECK-NEXT: add sp, sp, #3251; CHECK-NEXT: b _ZN2C6D0Ev52; CHECK-NEXT: dsb sy53; CHECK-NEXT: isb54; CHECK-NEXT: .LBB1_2: // %entry55; CHECK-NEXT: bl __stack_chk_fail56entry:57 %0 = load ptr, ptr %this, align 858 %1 = getelementptr inbounds i8, ptr %0, i64 -2459 %2 = load i64, ptr %1, align 860 %3 = getelementptr inbounds i8, ptr %this, i64 %261 tail call void @_ZN2C6D0Ev(ptr %3)62 ret void63}64 65define hidden void @_ZTv0_n24_N3C10D1Ev(ptr %this) minsize sspreq "target-features"="+harden-sls-retbr" {66; CHECK-LABEL: _ZTv0_n24_N3C10D1Ev:67; CHECK: // %bb.0: // %entry68; CHECK-NEXT: sub sp, sp, #3269; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill70; CHECK-NEXT: .cfi_def_cfa_offset 3271; CHECK-NEXT: .cfi_offset w30, -1672; CHECK-NEXT: bl OUTLINED_FUNCTION_073; CHECK-NEXT: b.ne .LBB2_274; CHECK-NEXT: // %bb.1: // %entry75; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload76; CHECK-NEXT: add x0, x0, x877; CHECK-NEXT: add sp, sp, #3278; CHECK-NEXT: b _ZN3C10D1Ev79; CHECK-NEXT: dsb sy80; CHECK-NEXT: isb81; CHECK-NEXT: .LBB2_2: // %entry82; CHECK-NEXT: bl __stack_chk_fail83entry:84 %0 = load ptr, ptr %this, align 885 %1 = getelementptr inbounds i8, ptr %0, i64 -2486 %2 = load i64, ptr %1, align 887 %3 = getelementptr inbounds i8, ptr %this, i64 %288 tail call void @_ZN3C10D1Ev(ptr %3)89 ret void90}91 92define hidden void @_ZTv0_n24_N3C10D0Ev(ptr %this) minsize sspreq "target-features"="+harden-sls-retbr" {93; CHECK-LABEL: _ZTv0_n24_N3C10D0Ev:94; CHECK: // %bb.0: // %entry95; CHECK-NEXT: sub sp, sp, #3296; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill97; CHECK-NEXT: .cfi_def_cfa_offset 3298; CHECK-NEXT: .cfi_offset w30, -1699; CHECK-NEXT: bl OUTLINED_FUNCTION_0100; CHECK-NEXT: b.ne .LBB3_2101; CHECK-NEXT: // %bb.1: // %entry102; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload103; CHECK-NEXT: add x0, x0, x8104; CHECK-NEXT: add sp, sp, #32105; CHECK-NEXT: b _ZN3C10D0Ev106; CHECK-NEXT: dsb sy107; CHECK-NEXT: isb108; CHECK-NEXT: .LBB3_2: // %entry109; CHECK-NEXT: bl __stack_chk_fail110entry:111 %0 = load ptr, ptr %this, align 8112 %1 = getelementptr inbounds i8, ptr %0, i64 -24113 %2 = load i64, ptr %1, align 8114 %3 = getelementptr inbounds i8, ptr %this, i64 %2115 tail call void @_ZN3C10D0Ev(ptr %3)116 ret void117}118 119declare void @_ZN2C6D1Ev(ptr %this)120declare void @_ZN3C10D1Ev(ptr %this)121declare void @_ZN2C6D0Ev(ptr %this)122declare void @_ZN3C10D0Ev(ptr %this)123