[ms-inline asm] Don't rewrite out parts of an inline-asm skipped by .if 0 and friends.
authorEli Friedman <eli.friedman@gmail.com>
Mon, 22 Oct 2012 20:50:25 +0000 (20:50 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Mon, 22 Oct 2012 20:50:25 +0000 (20:50 +0000)
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

lib/MC/MCParser/AsmParser.cpp

index f22b2754f687800aa17b02d2acaa7e716eac5145..2f63fd46639d73048243d0cf09b86a5a48ec9548 100644 (file)
@@ -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;