[ms-inline asm] Use the asm dialect from the MI to set the parser dialect.
llvm-svn: 163273
This commit is contained in:
parent
b82c0ec5a6
commit
f24ae7b084
|
@ -17,6 +17,7 @@
|
||||||
#define LLVM_CODEGEN_ASMPRINTER_H
|
#define LLVM_CODEGEN_ASMPRINTER_H
|
||||||
|
|
||||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||||
|
#include "llvm/InlineAsm.h"
|
||||||
#include "llvm/Support/DataTypes.h"
|
#include "llvm/Support/DataTypes.h"
|
||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
|
|
||||||
|
@ -460,7 +461,8 @@ namespace llvm {
|
||||||
mutable unsigned SetCounter;
|
mutable unsigned SetCounter;
|
||||||
|
|
||||||
/// EmitInlineAsm - Emit a blob of inline asm to the output streamer.
|
/// EmitInlineAsm - Emit a blob of inline asm to the output streamer.
|
||||||
void EmitInlineAsm(StringRef Str, const MDNode *LocMDNode = 0) const;
|
void EmitInlineAsm(StringRef Str, const MDNode *LocMDNode = 0,
|
||||||
|
InlineAsm::AsmDialect AsmDialect = InlineAsm::AD_ATT) const;
|
||||||
|
|
||||||
/// EmitInlineAsm - This method formats and emits the specified machine
|
/// EmitInlineAsm - This method formats and emits the specified machine
|
||||||
/// instruction that is an inline asm.
|
/// instruction that is an inline asm.
|
||||||
|
|
|
@ -68,7 +68,8 @@ static void SrcMgrDiagHandler(const SMDiagnostic &Diag, void *diagInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitInlineAsm - Emit a blob of inline asm to the output streamer.
|
/// EmitInlineAsm - Emit a blob of inline asm to the output streamer.
|
||||||
void AsmPrinter::EmitInlineAsm(StringRef Str, const MDNode *LocMDNode) const {
|
void AsmPrinter::EmitInlineAsm(StringRef Str, const MDNode *LocMDNode,
|
||||||
|
InlineAsm::AsmDialect Dialect) const {
|
||||||
assert(!Str.empty() && "Can't emit empty inline asm block");
|
assert(!Str.empty() && "Can't emit empty inline asm block");
|
||||||
|
|
||||||
// Remember if the buffer is nul terminated or not so we can avoid a copy.
|
// Remember if the buffer is nul terminated or not so we can avoid a copy.
|
||||||
|
@ -126,6 +127,7 @@ void AsmPrinter::EmitInlineAsm(StringRef Str, const MDNode *LocMDNode) const {
|
||||||
if (!TAP)
|
if (!TAP)
|
||||||
report_fatal_error("Inline asm not supported by this streamer because"
|
report_fatal_error("Inline asm not supported by this streamer because"
|
||||||
" we don't have an asm parser for this target\n");
|
" we don't have an asm parser for this target\n");
|
||||||
|
Parser->setAssemblerDialect(Dialect);
|
||||||
Parser->setTargetParser(*TAP.get());
|
Parser->setTargetParser(*TAP.get());
|
||||||
|
|
||||||
// Don't implicitly switch to the text section before the asm.
|
// Don't implicitly switch to the text section before the asm.
|
||||||
|
@ -363,7 +365,7 @@ void AsmPrinter::EmitInlineAsm(const MachineInstr *MI) const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OS << '\n' << (char)0; // null terminate string.
|
OS << '\n' << (char)0; // null terminate string.
|
||||||
EmitInlineAsm(OS.str(), LocMD);
|
EmitInlineAsm(OS.str(), LocMD, MI->getInlineAsmDialect());
|
||||||
|
|
||||||
// Emit the #NOAPP end marker. This has to happen even if verbose-asm isn't
|
// Emit the #NOAPP end marker. This has to happen even if verbose-asm isn't
|
||||||
// enabled, so we use EmitRawText.
|
// enabled, so we use EmitRawText.
|
||||||
|
|
Loading…
Reference in New Issue