[llvm-commits] [llvm] r168829 - /llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp

Rafael EspĂ­ndola rafael.espindola at gmail.com
Fri Nov 30 06:35:36 PST 2012


Why wouldn't "opt -codegenprepare" work?

On 29 November 2012 13:54, Bill Wendling <isanbard at gmail.com> wrote:
> There's no testcase that would work here. CGP is run way too late in the process, and dead blocks aren't passed into CodeGen. This is a pre-patch for future work, which should land soon.
>
> -bw
>
> On Nov 29, 2012, at 8:53 AM, Rafael EspĂ­ndola <rafael.espindola at gmail.com> wrote:
>
>> testcase?
>>
>> On 28 November 2012 18:23, Bill Wendling <isanbard at gmail.com> wrote:
>>> Author: void
>>> Date: Wed Nov 28 17:23:48 2012
>>> New Revision: 168829
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=168829&view=rev
>>> Log:
>>> When we delete a dead basic block, see if any of its successors are dead and
>>> delete those as well.
>>>
>>> Modified:
>>>    llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp
>>>
>>> Modified: llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp?rev=168829&r1=168828&r2=168829&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp (original)
>>> +++ llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp Wed Nov 28 17:23:48 2012
>>> @@ -194,9 +194,19 @@
>>>           WorkList.insert(*II);
>>>     }
>>>
>>> -    for (SmallPtrSet<BasicBlock*, 8>::iterator
>>> -           I = WorkList.begin(), E = WorkList.end(); I != E; ++I)
>>> -      DeleteDeadBlock(*I);
>>> +    // Delete the dead blocks and any of their dead successors.
>>> +    while (!WorkList.empty()) {
>>> +      BasicBlock *BB = *WorkList.begin();
>>> +      WorkList.erase(BB);
>>> +      SmallVector<BasicBlock*, 2> Successors(succ_begin(BB), succ_end(BB));
>>> +
>>> +      DeleteDeadBlock(BB);
>>> +
>>> +      for (SmallVectorImpl<BasicBlock*>::iterator
>>> +             II = Successors.begin(), IE = Successors.end(); II != IE; ++II)
>>> +        if (pred_begin(*II) == pred_end(*II))
>>> +          WorkList.insert(*II);
>>> +    }
>>>
>>>     // Merge pairs of basic blocks with unconditional branches, connected by
>>>     // a single edge.
>>>
>>>
>>> _______________________________________________
>>> 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