diff options
-rw-r--r-- | lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp | 12 | ||||
-rw-r--r-- | tools/llc/llc.cpp | 9 |
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. |