mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-29 07:53:33 +00:00
[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
This commit is contained in:
parent
a703fb9e5e
commit
8ee16c7b66
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user