diff --git a/lib/Target/ARM/ARMAsmPrinter.cpp b/lib/Target/ARM/ARMAsmPrinter.cpp index 28d2610c390..9ad808c00e7 100644 --- a/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/ARMAsmPrinter.cpp @@ -478,6 +478,9 @@ void ARMAsmPrinter::EmitStartOfAsmFile(Module &M) { // Emit ARM Build Attributes if (Subtarget->isTargetELF()) emitAttributes(); + + if (!M.getModuleInlineAsm().empty() && Subtarget->isThumb()) + OutStreamer.EmitAssemblerFlag(MCAF_Code16); } static void diff --git a/test/CodeGen/ARM/inlineasm-global.ll b/test/CodeGen/ARM/inlineasm-global.ll new file mode 100644 index 00000000000..d1a15e393a1 --- /dev/null +++ b/test/CodeGen/ARM/inlineasm-global.ll @@ -0,0 +1,13 @@ +; RUN: llc -march thumb -no-integrated-as %s -o - | FileCheck %s --check-prefix=THUMB +; RUN: llc -march arm -no-integrated-as %s -o - | FileCheck %s --check-prefix=ARM + +; In thumb mode, emit ".code 16" before global inline-asm instructions. + +; THUMB: .code 16 +; THUMB: stmib +; THUMB: .code 16 + +; ARM-NOT: .code 16 +; ARM: stmib + +module asm "stmib sp, {r0-r14};"