<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 29, 2016 at 4:32 PM Reid Kleckner via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rnk<br class="gmail_msg">
Date: Thu Dec 29 18:21:38 2016<br class="gmail_msg">
New Revision: 290731<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=290731&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=290731&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
Simplify FunctionLoweringInfo.cpp with range for loops<br class="gmail_msg">
<br class="gmail_msg">
I'm preparing to add some pattern matching code here, so simplify the<br class="gmail_msg">
code before I do. NFC<br class="gmail_msg">
<br class="gmail_msg">
Modified:<br class="gmail_msg">
llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp?rev=290731&r1=290730&r2=290731&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp?rev=290731&r1=290730&r2=290731&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp Thu Dec 29 18:21:38 2016<br class="gmail_msg">
@@ -125,11 +125,9 @@ void FunctionLoweringInfo::set(const Fun<br class="gmail_msg">
// Initialize the mapping of values to registers. This is only set up for<br class="gmail_msg">
// instruction values that are used outside of the block that defines<br class="gmail_msg">
// them.<br class="gmail_msg">
- Function::const_iterator BB = Fn->begin(), EB = Fn->end();<br class="gmail_msg">
- for (; BB != EB; ++BB)<br class="gmail_msg">
- for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();<br class="gmail_msg">
- I != E; ++I) {<br class="gmail_msg">
- if (const AllocaInst *AI = dyn_cast<AllocaInst>(I)) {<br class="gmail_msg">
+ for (const BasicBlock &BB : *Fn) {<br class="gmail_msg">
+ for (const Instruction &I : BB) {<br class="gmail_msg"></blockquote><div><br></div><div>I think there's a:<br><br> for (const Instruction &I : Fn->instructions())<br><br>If that would be simpler/more legible.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+ if (const AllocaInst *AI = dyn_cast<AllocaInst>(&I)) {<br class="gmail_msg">
Type *Ty = AI->getAllocatedType();<br class="gmail_msg">
unsigned Align =<br class="gmail_msg">
std::max((unsigned)MF->getDataLayout().getPrefTypeAlignment(Ty),<br class="gmail_msg">
@@ -138,7 +136,7 @@ void FunctionLoweringInfo::set(const Fun<br class="gmail_msg">
// Static allocas can be folded into the initial stack frame<br class="gmail_msg">
// adjustment. For targets that don't realign the stack, don't<br class="gmail_msg">
// do this if there is an extra alignment requirement.<br class="gmail_msg">
- if (AI->isStaticAlloca() &&<br class="gmail_msg">
+ if (AI->isStaticAlloca() &&<br class="gmail_msg">
(TFI->isStackRealignable() || (Align <= StackAlign))) {<br class="gmail_msg">
const ConstantInt *CUI = cast<ConstantInt>(AI->getArraySize());<br class="gmail_msg">
uint64_t TySize = MF->getDataLayout().getTypeAllocSize(Ty);<br class="gmail_msg">
@@ -175,14 +173,13 @@ void FunctionLoweringInfo::set(const Fun<br class="gmail_msg">
<br class="gmail_msg">
// Look for inline asm that clobbers the SP register.<br class="gmail_msg">
if (isa<CallInst>(I) || isa<InvokeInst>(I)) {<br class="gmail_msg">
- ImmutableCallSite CS(&*I);<br class="gmail_msg">
+ ImmutableCallSite CS(&I);<br class="gmail_msg">
if (isa<InlineAsm>(CS.getCalledValue())) {<br class="gmail_msg">
unsigned SP = TLI->getStackPointerRegisterToSaveRestore();<br class="gmail_msg">
const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();<br class="gmail_msg">
std::vector<TargetLowering::AsmOperandInfo> Ops =<br class="gmail_msg">
TLI->ParseConstraints(Fn->getParent()->getDataLayout(), TRI, CS);<br class="gmail_msg">
- for (size_t I = 0, E = Ops.size(); I != E; ++I) {<br class="gmail_msg">
- TargetLowering::AsmOperandInfo &Op = Ops[I];<br class="gmail_msg">
+ for (TargetLowering::AsmOperandInfo &Op : Ops) {<br class="gmail_msg">
if (Op.Type == InlineAsm::isClobber) {<br class="gmail_msg">
// Clobbers don't have SDValue operands, hence SDValue().<br class="gmail_msg">
TLI->ComputeConstraintToUse(Op, SDValue(), DAG);<br class="gmail_msg">
@@ -199,28 +196,28 @@ void FunctionLoweringInfo::set(const Fun<br class="gmail_msg">
// Look for calls to the @llvm.va_start intrinsic. We can omit some<br class="gmail_msg">
// prologue boilerplate for variadic functions that don't examine their<br class="gmail_msg">
// arguments.<br class="gmail_msg">
- if (const auto *II = dyn_cast<IntrinsicInst>(I)) {<br class="gmail_msg">
+ if (const auto *II = dyn_cast<IntrinsicInst>(&I)) {<br class="gmail_msg">
if (II->getIntrinsicID() == Intrinsic::vastart)<br class="gmail_msg">
MF->getFrameInfo().setHasVAStart(true);<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
// If we have a musttail call in a variadic function, we need to ensure we<br class="gmail_msg">
// forward implicit register parameters.<br class="gmail_msg">
- if (const auto *CI = dyn_cast<CallInst>(I)) {<br class="gmail_msg">
+ if (const auto *CI = dyn_cast<CallInst>(&I)) {<br class="gmail_msg">
if (CI->isMustTailCall() && Fn->isVarArg())<br class="gmail_msg">
MF->getFrameInfo().setHasMustTailInVarArgFunc(true);<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
// Mark values used outside their block as exported, by allocating<br class="gmail_msg">
// a virtual register for them.<br class="gmail_msg">
- if (isUsedOutsideOfDefiningBlock(&*I))<br class="gmail_msg">
- if (!isa<AllocaInst>(I) || !StaticAllocaMap.count(cast<AllocaInst>(I)))<br class="gmail_msg">
- InitializeRegForValue(&*I);<br class="gmail_msg">
+ if (isUsedOutsideOfDefiningBlock(&I))<br class="gmail_msg">
+ if (!isa<AllocaInst>(I) || !StaticAllocaMap.count(cast<AllocaInst>(&I)))<br class="gmail_msg">
+ InitializeRegForValue(&I);<br class="gmail_msg">
<br class="gmail_msg">
// Collect llvm.dbg.declare information. This is done now instead of<br class="gmail_msg">
// during the initial isel pass through the IR so that it is done<br class="gmail_msg">
// in a predictable order.<br class="gmail_msg">
- if (const DbgDeclareInst *DI = dyn_cast<DbgDeclareInst>(I)) {<br class="gmail_msg">
+ if (const DbgDeclareInst *DI = dyn_cast<DbgDeclareInst>(&I)) {<br class="gmail_msg">
assert(DI->getVariable() && "Missing variable");<br class="gmail_msg">
assert(DI->getDebugLoc() && "Missing location");<br class="gmail_msg">
if (MMI.hasDebugInfo()) {<br class="gmail_msg">
@@ -245,47 +242,52 @@ void FunctionLoweringInfo::set(const Fun<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
// Decide the preferred extend type for a value.<br class="gmail_msg">
- PreferredExtendType[&*I] = getPreferredExtendForValue(&*I);<br class="gmail_msg">
+ PreferredExtendType[&I] = getPreferredExtendForValue(&I);<br class="gmail_msg">
}<br class="gmail_msg">
+ }<br class="gmail_msg">
<br class="gmail_msg">
// Create an initial MachineBasicBlock for each LLVM BasicBlock in F. This<br class="gmail_msg">
// also creates the initial PHI MachineInstrs, though none of the input<br class="gmail_msg">
// operands are populated.<br class="gmail_msg">
- for (BB = Fn->begin(); BB != EB; ++BB) {<br class="gmail_msg">
+ for (const BasicBlock &BB : *Fn) {<br class="gmail_msg">
// Don't create MachineBasicBlocks for imaginary EH pad blocks. These blocks<br class="gmail_msg">
// are really data, and no instructions can live here.<br class="gmail_msg">
- if (BB->isEHPad()) {<br class="gmail_msg">
- const Instruction *I = BB->getFirstNonPHI();<br class="gmail_msg">
+ if (BB.isEHPad()) {<br class="gmail_msg">
+ const Instruction *PadInst = BB.getFirstNonPHI();<br class="gmail_msg">
// If this is a non-landingpad EH pad, mark this function as using<br class="gmail_msg">
// funclets.<br class="gmail_msg">
// FIXME: SEH catchpads do not create funclets, so we could avoid setting<br class="gmail_msg">
// this in such cases in order to improve frame layout.<br class="gmail_msg">
- if (!isa<LandingPadInst>(I)) {<br class="gmail_msg">
+ if (!isa<LandingPadInst>(PadInst)) {<br class="gmail_msg">
MF->setHasEHFunclets(true);<br class="gmail_msg">
MF->getFrameInfo().setHasOpaqueSPAdjustment(true);<br class="gmail_msg">
}<br class="gmail_msg">
- if (isa<CatchSwitchInst>(I)) {<br class="gmail_msg">
- assert(&*BB->begin() == I &&<br class="gmail_msg">
+ if (isa<CatchSwitchInst>(PadInst)) {<br class="gmail_msg">
+ assert(&*BB.begin() == PadInst &&<br class="gmail_msg">
"WinEHPrepare failed to remove PHIs from imaginary BBs");<br class="gmail_msg">
continue;<br class="gmail_msg">
}<br class="gmail_msg">
- if (isa<FuncletPadInst>(I))<br class="gmail_msg">
- assert(&*BB->begin() == I && "WinEHPrepare failed to demote PHIs");<br class="gmail_msg">
+ if (isa<FuncletPadInst>(PadInst))<br class="gmail_msg">
+ assert(&*BB.begin() == PadInst && "WinEHPrepare failed to demote PHIs");<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
- MachineBasicBlock *MBB = mf.CreateMachineBasicBlock(&*BB);<br class="gmail_msg">
- MBBMap[&*BB] = MBB;<br class="gmail_msg">
+ MachineBasicBlock *MBB = mf.CreateMachineBasicBlock(&BB);<br class="gmail_msg">
+ MBBMap[&BB] = MBB;<br class="gmail_msg">
MF->push_back(MBB);<br class="gmail_msg">
<br class="gmail_msg">
// Transfer the address-taken flag. This is necessary because there could<br class="gmail_msg">
// be multiple MachineBasicBlocks corresponding to one BasicBlock, and only<br class="gmail_msg">
// the first one should be marked.<br class="gmail_msg">
- if (BB->hasAddressTaken())<br class="gmail_msg">
+ if (BB.hasAddressTaken())<br class="gmail_msg">
MBB->setHasAddressTaken();<br class="gmail_msg">
<br class="gmail_msg">
+ // Mark landing pad blocks.<br class="gmail_msg">
+ if (BB.isEHPad())<br class="gmail_msg">
+ MBB->setIsEHPad();<br class="gmail_msg">
+<br class="gmail_msg">
// Create Machine PHI nodes for LLVM PHI nodes, lowering them as<br class="gmail_msg">
// appropriate.<br class="gmail_msg">
- for (BasicBlock::const_iterator I = BB->begin();<br class="gmail_msg">
+ for (BasicBlock::const_iterator I = BB.begin();<br class="gmail_msg">
const PHINode *PN = dyn_cast<PHINode>(I); ++I) {<br class="gmail_msg">
if (PN->use_empty()) continue;<br class="gmail_msg">
<br class="gmail_msg">
@@ -299,8 +301,7 @@ void FunctionLoweringInfo::set(const Fun<br class="gmail_msg">
<br class="gmail_msg">
SmallVector<EVT, 4> ValueVTs;<br class="gmail_msg">
ComputeValueVTs(*TLI, MF->getDataLayout(), PN->getType(), ValueVTs);<br class="gmail_msg">
- for (unsigned vti = 0, vte = ValueVTs.size(); vti != vte; ++vti) {<br class="gmail_msg">
- EVT VT = ValueVTs[vti];<br class="gmail_msg">
+ for (EVT VT : ValueVTs) {<br class="gmail_msg">
unsigned NumRegisters = TLI->getNumRegisters(Fn->getContext(), VT);<br class="gmail_msg">
const TargetInstrInfo *TII = MF->getSubtarget().getInstrInfo();<br class="gmail_msg">
for (unsigned i = 0; i != NumRegisters; ++i)<br class="gmail_msg">
@@ -310,16 +311,6 @@ void FunctionLoweringInfo::set(const Fun<br class="gmail_msg">
}<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
- // Mark landing pad blocks.<br class="gmail_msg">
- SmallVector<const LandingPadInst *, 4> LPads;<br class="gmail_msg">
- for (BB = Fn->begin(); BB != EB; ++BB) {<br class="gmail_msg">
- const Instruction *FNP = BB->getFirstNonPHI();<br class="gmail_msg">
- if (BB->isEHPad() && MBBMap.count(&*BB))<br class="gmail_msg">
- MBBMap[&*BB]->setIsEHPad();<br class="gmail_msg">
- if (const auto *LPI = dyn_cast<LandingPadInst>(FNP))<br class="gmail_msg">
- LPads.push_back(LPI);<br class="gmail_msg">
- }<br class="gmail_msg">
-<br class="gmail_msg">
if (!isFuncletEHPersonality(Personality))<br class="gmail_msg">
return;<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div></div>