[llvm-commits] [llvm] r52438 - in /llvm/trunk: lib/Transforms/Scalar/LoopUnswitch.cpp test/Transforms/LoopUnswitch/2008-06-17-DomFrontier.ll

Devang Patel dpatel at apple.com
Tue Jun 17 19:16:39 PDT 2008


Author: dpatel
Date: Tue Jun 17 21:16:38 2008
New Revision: 52438

URL: http://llvm.org/viewvc/llvm-project?rev=52438&view=rev
Log:
Preserve dominance frontier while trivially unswitching loop.

Added:
    llvm/trunk/test/Transforms/LoopUnswitch/2008-06-17-DomFrontier.ll
Modified:
    llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp?rev=52438&r1=52437&r2=52438&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp Tue Jun 17 21:16:38 2008
@@ -610,6 +610,23 @@
     DT->changeImmediateDominator(NewExit, OrigPH);
     DT->changeImmediateDominator(NewPH, OrigPH);
   }
+   
+  if (DF) {
+    // NewExit is now part of NewPH and Loop Header's dominance
+    // frontier.
+    DominanceFrontier::iterator  DFI = DF->find(NewPH);
+    if (DFI != DF->end())
+      DF->addToFrontier(DFI, NewExit);
+    DFI = DF->find(L->getHeader());
+    DF->addToFrontier(DFI, NewExit);
+
+    // ExitBlock does not have successors then NewExit is part of
+    // its dominance frontier.
+    if (succ_begin(ExitBlock) == succ_end(ExitBlock)) {
+      DFI = DF->find(ExitBlock);
+      DF->addToFrontier(DFI, NewExit);
+    }
+  }
   LPM->deleteSimpleAnalysisValue(OrigPH->getTerminator(), L);
   OrigPH->getTerminator()->eraseFromParent();
 

Added: llvm/trunk/test/Transforms/LoopUnswitch/2008-06-17-DomFrontier.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopUnswitch/2008-06-17-DomFrontier.ll?rev=52438&view=auto

==============================================================================
--- llvm/trunk/test/Transforms/LoopUnswitch/2008-06-17-DomFrontier.ll (added)
+++ llvm/trunk/test/Transforms/LoopUnswitch/2008-06-17-DomFrontier.ll Tue Jun 17 21:16:38 2008
@@ -0,0 +1,22 @@
+; RUN: llvm-as < %s | opt -licm -loop-unswitch -disable-output
+ at g_56 = external global i16		; <i16*> [#uses=2]
+
+define i32 @func_67(i32 %p_68, i8 signext  %p_69, i8 signext  %p_71) nounwind  {
+entry:
+	br label %bb
+bb:		; preds = %bb44, %entry
+	br label %bb3
+bb3:		; preds = %bb36, %bb
+	%bothcond = or i1 false, false		; <i1> [#uses=1]
+	br i1 %bothcond, label %bb29, label %bb19
+bb19:		; preds = %bb3
+	br i1 false, label %bb36, label %bb29
+bb29:		; preds = %bb19, %bb3
+	ret i32 0
+bb36:		; preds = %bb19
+	store i16 0, i16* @g_56, align 2
+	br i1 false, label %bb44, label %bb3
+bb44:		; preds = %bb44, %bb36
+	%tmp46 = load i16* @g_56, align 2		; <i16> [#uses=0]
+	br i1 false, label %bb, label %bb44
+}





More information about the llvm-commits mailing list