aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp12
-rw-r--r--tools/llc/llc.cpp9
2 files changed, 19 insertions, 2 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp b/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
index d5608c3b19..1dea82a367 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
@@ -70,6 +70,11 @@ static void srcMgrDiagHandler(const SMDiagnostic &Diag, void *diagInfo) {
/// EmitInlineAsm - Emit a blob of inline asm to the output streamer.
void AsmPrinter::EmitInlineAsm(StringRef Str, const MDNode *LocMDNode,
InlineAsm::AsmDialect Dialect) const {
+#if defined(__native_client__)
+ // Prune the generic AsmParser bits from the in-browser translator.
+ // This is normally used to parse inline asm (see createMCAsmParser below).
+ return;
+#else
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.
@@ -135,6 +140,7 @@ void AsmPrinter::EmitInlineAsm(StringRef Str, const MDNode *LocMDNode,
/*NoFinalize*/ true);
if (Res && !HasDiagHandler)
report_fatal_error("Error parsing inline asm\n");
+#endif // defined(__native_client__)
}
static void EmitMSInlineAsmStr(const char *AsmStr, const MachineInstr *MI,
@@ -411,6 +417,10 @@ static void EmitGCCInlineAsmStr(const char *AsmStr, const MachineInstr *MI,
/// EmitInlineAsm - This method formats and emits the specified machine
/// instruction that is an inline asm.
void AsmPrinter::EmitInlineAsm(const MachineInstr *MI) const {
+#if defined(__native__client__)
+ // See above LOCALMOD for pruning generic AsmParsing.
+ return;
+#else
assert(MI->isInlineAsm() && "printInlineAsm only works on inline asms");
// Count the number of register definitions to find the asm string.
@@ -480,6 +490,7 @@ void AsmPrinter::EmitInlineAsm(const MachineInstr *MI) const {
if (OutStreamer.hasRawTextSupport())
OutStreamer.EmitRawText(Twine("\t")+MAI->getCommentString()+
MAI->getInlineAsmEnd());
+#endif // __native_client__
}
@@ -550,4 +561,3 @@ bool AsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
// Target doesn't support this yet!
return true;
}
-
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index c576b212b7..1d7295c303 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -276,7 +276,14 @@ int llc_main(int argc, char **argv) {
InitializeAllTargets();
InitializeAllTargetMCs();
InitializeAllAsmPrinters();
- InitializeAllAsmParsers();
+// @LOCALMOD-BEGIN
+// Prune asm parsing from sandboxed translator.
+// Do not prune "AsmPrinters" because that includes
+// the direct object emission.
+ #if !defined(__native_client__)
+ InitializeAllAsmParsers();
+#endif
+// @LOCALMOD-END
// Initialize codegen and IR passes used by llc so that the -print-after,
// -print-before, and -stop-after options work.