Fix PR18345: ldr= pseudo instruction produces incorrect code when using in inline...
authorDavid Peixotto <dpeixott@codeaurora.org>
Tue, 4 Feb 2014 17:22:40 +0000 (17:22 +0000)
committerDavid Peixotto <dpeixott@codeaurora.org>
Tue, 4 Feb 2014 17:22:40 +0000 (17:22 +0000)
commitb92cca222898d87bbc764fa22e805adb04ef7f13
treef094e401b602d87e38489c8cb984437ce983fb4f
parent7d9ed1cac54f5ed4274ae2735bd06e1017a83a9b
Fix PR18345: ldr= pseudo instruction produces incorrect code when using in inline assembly

This patch fixes the ldr-pseudo implementation to work when used in
inline assembly.  The fix is to move arm assembler constant pools
from the ARMAsmParser class to the ARMTargetStreamer class.

Previously we kept the assembler generated constant pools in the
ARMAsmParser object. This does not work for inline assembly because
a new parser object is created for each blob of inline assembly.
This patch moves the constant pools to the ARMTargetStreamer class
so that the constant pool will remain alive for the entire code
generation process.

An ARMTargetStreamer class is now required for the arm backend.
There was no existing implementation for MachO, only Asm and ELF.
Instead of creating an empty MachO subclass, we decided to make the
ARMTargetStreamer a non-abstract class and provide default
(llvm_unreachable) implementations for the non constant-pool related
methods.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200777 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/MC/MCStreamer.h
include/llvm/MC/MCTargetAsmParser.h
lib/MC/MCParser/AsmParser.cpp
lib/Target/ARM/AsmParser/ARMAsmParser.cpp
lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp
lib/Target/ARM/MCTargetDesc/ARMTargetStreamer.cpp [new file with mode: 0644]
lib/Target/ARM/MCTargetDesc/CMakeLists.txt
test/CodeGen/ARM/inlineasm-ldr-pseudo.ll [new file with mode: 0644]