[llvm] r230775 - Change the fast-isel-abort option from bool to int to enable "levels"
Mehdi Amini
mehdi.amini at apple.com
Tue Mar 3 18:01:56 PST 2015
> On Mar 3, 2015, at 5:16 AM, Andrea Di Biagio <andrea.dibiagio at gmail.com> wrote:
>
> Hi Mehdi,
>
> At the moment, if fast-isel aborts and flag fast-isel-abort is set, we
> end up calling 'llvm_unreachable'.
> Wouldn't it be better to use 'report_fatal_error' instead of calling
> 'llvm_unreachable’?
That sounds reasonable.
r231201
Thanks,
Mehdi
>
> Example:
>
>> <snip>...
>> const Function &Fn = *mf.getFunction();
>> MF = &mf;
>> @@ -1182,7 +1181,7 @@ void SelectionDAGISel::SelectAllBasicBlo
>> if (!FastIS->lowerArguments()) {
>> // Fast isel failed to lower these arguments
>> ++NumFastIselFailLowerArguments;
>> - if (EnableFastISelAbortArgs)
>> + if (EnableFastISelAbort > 1)
>> llvm_unreachable("FastISel didn't lower all arguments");
>
>
> If we use 'report_fatal_error', then we avoid to get an 'UNREACHABLE
> executed' message if EnableFastISelAbort is > 1.
>
>>
>> // Use SelectionDAG argument lowering
>> @@ -1252,6 +1251,10 @@ void SelectionDAGISel::SelectAllBasicBlo
>> dbgs() << "FastISel missed call: ";
>> Inst->dump();
>> }
>> + if (EnableFastISelAbort > 2)
>> + // FastISel selector couldn't handle something and bailed.
>> + // For the purpose of debugging, just abort.
>> + llvm_unreachable("FastISel didn't select the entire block");
>
> Same here. Wouldn't it be better to use 'report_fatal_error' ?
>
>>
>> if (!Inst->getType()->isVoidTy() && !Inst->use_empty()) {
>> unsigned &R = FuncInfo->ValueMap[Inst];
>> @@ -1279,24 +1282,21 @@ void SelectionDAGISel::SelectAllBasicBlo
>> continue;
>> }
>>
>> - if (isa<TerminatorInst>(Inst) && !isa<BranchInst>(Inst)) {
>> - // Don't abort, and use a different message for terminator misses.
>> - NumFastIselFailures += NumFastIselRemaining;
>> - if (EnableFastISelVerbose || EnableFastISelAbort) {
>> + if (EnableFastISelVerbose || EnableFastISelAbort) {
>> + if (isa<TerminatorInst>(Inst)) {
>> + // Use a different message for terminator misses.
>> dbgs() << "FastISel missed terminator: ";
>> - Inst->dump();
>> - }
>> - } else {
>> - NumFastIselFailures += NumFastIselRemaining;
>> - if (EnableFastISelVerbose || EnableFastISelAbort) {
>> + } else {
>> dbgs() << "FastISel miss: ";
>> - Inst->dump();
>> }
>> - if (EnableFastISelAbort)
>> - // The "fast" selector couldn't handle something and bailed.
>> - // For the purpose of debugging, just abort.
>> - llvm_unreachable("FastISel didn't select the entire block");
>> + Inst->dump();
>> }
>> + if (EnableFastISelAbort > 2)
>> + // FastISel selector couldn't handle something and bailed.
>> + // For the purpose of debugging, just abort.
>> + llvm_unreachable("FastISel didn't select the entire block");
>> +
>> + NumFastIselFailures += NumFastIselRemaining;
>> break;
>> }
>
> Same here.
>
> I hope this makes sense.
>
> Cheers,
> Andrea
More information about the llvm-commits
mailing list