diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-10-22 20:50:25 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-10-22 20:50:25 +0000 |
commit | 8ee16c7b661ce0b1c1d33db07b57ad2c88b5a8b2 (patch) | |
tree | b95fb31b54de4fdd2efbf5d74b823d47961976f1 /lib/MC | |
parent | a703fb9e5e86ed29f7334736f7c085ec81a2006f (diff) |
[ms-inline asm] Don't rewrite out parts of an inline-asm skipped by .if 0 and friends.
It's unnecessary and makes the generated assembly less faithful to the original source.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166440 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/MCParser/AsmParser.cpp | 25 |
1 files changed, 1 insertions, 24 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index f22b2754f6..2f63fd4663 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -3579,8 +3579,7 @@ enum AsmRewriteKind { AOK_Imm, AOK_Input, AOK_Output, - AOK_SizeDirective, - AOK_Skip + AOK_SizeDirective }; struct AsmRewrite { @@ -3620,24 +3619,9 @@ bool AsmParser::ParseMSInlineAsm(void *AsmLoc, std::string &AsmString, // Clear the opcode. setOpcode(~0x0); - // Save the conditional ignore state of the parser prior to parsing the statement. - bool PreParseCondStateIgnore = TheCondState.Ignore; - - // Save the starting point of this statement in case we need to skip it. - SMLoc Start = getLexer().getLoc(); - if (ParseStatement()) return true; - // If PreParseCondStateIgnore is false, but TheCondState.Ignore is true, then we - // just parsed a directive that changed the state to ignore. Don't skip - // emitting this directive. - if (PreParseCondStateIgnore && TheCondState.Ignore) { - unsigned Len = getLexer().getLoc().getPointer() - Start.getPointer(); - AsmStrRewrites.push_back(AsmRewrite(AOK_Skip, Start, Len)); - continue; - } - if (isInstruction()) { const MCInstrDesc &Desc = MII->get(getOpcode()); @@ -3743,15 +3727,8 @@ bool AsmParser::ParseMSInlineAsm(void *AsmLoc, std::string &AsmString, OS << StringRef(Start, Loc - Start); PrevKind = Kind; - // Skip the original expression. - if (Kind == AOK_Skip) { - Start = Loc + (*I).Len; - continue; - } - // Rewrite expressions in $N notation. switch (Kind) { - default: break; case AOK_Imm: OS << Twine("$$") + StringRef(Loc, (*I).Len); break; |