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