[PATCH] D46671: Use iteration instead of recursion in CFIInserter

Sanjoy Das via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed May 9 18:23:40 PDT 2018


sanjoy created this revision.
sanjoy added reviewers: djokov, petarj.
Herald added subscribers: bixia, jlebar, mcrosier.

This recursive step can overflow the stack.


Repository:
  rL LLVM

https://reviews.llvm.org/D46671

Files:
  lib/CodeGen/CFIInstrInserter.cpp


Index: lib/CodeGen/CFIInstrInserter.cpp
===================================================================
--- lib/CodeGen/CFIInstrInserter.cpp
+++ lib/CodeGen/CFIInstrInserter.cpp
@@ -222,13 +222,19 @@
 }
 
 void CFIInstrInserter::updateSuccCFAInfo(MBBCFAInfo &MBBInfo) {
-  for (MachineBasicBlock *Succ : MBBInfo.MBB->successors()) {
+  SmallVector<MachineBasicBlock *, 4> Stack(MBBInfo.MBB->successors().begin(),
+                                            MBBInfo.MBB->successors().end());
+
+  while (!Stack.empty()) {
+    MachineBasicBlock *Succ = Stack.pop_back_val();
     MBBCFAInfo &SuccInfo = MBBVector[Succ->getNumber()];
-    if (SuccInfo.Processed) continue;
+    if (SuccInfo.Processed)
+      continue;
+
     SuccInfo.IncomingCFAOffset = MBBInfo.OutgoingCFAOffset;
     SuccInfo.IncomingCFARegister = MBBInfo.OutgoingCFARegister;
     calculateOutgoingCFAInfo(SuccInfo);
-    updateSuccCFAInfo(SuccInfo);
+    llvm::copy(SuccInfo.MBB->successors(), std::back_inserter(Stack));
   }
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D46671.146048.patch
Type: text/x-patch
Size: 1007 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180510/b167007f/attachment.bin>


More information about the llvm-commits mailing list