1; RUN: llc -O0 -frame-pointer=all < %s | FileCheck %s 2 3; Check that CFI instructions are generated properly when 4; a frame pointer, variable length array and callee-saved 5; registers are all present at the same time 6 7target datalayout = "e-m:e-p:16:16-i32:16-i64:16-f32:16-f64:16-a:8-n8:16-S16" 8target triple = "msp430-unknown-unknown-elf" 9 10@g = global float 0.0 11@N = external global i16, align 2 12 13define void @foo() { 14; CHECK-LABEL: foo: 15; CHECK: push r4 16; CHECK-NEXT: .cfi_def_cfa_offset 4 17; CHECK-NEXT: .cfi_offset r4, -4 18; CHECK-NEXT: mov r1, r4 19; CHECK-NEXT: .cfi_def_cfa_register r4 20; CHECK: push r6 21; CHECK-NEXT: push r7 22; CHECK-NEXT: push r8 23; CHECK-NEXT: push r9 24; CHECK-NEXT: push r10 25; CHECK: .cfi_offset r6, -6 26; CHECK: .cfi_offset r7, -8 27; CHECK: .cfi_offset r8, -10 28; CHECK: .cfi_offset r9, -12 29; CHECK: .cfi_offset r10, -14 30 31 %n = load i16, ptr @N, align 2 32 %vla = alloca i8, i16 %n, align 1 33 %t1 = load volatile float, ptr @g 34 %t2 = load volatile float, ptr @g 35 %t3 = load volatile float, ptr @g 36 %t4 = load volatile float, ptr @g 37 %t5 = load volatile float, ptr @g 38 store volatile float %t1, ptr @g 39 store volatile float %t2, ptr @g 40 store volatile float %t3, ptr @g 41 store volatile float %t4, ptr @g 42 store volatile float %t5, ptr @g 43 44; CHECK: mov r4, r1 45; CHECK-NEXT: sub #10, r1 46; CHECK: pop r10 47; CHECK-NEXT: pop r9 48; CHECK-NEXT: pop r8 49; CHECK-NEXT: pop r7 50; CHECK-NEXT: pop r6 51; CHECK: pop r4 52; CHECK: .cfi_def_cfa r1, 2 53; CHECK: .cfi_restore r6 54; CHECK: .cfi_restore r7 55; CHECK: .cfi_restore r8 56; CHECK: .cfi_restore r9 57; CHECK: .cfi_restore r10 58 59 ret void 60} 61