[ARM] Use symbolic register names in .cfi directives only with IAS (PR19110)
authorHans Wennborg <hans@hanshq.net>
Thu, 13 Mar 2014 15:56:41 +0000 (15:56 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 13 Mar 2014 15:56:41 +0000 (15:56 +0000)
This is a follow-up to r203635. Saleem pointed out that since symbolic register
names are much easier to read, it would be good if we could turn them off only
when we really need to because we're using an external assembler.

Differential Revision: http://llvm-reviews.chandlerc.com/D3056

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203806 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCAsmInfo.h
lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h
test/CodeGen/ARM/debug-frame-large-stack.ll
test/CodeGen/ARM/debug-frame-vararg.ll
test/CodeGen/ARM/debug-frame.ll

index 4e5322fe6afa7f787de5f7541e1bf428bc953e23..0ecffa34bd623ce04e9322aa39203aa356ce5309 100644 (file)
@@ -535,7 +535,7 @@ namespace llvm {
     bool useIntegratedAssembler() const { return UseIntegratedAssembler; }
 
     /// Set whether assembly (inline or otherwise) should be parsed.
-    void setUseIntegratedAssembler(bool Value) {
+    virtual void setUseIntegratedAssembler(bool Value) {
       UseIntegratedAssembler = Value;
     }
   };
index 4c87bb21803ddf96fffce6cfa24292c1dbb0a1c3..3b33a9901c6a536abdcdf0da3f47b1e22c7962f8 100644 (file)
@@ -54,8 +54,14 @@ ARMELFMCAsmInfo::ARMELFMCAsmInfo() {
   UseParensForSymbolVariant = true;
 
   UseIntegratedAssembler = true;
+}
 
-  // gas doesn't handle VFP register names in cfi directives.
-  // See https://sourceware.org/bugzilla/show_bug.cgi?id=16694
-  DwarfRegNumForCFI = true;
+void ARMELFMCAsmInfo::setUseIntegratedAssembler(bool Value) {
+  UseIntegratedAssembler = Value;
+  if (!UseIntegratedAssembler) {
+    // gas doesn't handle VFP register names in cfi directives,
+    // so don't use register names with external assembler.
+    // See https://sourceware.org/bugzilla/show_bug.cgi?id=16694
+    DwarfRegNumForCFI = true;
+  }
 }
index ea9dd19571c6acdc21270951cbc7247f14f127a6..08efa8e4f248791aa22ba662dc21aebc421ae57f 100644 (file)
@@ -29,6 +29,8 @@ namespace llvm {
     void anchor() override;
   public:
     explicit ARMELFMCAsmInfo();
+
+    void setUseIntegratedAssembler(bool Value) override;
   };
 
 } // namespace llvm
index 6ce6680e572bc71adb6f280f48e1b27d1b52924a..5bafce9407e5396ff06b6690f9e8d55635478b4c 100644 (file)
@@ -42,8 +42,8 @@ define void @test2() {
 ; CHECK-ARM: .cfi_startproc
 ; CHECK-ARM: push    {r4, r5}
 ; CHECK-ARM: .cfi_def_cfa_offset 8
-; CHECK-ARM: .cfi_offset 5, -4
-; CHECK-ARM: .cfi_offset 4, -8
+; CHECK-ARM: .cfi_offset r5, -4
+; CHECK-ARM: .cfi_offset r4, -8
 ; CHECK-ARM: sub    sp, sp, #72
 ; CHECK-ARM: sub    sp, sp, #4096
 ; CHECK-ARM: .cfi_def_cfa_offset 4176
@@ -54,7 +54,7 @@ define void @test2() {
 ; CHECK-ARM-FP_ELIM: push    {r4, r5}
 ; CHECK-ARM-FP_ELIM: .cfi_def_cfa_offset 8
 ; CHECK-ARM-FP_ELIM: .cfi_offset 54, -4
-; CHECK-ARM-FP_ELIM: .cfi_offset 4, -8
+; CHECK-ARM-FP_ELIM: .cfi_offset r4, -8
 ; CHECK-ARM-FP_ELIM: sub    sp, sp, #72
 ; CHECK-ARM-FP_ELIM: sub    sp, sp, #4096
 ; CHECK-ARM-FP_ELIM: .cfi_def_cfa_offset 4176
@@ -73,11 +73,11 @@ define i32 @test3() {
 ; CHECK-ARM: .cfi_startproc
 ; CHECK-ARM: push    {r4, r5, r11}
 ; CHECK-ARM: .cfi_def_cfa_offset 12
-; CHECK-ARM: .cfi_offset 11, -4
-; CHECK-ARM: .cfi_offset 5, -8
-; CHECK-ARM: .cfi_offset 4, -12
+; CHECK-ARM: .cfi_offset r11, -4
+; CHECK-ARM: .cfi_offset r5, -8
+; CHECK-ARM: .cfi_offset r4, -12
 ; CHECK-ARM: add    r11, sp, #8
-; CHECK-ARM: .cfi_def_cfa 11, 4
+; CHECK-ARM: .cfi_def_cfa r11, 4
 ; CHECK-ARM: sub    sp, sp, #20
 ; CHECK-ARM: sub    sp, sp, #805306368
 ; CHECK-ARM: bic    sp, sp, #15
@@ -87,11 +87,11 @@ define i32 @test3() {
 ; CHECK-ARM-FP-ELIM: .cfi_startproc
 ; CHECK-ARM-FP-ELIM: push    {r4, r5, r11}
 ; CHECK-ARM-FP-ELIM: .cfi_def_cfa_offset 12
-; CHECK-ARM-FP-ELIM: .cfi_offset 11, -4
-; CHECK-ARM-FP-ELIM: .cfi_offset 5, -8
-; CHECK-ARM-FP-ELIM: .cfi_offset 4, -12
+; CHECK-ARM-FP-ELIM: .cfi_offset r11, -4
+; CHECK-ARM-FP-ELIM: .cfi_offset r5, -8
+; CHECK-ARM-FP-ELIM: .cfi_offset r4, -12
 ; CHECK-ARM-FP-ELIM: add    r11, sp, #8
-; CHECK-ARM-FP-ELIM: .cfi_def_cfa 11, 4
+; CHECK-ARM-FP-ELIM: .cfi_def_cfa r11, 4
 ; CHECK-ARM-FP-ELIM: sub    sp, sp, #20
 ; CHECK-ARM-FP-ELIM: sub    sp, sp, #805306368
 ; CHECK-ARM-FP-ELIM: bic    sp, sp, #15
index 2a7d7947db04dbff6f3bccc4fba1f8abb108c291..9b39525e5275fb6ac89da87c536d5020b6b7dfce 100644 (file)
@@ -66,8 +66,8 @@
 ; CHECK-FP: .cfi_def_cfa_offset 16
 ; CHECK-FP: push   {r4, lr}
 ; CHECK-FP: .cfi_def_cfa_offset 24
-; CHECK-FP: .cfi_offset 14, -20
-; CHECK-FP: .cfi_offset 4, -24
+; CHECK-FP: .cfi_offset lr, -20
+; CHECK-FP: .cfi_offset r4, -24
 ; CHECK-FP: sub    sp, sp, #8
 ; CHECK-FP: .cfi_def_cfa_offset 32
 
 ; CHECK-FP-ELIM: .cfi_def_cfa_offset 16
 ; CHECK-FP-ELIM: push   {r4, r11, lr}
 ; CHECK-FP-ELIM: .cfi_def_cfa_offset 28
-; CHECK-FP-ELIM: .cfi_offset 14, -20
-; CHECK-FP-ELIM: .cfi_offset 11, -24
-; CHECK-FP-ELIM: .cfi_offset 4, -28
+; CHECK-FP-ELIM: .cfi_offset lr, -20
+; CHECK-FP-ELIM: .cfi_offset r11, -24
+; CHECK-FP-ELIM: .cfi_offset r4, -28
 ; CHECK-FP-ELIM: add    r11, sp, #4
-; CHECK-FP-ELIM: .cfi_def_cfa 11, 24
+; CHECK-FP-ELIM: .cfi_def_cfa r11, 24
 
 ; CHECK-THUMB-FP-LABEL: sum
 ; CHECK-THUMB-FP: .cfi_startproc
 ; CHECK-THUMB-FP: .cfi_def_cfa_offset 16
 ; CHECK-THUMB-FP: push   {r4, r5, r7, lr}
 ; CHECK-THUMB-FP: .cfi_def_cfa_offset 32
-; CHECK-THUMB-FP: .cfi_offset 14, -20
-; CHECK-THUMB-FP: .cfi_offset 7, -24
-; CHECK-THUMB-FP: .cfi_offset 5, -28
-; CHECK-THUMB-FP: .cfi_offset 4, -32
+; CHECK-THUMB-FP: .cfi_offset lr, -20
+; CHECK-THUMB-FP: .cfi_offset r7, -24
+; CHECK-THUMB-FP: .cfi_offset r5, -28
+; CHECK-THUMB-FP: .cfi_offset r4, -32
 ; CHECK-THUMB-FP: sub    sp, #8
 ; CHECK-THUMB-FP: .cfi_def_cfa_offset 40
 
 ; CHECK-THUMB-FP-ELIM: .cfi_def_cfa_offset 16
 ; CHECK-THUMB-FP-ELIM: push   {r4, r5, r7, lr}
 ; CHECK-THUMB-FP-ELIM: .cfi_def_cfa_offset 32
-; CHECK-THUMB-FP-ELIM: .cfi_offset 14, -20
-; CHECK-THUMB-FP-ELIM: .cfi_offset 7, -24
-; CHECK-THUMB-FP-ELIM: .cfi_offset 5, -28
-; CHECK-THUMB-FP-ELIM: .cfi_offset 4, -32
+; CHECK-THUMB-FP-ELIM: .cfi_offset lr, -20
+; CHECK-THUMB-FP-ELIM: .cfi_offset r7, -24
+; CHECK-THUMB-FP-ELIM: .cfi_offset r5, -28
+; CHECK-THUMB-FP-ELIM: .cfi_offset r4, -32
 ; CHECK-THUMB-FP-ELIM: add    r7, sp, #8
-; CHECK-THUMB-FP-ELIM: .cfi_def_cfa 7, 24
+; CHECK-THUMB-FP-ELIM: .cfi_def_cfa r7, 24
 
 define i32 @sum(i32 %count, ...) {
 entry:
index 527fea8c204a42719e89c6b03486e76f98a6446c..cf687676fb192865893c2b509a96159f56bf0d43 100644 (file)
@@ -12,6 +12,7 @@
 ; (6) thumb without -disable-fp-elim
 ; (7) thumbv7 with -disable-fp-elim
 ; (8) thumbv7 without -disable-fp-elim
+; (9) thumbv7 with -no-integrated-as
 
 ; RUN: llc -mtriple arm-unknown-linux-gnueabi \
 ; RUN:     -disable-fp-elim -filetype=asm -o - %s \
 ; RUN:     -filetype=asm -o - %s \
 ; RUN:   | FileCheck %s --check-prefix=CHECK-THUMB-V7-FP-ELIM
 
+; RUN: llc -mtriple thumbv7-unknown-linux-gnueabi \
+; RUN:     -disable-fp-elim -no-integrated-as -filetype=asm -o - %s \
+; RUN:   | FileCheck %s --check-prefix=CHECK-THUMB-V7-FP-NOIAS
+
 ;-------------------------------------------------------------------------------
 ; Test 1
 ;-------------------------------------------------------------------------------
@@ -163,17 +168,17 @@ declare void @_ZSt9terminatev()
 ; CHECK-FP:   .cfi_startproc
 ; CHECK-FP:   push   {r4, r5, r6, r7, r8, r9, r10, r11, lr}
 ; CHECK-FP:   .cfi_def_cfa_offset 36
-; CHECK-FP:   .cfi_offset 14, -4
-; CHECK-FP:   .cfi_offset 11, -8
-; CHECK-FP:   .cfi_offset 10, -12
-; CHECK-FP:   .cfi_offset 9, -16
-; CHECK-FP:   .cfi_offset 8, -20
-; CHECK-FP:   .cfi_offset 7, -24
-; CHECK-FP:   .cfi_offset 6, -28
-; CHECK-FP:   .cfi_offset 5, -32
-; CHECK-FP:   .cfi_offset 4, -36
+; CHECK-FP:   .cfi_offset lr, -4
+; CHECK-FP:   .cfi_offset r11, -8
+; CHECK-FP:   .cfi_offset r10, -12
+; CHECK-FP:   .cfi_offset r9, -16
+; CHECK-FP:   .cfi_offset r8, -20
+; CHECK-FP:   .cfi_offset r7, -24
+; CHECK-FP:   .cfi_offset r6, -28
+; CHECK-FP:   .cfi_offset r5, -32
+; CHECK-FP:   .cfi_offset r4, -36
 ; CHECK-FP:   add    r11, sp, #28
-; CHECK-FP:   .cfi_def_cfa 11, 8
+; CHECK-FP:   .cfi_def_cfa r11, 8
 ; CHECK-FP:   sub    sp, sp, #28
 ; CHECK-FP:   .cfi_endproc
 
@@ -181,15 +186,15 @@ declare void @_ZSt9terminatev()
 ; CHECK-FP-ELIM:   .cfi_startproc
 ; CHECK-FP-ELIM:   push  {r4, r5, r6, r7, r8, r9, r10, r11, lr}
 ; CHECK-FP-ELIM:   .cfi_def_cfa_offset 36
-; CHECK-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-FP-ELIM:   .cfi_offset 11, -8
-; CHECK-FP-ELIM:   .cfi_offset 10, -12
-; CHECK-FP-ELIM:   .cfi_offset 9, -16
-; CHECK-FP-ELIM:   .cfi_offset 8, -20
-; CHECK-FP-ELIM:   .cfi_offset 7, -24
-; CHECK-FP-ELIM:   .cfi_offset 6, -28
-; CHECK-FP-ELIM:   .cfi_offset 5, -32
-; CHECK-FP-ELIM:   .cfi_offset 4, -36
+; CHECK-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-FP-ELIM:   .cfi_offset r11, -8
+; CHECK-FP-ELIM:   .cfi_offset r10, -12
+; CHECK-FP-ELIM:   .cfi_offset r9, -16
+; CHECK-FP-ELIM:   .cfi_offset r8, -20
+; CHECK-FP-ELIM:   .cfi_offset r7, -24
+; CHECK-FP-ELIM:   .cfi_offset r6, -28
+; CHECK-FP-ELIM:   .cfi_offset r5, -32
+; CHECK-FP-ELIM:   .cfi_offset r4, -36
 ; CHECK-FP-ELIM:   sub   sp, sp, #28
 ; CHECK-FP-ELIM:   .cfi_def_cfa_offset 64
 ; CHECK-FP-ELIM:   .cfi_endproc
@@ -198,17 +203,17 @@ declare void @_ZSt9terminatev()
 ; CHECK-V7-FP:   .cfi_startproc
 ; CHECK-V7-FP:   push   {r4, r11, lr}
 ; CHECK-V7-FP:   .cfi_def_cfa_offset 12
-; CHECK-V7-FP:   .cfi_offset 14, -4
-; CHECK-V7-FP:   .cfi_offset 11, -8
-; CHECK-V7-FP:   .cfi_offset 4, -12
+; CHECK-V7-FP:   .cfi_offset lr, -4
+; CHECK-V7-FP:   .cfi_offset r11, -8
+; CHECK-V7-FP:   .cfi_offset r4, -12
 ; CHECK-V7-FP:   add    r11, sp, #4
-; CHECK-V7-FP:   .cfi_def_cfa 11, 8
+; CHECK-V7-FP:   .cfi_def_cfa r11, 8
 ; CHECK-V7-FP:   vpush  {d8, d9, d10, d11, d12}
-; CHECK-V7-FP:   .cfi_offset 268, -24
-; CHECK-V7-FP:   .cfi_offset 267, -32
-; CHECK-V7-FP:   .cfi_offset 266, -40
-; CHECK-V7-FP:   .cfi_offset 265, -48
-; CHECK-V7-FP:   .cfi_offset 264, -56
+; CHECK-V7-FP:   .cfi_offset d12, -24
+; CHECK-V7-FP:   .cfi_offset d11, -32
+; CHECK-V7-FP:   .cfi_offset d10, -40
+; CHECK-V7-FP:   .cfi_offset d9, -48
+; CHECK-V7-FP:   .cfi_offset d8, -56
 ; CHECK-V7-FP:   sub    sp, sp, #28
 ; CHECK-V7-FP:   .cfi_endproc
 
@@ -216,15 +221,15 @@ declare void @_ZSt9terminatev()
 ; CHECK-V7-FP-ELIM:   .cfi_startproc
 ; CHECK-V7-FP-ELIM:   push   {r4, lr}
 ; CHECK-V7-FP-ELIM:   .cfi_def_cfa_offset 8
-; CHECK-V7-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-V7-FP-ELIM:   .cfi_offset 4, -8
+; CHECK-V7-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-V7-FP-ELIM:   .cfi_offset r4, -8
 ; CHECK-V7-FP-ELIM:   vpush  {d8, d9, d10, d11, d12}
 ; CHECK-V7-FP-ELIM:   .cfi_def_cfa_offset 48
-; CHECK-V7-FP-ELIM:   .cfi_offset 268, -16
-; CHECK-V7-FP-ELIM:   .cfi_offset 267, -24
-; CHECK-V7-FP-ELIM:   .cfi_offset 266, -32
-; CHECK-V7-FP-ELIM:   .cfi_offset 265, -40
-; CHECK-V7-FP-ELIM:   .cfi_offset 264, -48
+; CHECK-V7-FP-ELIM:   .cfi_offset d12, -16
+; CHECK-V7-FP-ELIM:   .cfi_offset d11, -24
+; CHECK-V7-FP-ELIM:   .cfi_offset d10, -32
+; CHECK-V7-FP-ELIM:   .cfi_offset d9, -40
+; CHECK-V7-FP-ELIM:   .cfi_offset d8, -48
 ; CHECK-V7-FP-ELIM:   sub    sp, sp, #24
 ; CHECK-V7-FP-ELIM:   .cfi_def_cfa_offset 72
 ; CHECK-V7-FP-ELIM:   .cfi_endproc
@@ -233,13 +238,13 @@ declare void @_ZSt9terminatev()
 ; CHECK-THUMB-FP:   .cfi_startproc
 ; CHECK-THUMB-FP:   push   {r4, r5, r6, r7, lr}
 ; CHECK-THUMB-FP:   .cfi_def_cfa_offset 20
-; CHECK-THUMB-FP:   .cfi_offset 14, -4
-; CHECK-THUMB-FP:   .cfi_offset 7, -8
-; CHECK-THUMB-FP:   .cfi_offset 6, -12
-; CHECK-THUMB-FP:   .cfi_offset 5, -16
-; CHECK-THUMB-FP:   .cfi_offset 4, -20
+; CHECK-THUMB-FP:   .cfi_offset lr, -4
+; CHECK-THUMB-FP:   .cfi_offset r7, -8
+; CHECK-THUMB-FP:   .cfi_offset r6, -12
+; CHECK-THUMB-FP:   .cfi_offset r5, -16
+; CHECK-THUMB-FP:   .cfi_offset r4, -20
 ; CHECK-THUMB-FP:   add    r7, sp, #12
-; CHECK-THUMB-FP:   .cfi_def_cfa 7, 8
+; CHECK-THUMB-FP:   .cfi_def_cfa r7, 8
 ; CHECK-THUMB-FP:   sub    sp, #60
 ; CHECK-THUMB-FP:   .cfi_endproc
 
@@ -247,11 +252,11 @@ declare void @_ZSt9terminatev()
 ; CHECK-THUMB-FP-ELIM:   .cfi_startproc
 ; CHECK-THUMB-FP-ELIM:   push   {r4, r5, r6, r7, lr}
 ; CHECK-THUMB-FP-ELIM:   .cfi_def_cfa_offset 20
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 7, -8
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 6, -12
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 5, -16
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 4, -20
+; CHECK-THUMB-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-THUMB-FP-ELIM:   .cfi_offset r7, -8
+; CHECK-THUMB-FP-ELIM:   .cfi_offset r6, -12
+; CHECK-THUMB-FP-ELIM:   .cfi_offset r5, -16
+; CHECK-THUMB-FP-ELIM:   .cfi_offset r4, -20
 ; CHECK-THUMB-FP-ELIM:   sub    sp, #60
 ; CHECK-THUMB-FP-ELIM:   .cfi_def_cfa_offset 80
 ; CHECK-THUMB-FP-ELIM:   .cfi_endproc
@@ -260,18 +265,18 @@ declare void @_ZSt9terminatev()
 ; CHECK-THUMB-V7-FP:   .cfi_startproc
 ; CHECK-THUMB-V7-FP:   push.w   {r4, r7, r11, lr}
 ; CHECK-THUMB-V7-FP:   .cfi_def_cfa_offset 16
-; CHECK-THUMB-V7-FP:   .cfi_offset 14, -4
-; CHECK-THUMB-V7-FP:   .cfi_offset 11, -8
-; CHECK-THUMB-V7-FP:   .cfi_offset 7, -12
-; CHECK-THUMB-V7-FP:   .cfi_offset 4, -16
+; CHECK-THUMB-V7-FP:   .cfi_offset lr, -4
+; CHECK-THUMB-V7-FP:   .cfi_offset r11, -8
+; CHECK-THUMB-V7-FP:   .cfi_offset r7, -12
+; CHECK-THUMB-V7-FP:   .cfi_offset r4, -16
 ; CHECK-THUMB-V7-FP:   add    r7, sp, #4
-; CHECK-THUMB-V7-FP:   .cfi_def_cfa 7, 12
+; CHECK-THUMB-V7-FP:   .cfi_def_cfa r7, 12
 ; CHECK-THUMB-V7-FP:   vpush  {d8, d9, d10, d11, d12}
-; CHECK-THUMB-V7-FP:   .cfi_offset 268, -24
-; CHECK-THUMB-V7-FP:   .cfi_offset 267, -32
-; CHECK-THUMB-V7-FP:   .cfi_offset 266, -40
-; CHECK-THUMB-V7-FP:   .cfi_offset 265, -48
-; CHECK-THUMB-V7-FP:   .cfi_offset 264, -56
+; CHECK-THUMB-V7-FP:   .cfi_offset d12, -24
+; CHECK-THUMB-V7-FP:   .cfi_offset d11, -32
+; CHECK-THUMB-V7-FP:   .cfi_offset d10, -40
+; CHECK-THUMB-V7-FP:   .cfi_offset d9, -48
+; CHECK-THUMB-V7-FP:   .cfi_offset d8, -56
 ; CHECK-THUMB-V7-FP:   sub    sp, #24
 ; CHECK-THUMB-V7-FP:   .cfi_endproc
 
@@ -279,19 +284,37 @@ declare void @_ZSt9terminatev()
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_startproc
 ; CHECK-THUMB-V7-FP-ELIM:   push   {r4, lr}
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_def_cfa_offset 8
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 4, -8
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset r4, -8
 ; CHECK-THUMB-V7-FP-ELIM:   vpush  {d8, d9, d10, d11, d12}
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_def_cfa_offset 48
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 268, -16
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 267, -24
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 266, -32
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 265, -40
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 264, -48
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset d12, -16
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset d11, -24
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset d10, -32
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset d9, -40
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset d8, -48
 ; CHECK-THUMB-V7-FP-ELIM:   sub    sp, #24
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_def_cfa_offset 72
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_endproc
 
+; CHECK-THUMB-V7-FP-NOIAS-LABEL: _Z4testiiiiiddddd:
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_startproc
+; CHECK-THUMB-V7-FP-NOIAS:   push.w   {r4, r7, r11, lr}
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_def_cfa_offset 16
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_offset 14, -4
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_offset 11, -8
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_offset 7, -12
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_offset 4, -16
+; CHECK-THUMB-V7-FP-NOIAS:   add    r7, sp, #4
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_def_cfa 7, 12
+; CHECK-THUMB-V7-FP-NOIAS:   vpush  {d8, d9, d10, d11, d12}
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_offset 268, -24
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_offset 267, -32
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_offset 266, -40
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_offset 265, -48
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_offset 264, -56
+; CHECK-THUMB-V7-FP-NOIAS:   sub    sp, #24
+; CHECK-THUMB-V7-FP-NOIAS:   .cfi_endproc
 
 ;-------------------------------------------------------------------------------
 ; Test 2
@@ -309,10 +332,10 @@ entry:
 ; CHECK-FP:   .cfi_startproc
 ; CHECK-FP:   push   {r11, lr}
 ; CHECK-FP:   .cfi_def_cfa_offset 8
-; CHECK-FP:   .cfi_offset 14, -4
-; CHECK-FP:   .cfi_offset 11, -8
+; CHECK-FP:   .cfi_offset lr, -4
+; CHECK-FP:   .cfi_offset r11, -8
 ; CHECK-FP:   mov    r11, sp
-; CHECK-FP:   .cfi_def_cfa_register 11
+; CHECK-FP:   .cfi_def_cfa_register r11
 ; CHECK-FP:   pop    {r11, lr}
 ; CHECK-FP:   mov    pc, lr
 ; CHECK-FP:   .cfi_endproc
@@ -321,8 +344,8 @@ entry:
 ; CHECK-FP-ELIM:   .cfi_startproc
 ; CHECK-FP-ELIM:   push  {r11, lr}
 ; CHECK-FP-ELIM:   .cfi_def_cfa_offset 8
-; CHECK-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-FP-ELIM:   .cfi_offset 11, -8
+; CHECK-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-FP-ELIM:   .cfi_offset r11, -8
 ; CHECK-FP-ELIM:   pop   {r11, lr}
 ; CHECK-FP-ELIM:   mov   pc, lr
 ; CHECK-FP-ELIM:   .cfi_endproc
@@ -331,10 +354,10 @@ entry:
 ; CHECK-V7-FP:   .cfi_startproc
 ; CHECK-V7-FP:   push   {r11, lr}
 ; CHECK-V7-FP:   .cfi_def_cfa_offset 8
-; CHECK-V7-FP:   .cfi_offset 14, -4
-; CHECK-V7-FP:   .cfi_offset 11, -8
+; CHECK-V7-FP:   .cfi_offset lr, -4
+; CHECK-V7-FP:   .cfi_offset r11, -8
 ; CHECK-V7-FP:   mov    r11, sp
-; CHECK-V7-FP:   .cfi_def_cfa_register 11
+; CHECK-V7-FP:   .cfi_def_cfa_register r11
 ; CHECK-V7-FP:   pop    {r11, pc}
 ; CHECK-V7-FP:   .cfi_endproc
 
@@ -342,8 +365,8 @@ entry:
 ; CHECK-V7-FP-ELIM:   .cfi_startproc
 ; CHECK-V7-FP-ELIM:   push  {r11, lr}
 ; CHECK-V7-FP-ELIM:   .cfi_def_cfa_offset 8
-; CHECK-V7-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-V7-FP-ELIM:   .cfi_offset 11, -8
+; CHECK-V7-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-V7-FP-ELIM:   .cfi_offset r11, -8
 ; CHECK-V7-FP-ELIM:   pop   {r11, pc}
 ; CHECK-V7-FP-ELIM:   .cfi_endproc
 
@@ -351,10 +374,10 @@ entry:
 ; CHECK-THUMB-FP:   .cfi_startproc
 ; CHECK-THUMB-FP:   push   {r7, lr}
 ; CHECK-THUMB-FP:   .cfi_def_cfa_offset 8
-; CHECK-THUMB-FP:   .cfi_offset 14, -4
-; CHECK-THUMB-FP:   .cfi_offset 7, -8
+; CHECK-THUMB-FP:   .cfi_offset lr, -4
+; CHECK-THUMB-FP:   .cfi_offset r7, -8
 ; CHECK-THUMB-FP:   add    r7, sp, #0
-; CHECK-THUMB-FP:   .cfi_def_cfa_register 7
+; CHECK-THUMB-FP:   .cfi_def_cfa_register r7
 ; CHECK-THUMB-FP:   pop    {r7, pc}
 ; CHECK-THUMB-FP:   .cfi_endproc
 
@@ -362,8 +385,8 @@ entry:
 ; CHECK-THUMB-FP-ELIM:   .cfi_startproc
 ; CHECK-THUMB-FP-ELIM:   push  {r7, lr}
 ; CHECK-THUMB-FP-ELIM:   .cfi_def_cfa_offset 8
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 7, -8
+; CHECK-THUMB-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-THUMB-FP-ELIM:   .cfi_offset r7, -8
 ; CHECK-THUMB-FP-ELIM:   pop   {r7, pc}
 ; CHECK-THUMB-FP-ELIM:   .cfi_endproc
 
@@ -371,10 +394,10 @@ entry:
 ; CHECK-THUMB-V7-FP:   .cfi_startproc
 ; CHECK-THUMB-V7-FP:   push   {r7, lr}
 ; CHECK-THUMB-V7-FP:   .cfi_def_cfa_offset 8
-; CHECK-THUMB-V7-FP:   .cfi_offset 14, -4
-; CHECK-THUMB-V7-FP:   .cfi_offset 7, -8
+; CHECK-THUMB-V7-FP:   .cfi_offset lr, -4
+; CHECK-THUMB-V7-FP:   .cfi_offset r7, -8
 ; CHECK-THUMB-V7-FP:   mov    r7, sp
-; CHECK-THUMB-V7-FP:   .cfi_def_cfa_register 7
+; CHECK-THUMB-V7-FP:   .cfi_def_cfa_register r7
 ; CHECK-THUMB-V7-FP:   pop    {r7, pc}
 ; CHECK-THUMB-V7-FP:   .cfi_endproc
 
@@ -382,8 +405,8 @@ entry:
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_startproc
 ; CHECK-THUMB-V7-FP-ELIM:   push.w  {r11, lr}
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_def_cfa_offset 8
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 11, -8
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset r11, -8
 ; CHECK-THUMB-V7-FP-ELIM:   pop.w   {r11, pc}
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_endproc
 
@@ -413,12 +436,12 @@ entry:
 ; CHECK-FP:   .cfi_startproc
 ; CHECK-FP:   push   {r4, r5, r11, lr}
 ; CHECK-FP:   .cfi_def_cfa_offset 16
-; CHECK-FP:   .cfi_offset 14, -4
-; CHECK-FP:   .cfi_offset 11, -8
-; CHECK-FP:   .cfi_offset 5, -12
-; CHECK-FP:   .cfi_offset 4, -16
+; CHECK-FP:   .cfi_offset lr, -4
+; CHECK-FP:   .cfi_offset r11, -8
+; CHECK-FP:   .cfi_offset r5, -12
+; CHECK-FP:   .cfi_offset r4, -16
 ; CHECK-FP:   add    r11, sp, #8
-; CHECK-FP:   .cfi_def_cfa 11, 8
+; CHECK-FP:   .cfi_def_cfa r11, 8
 ; CHECK-FP:   pop    {r4, r5, r11, lr}
 ; CHECK-FP:   mov    pc, lr
 ; CHECK-FP:   .cfi_endproc
@@ -427,10 +450,10 @@ entry:
 ; CHECK-FP-ELIM:   .cfi_startproc
 ; CHECK-FP-ELIM:   push  {r4, r5, r11, lr}
 ; CHECK-FP-ELIM:   .cfi_def_cfa_offset 16
-; CHECK-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-FP-ELIM:   .cfi_offset 11, -8
-; CHECK-FP-ELIM:   .cfi_offset 5, -12
-; CHECK-FP-ELIM:   .cfi_offset 4, -16
+; CHECK-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-FP-ELIM:   .cfi_offset r11, -8
+; CHECK-FP-ELIM:   .cfi_offset r5, -12
+; CHECK-FP-ELIM:   .cfi_offset r4, -16
 ; CHECK-FP-ELIM:   pop   {r4, r5, r11, lr}
 ; CHECK-FP-ELIM:   mov   pc, lr
 ; CHECK-FP-ELIM:   .cfi_endproc
@@ -439,12 +462,12 @@ entry:
 ; CHECK-V7-FP:   .cfi_startproc
 ; CHECK-V7-FP:   push   {r4, r5, r11, lr}
 ; CHECK-V7-FP:   .cfi_def_cfa_offset 16
-; CHECK-V7-FP:   .cfi_offset 14, -4
-; CHECK-V7-FP:   .cfi_offset 11, -8
-; CHECK-V7-FP:   .cfi_offset 5, -12
-; CHECK-V7-FP:   .cfi_offset 4, -16
+; CHECK-V7-FP:   .cfi_offset lr, -4
+; CHECK-V7-FP:   .cfi_offset r11, -8
+; CHECK-V7-FP:   .cfi_offset r5, -12
+; CHECK-V7-FP:   .cfi_offset r4, -16
 ; CHECK-V7-FP:   add    r11, sp, #8
-; CHECK-V7-FP:   .cfi_def_cfa 11, 8
+; CHECK-V7-FP:   .cfi_def_cfa r11, 8
 ; CHECK-V7-FP:   pop    {r4, r5, r11, pc}
 ; CHECK-V7-FP:   .cfi_endproc
 
@@ -452,10 +475,10 @@ entry:
 ; CHECK-V7-FP-ELIM:   .cfi_startproc
 ; CHECK-V7-FP-ELIM:   push  {r4, r5, r11, lr}
 ; CHECK-V7-FP-ELIM:   .cfi_def_cfa_offset 16
-; CHECK-V7-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-V7-FP-ELIM:   .cfi_offset 11, -8
-; CHECK-V7-FP-ELIM:   .cfi_offset 5, -12
-; CHECK-V7-FP-ELIM:   .cfi_offset 4, -16
+; CHECK-V7-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-V7-FP-ELIM:   .cfi_offset r11, -8
+; CHECK-V7-FP-ELIM:   .cfi_offset r5, -12
+; CHECK-V7-FP-ELIM:   .cfi_offset r4, -16
 ; CHECK-V7-FP-ELIM:   pop   {r4, r5, r11, pc}
 ; CHECK-V7-FP-ELIM:   .cfi_endproc
 
@@ -463,12 +486,12 @@ entry:
 ; CHECK-THUMB-FP:   .cfi_startproc
 ; CHECK-THUMB-FP:   push   {r4, r5, r7, lr}
 ; CHECK-THUMB-FP:   .cfi_def_cfa_offset 16
-; CHECK-THUMB-FP:   .cfi_offset 14, -4
-; CHECK-THUMB-FP:   .cfi_offset 7, -8
-; CHECK-THUMB-FP:   .cfi_offset 5, -12
-; CHECK-THUMB-FP:   .cfi_offset 4, -16
+; CHECK-THUMB-FP:   .cfi_offset lr, -4
+; CHECK-THUMB-FP:   .cfi_offset r7, -8
+; CHECK-THUMB-FP:   .cfi_offset r5, -12
+; CHECK-THUMB-FP:   .cfi_offset r4, -16
 ; CHECK-THUMB-FP:   add    r7, sp, #8
-; CHECK-THUMB-FP:   .cfi_def_cfa 7, 8
+; CHECK-THUMB-FP:   .cfi_def_cfa r7, 8
 ; CHECK-THUMB-FP:   pop    {r4, r5, r7, pc}
 ; CHECK-THUMB-FP:   .cfi_endproc
 
@@ -476,10 +499,10 @@ entry:
 ; CHECK-THUMB-FP-ELIM:   .cfi_startproc
 ; CHECK-THUMB-FP-ELIM:   push  {r4, r5, r7, lr}
 ; CHECK-THUMB-FP-ELIM:   .cfi_def_cfa_offset 16
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 7, -8
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 5, -12
-; CHECK-THUMB-FP-ELIM:   .cfi_offset 4, -16
+; CHECK-THUMB-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-THUMB-FP-ELIM:   .cfi_offset r7, -8
+; CHECK-THUMB-FP-ELIM:   .cfi_offset r5, -12
+; CHECK-THUMB-FP-ELIM:   .cfi_offset r4, -16
 ; CHECK-THUMB-FP-ELIM:   pop   {r4, r5, r7, pc}
 ; CHECK-THUMB-FP-ELIM:   .cfi_endproc
 
@@ -487,12 +510,12 @@ entry:
 ; CHECK-THUMB-V7-FP:   .cfi_startproc
 ; CHECK-THUMB-V7-FP:   push   {r4, r5, r7, lr}
 ; CHECK-THUMB-V7-FP:   .cfi_def_cfa_offset 16
-; CHECK-THUMB-V7-FP:   .cfi_offset 14, -4
-; CHECK-THUMB-V7-FP:   .cfi_offset 7, -8
-; CHECK-THUMB-V7-FP:   .cfi_offset 5, -12
-; CHECK-THUMB-V7-FP:   .cfi_offset 4, -16
+; CHECK-THUMB-V7-FP:   .cfi_offset lr, -4
+; CHECK-THUMB-V7-FP:   .cfi_offset r7, -8
+; CHECK-THUMB-V7-FP:   .cfi_offset r5, -12
+; CHECK-THUMB-V7-FP:   .cfi_offset r4, -16
 ; CHECK-THUMB-V7-FP:   add    r7, sp, #8
-; CHECK-THUMB-V7-FP:   .cfi_def_cfa 7, 8
+; CHECK-THUMB-V7-FP:   .cfi_def_cfa r7, 8
 ; CHECK-THUMB-V7-FP:   pop    {r4, r5, r7, pc}
 ; CHECK-THUMB-V7-FP:   .cfi_endproc
 
@@ -500,10 +523,10 @@ entry:
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_startproc
 ; CHECK-THUMB-V7-FP-ELIM:   push.w  {r4, r5, r11, lr}
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_def_cfa_offset 16
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 14, -4
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 11, -8
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 5, -12
-; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset 4, -16
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset lr, -4
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset r11, -8
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset r5, -12
+; CHECK-THUMB-V7-FP-ELIM:   .cfi_offset r4, -16
 ; CHECK-THUMB-V7-FP-ELIM:   pop.w   {r4, r5, r11, pc}
 ; CHECK-THUMB-V7-FP-ELIM:   .cfi_endproc