<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>