diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp --- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp @@ -1170,10 +1170,12 @@ break; case ARM::ADDri: case ARM::t2ADDri: + case ARM::t2ADDri12: Offset = -MI->getOperand(2).getImm(); break; case ARM::SUBri: case ARM::t2SUBri: + case ARM::t2SUBri12: Offset = MI->getOperand(2).getImm(); break; case ARM::tSUBspi: diff --git a/llvm/test/CodeGen/Thumb2/emit-unwinding.ll b/llvm/test/CodeGen/Thumb2/emit-unwinding.ll --- a/llvm/test/CodeGen/Thumb2/emit-unwinding.ll +++ b/llvm/test/CodeGen/Thumb2/emit-unwinding.ll @@ -9,3 +9,18 @@ } declare void @foo2() + +; CHECK: _bar: +; CHECK-NEXT: .cfi_startproc +; CHECK-NEXT: @ %bb.0: +; CHECK-NEXT: subw sp, sp, #3800 +; CHECK-NEXT: .cfi_def_cfa_offset 3800 +; CHECK-NEXT: addw sp, sp, #3800 +; CHECK-NEXT: bx lr +; CHECK-NEXT: .cfi_endproc + +define void @bar() { + %a1 = alloca [3800 x i8], align 4 + %p = getelementptr inbounds [3800 x i8], [3800 x i8]* %a1, i32 0, i32 0 + ret void +}