MC: Cleanup parseMSInlineAsm

Utilize range based for-loops to simplify some code.
Use insert() instead of a loop for simplicity/efficiency.

No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211486 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer 2014-06-23 02:17:16 +00:00
parent 7a3698ecc9
commit 139f2f1565

View File

@ -4545,9 +4545,9 @@ bool AsmParser::parseMSInlineAsm(
}
// Consider implicit defs to be clobbers. Think of cpuid and push.
const uint16_t *ImpDefs = Desc.getImplicitDefs();
for (unsigned I = 0, E = Desc.getNumImplicitDefs(); I != E; ++I)
ClobberRegs.push_back(ImpDefs[I]);
ArrayRef<uint16_t> ImpDefs(Desc.getImplicitDefs(),
Desc.getNumImplicitDefs());
ClobberRegs.insert(ClobberRegs.end(), ImpDefs.begin(), ImpDefs.end());
}
// Set the number of Outputs and Inputs.
@ -4585,24 +4585,21 @@ bool AsmParser::parseMSInlineAsm(
const char *AsmStart = SrcMgr.getMemoryBuffer(0)->getBufferStart();
const char *AsmEnd = SrcMgr.getMemoryBuffer(0)->getBufferEnd();
array_pod_sort(AsmStrRewrites.begin(), AsmStrRewrites.end(), rewritesSort);
for (SmallVectorImpl<AsmRewrite>::iterator I = AsmStrRewrites.begin(),
E = AsmStrRewrites.end();
I != E; ++I) {
AsmRewriteKind Kind = (*I).Kind;
for (const AsmRewrite &AR : AsmStrRewrites) {
AsmRewriteKind Kind = AR.Kind;
if (Kind == AOK_Delete)
continue;
const char *Loc = (*I).Loc.getPointer();
const char *Loc = AR.Loc.getPointer();
assert(Loc >= AsmStart && "Expected Loc to be at or after Start!");
// Emit everything up to the immediate/expression.
unsigned Len = Loc - AsmStart;
if (Len)
if (unsigned Len = Loc - AsmStart)
OS << StringRef(AsmStart, Len);
// Skip the original expression.
if (Kind == AOK_Skip) {
AsmStart = Loc + (*I).Len;
AsmStart = Loc + AR.Len;
continue;
}
@ -4612,7 +4609,7 @@ bool AsmParser::parseMSInlineAsm(
default:
break;
case AOK_Imm:
OS << "$$" << (*I).Val;
OS << "$$" << AR.Val;
break;
case AOK_ImmPrefix:
OS << "$$";
@ -4624,7 +4621,7 @@ bool AsmParser::parseMSInlineAsm(
OS << '$' << OutputIdx++;
break;
case AOK_SizeDirective:
switch ((*I).Val) {
switch (AR.Val) {
default: break;
case 8: OS << "byte ptr "; break;
case 16: OS << "word ptr "; break;
@ -4639,7 +4636,7 @@ bool AsmParser::parseMSInlineAsm(
OS << ".byte";
break;
case AOK_Align: {
unsigned Val = (*I).Val;
unsigned Val = AR.Val;
OS << ".align " << Val;
// Skip the original immediate.
@ -4652,12 +4649,12 @@ bool AsmParser::parseMSInlineAsm(
OS.flush();
if (AsmStringIR.back() != '.')
OS << '.';
OS << (*I).Val;
OS << AR.Val;
break;
}
// Skip the original expression.
AsmStart = Loc + (*I).Len + AdditionalSkip;
AsmStart = Loc + AR.Len + AdditionalSkip;
}
// Emit the remainder of the asm string.