[llvm-commits] [llvm] r46387 - in /llvm/trunk: lib/Transforms/Scalar/SimplifyCFG.cpp test/CFrontend/2008-01-25-EmptyFunction.c

Bill Wendling isanbard at gmail.com
Fri Jan 25 23:01:37 PST 2008


Okay.

On Jan 25, 2008, at 7:26 PM, Chris Lattner wrote:

> On Jan 25, 2008, at 5:43 PM, Bill Wendling wrote:
>> URL: http://llvm.org/viewvc/llvm-project?rev=46387&view=rev
>> Log:
>> If we have a function like this:
>>
>> This is bad on some platforms (like PPC) because it will generate
>> the label for
>> the function but no body. The label could end up being associated
>> with some
>> non-code related stuff, like a section. This places a "trap"
>> instruction if the
>> SimplifyCFG pass removed all code from the function leaving only one
>> "unreachable" instruction.
>
> This is a darwin-specific hack, so it needs to be conditionalized on
> the target.  Second, this should only be done if there are zero
> machineinstrs, not zero llvm instrs.
>
>>   // If there are unreachable blocks in the CFG...
>> -  if (Reachable.size() == F.size())
>> +  if (Reachable.size() == F.size()) {
>> +    if (F.size() == 1) {
>
> F.size() is linear time, so you shouldn't call it here if you don't
> need it.  Why are you doing this in the Reachable.size() == F.size()
> case?
>
>> +      // If the function has only one block with an "unreachable"
>> instruction,
>> +      // then we should create *some* code for it. Issue a "trap"
>> instead.
>> +      BasicBlock &BB = F.front();
>> +
>> +      if (BB.size() == 1 && dyn_cast<UnreachableInst>(&BB.front()))
>
> Only use dyn_cast if you want the result: use isa in this case.
> BB.size() is also linear time.
>
> Finally, the testcase you added was for llvm-gcc, this is a codegen
> thing so it should be in test/CodeGen/* and should only run llc.
>
> -Chris
>
> _______________________________________________
> 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