[llvm] r175317 - c[ms-inline asm] It's possible to have a SizeDirective rewrite and an
Chad Rosier
mcrosier at apple.com
Mon Feb 18 12:30:30 PST 2013
On Feb 15, 2013, at 11:33 PM, Timur Iskhodzhanov <timurrrr at google.com> wrote:
> Do you think you should also add a small repro test for this case?
I don't think it's necessary and would very likely be fragile. The llvm_unreachable at the end of the sort function should ensure the sort is forever stable/deterministic.
Chad
> It looked like the assertion didn't fire on the existing set of tests.
>
> 2013/2/16 Chad Rosier <mcrosier at apple.com>:
>> Author: mcrosier
>> Date: Fri Feb 15 16:54:16 2013
>> New Revision: 175317
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=175317&view=rev
>> Log:
>> c[ms-inline asm] It's possible to have a SizeDirective rewrite and an
>> Input/Output rewrite to the same location. Make sure the SizeDirective rewrite
>> is performed first. This also ensure the sort algorithm is stable.
>>
>> Modified:
>> llvm/trunk/lib/MC/MCParser/AsmParser.cpp
>>
>> Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=175317&r1=175316&r2=175317&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
>> +++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Fri Feb 15 16:54:16 2013
>> @@ -4041,7 +4041,21 @@ static int RewritesSort(const void *A, c
>> return -1;
>> if (AsmRewriteB->Loc.getPointer() < AsmRewriteA->Loc.getPointer())
>> return 1;
>> - return 0;
>> +
>> + // It's possible to have a SizeDirective rewrite and an Input/Output rewrite
>> + // to the same location. Make sure the SizeDirective rewrite is performed
>> + // first. This also ensure the sort algorithm is stable.
>> + if (AsmRewriteA->Kind == AOK_SizeDirective) {
>> + assert ((AsmRewriteB->Kind == AOK_Input || AsmRewriteB->Kind == AOK_Output) &&
>> + "Expected an Input/Output rewrite!");
>> + return -1;
>> + }
>> + if (AsmRewriteB->Kind == AOK_SizeDirective) {
>> + assert ((AsmRewriteA->Kind == AOK_Input || AsmRewriteA->Kind == AOK_Output) &&
>> + "Expected an Input/Output rewrite!");
>> + return 1;
>> + }
>> + llvm_unreachable ("Unstable rewrite sort.");
>> }
>>
>> bool
>> @@ -4174,6 +4188,7 @@ AsmParser::ParseMSInlineAsm(void *AsmLoc
>> E = AsmStrRewrites.end();
>> I != E; ++I) {
>> const char *Loc = (*I).Loc.getPointer();
>> + assert(Loc >= Start && "Expected Loc to be after Start!");
>>
>> unsigned AdditionalSkip = 0;
>> AsmRewriteKind Kind = (*I).Kind;
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list