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@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits