[PATCH] D15847: [ShrinkWrap] Fix FindIDom to only have one kind of failure

Michael Kuperstein via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 6 10:43:47 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL256955: [ShrinkWrap] Fix FindIDom to only have one kind of failure. (authored by mkuper).

Changed prior to commit:
  http://reviews.llvm.org/D15847?vs=43855&id=44130#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D15847

Files:
  llvm/trunk/lib/CodeGen/ShrinkWrap.cpp
  llvm/trunk/test/CodeGen/X86/shrinkwrap-hang.ll

Index: llvm/trunk/test/CodeGen/X86/shrinkwrap-hang.ll
===================================================================
--- llvm/trunk/test/CodeGen/X86/shrinkwrap-hang.ll
+++ llvm/trunk/test/CodeGen/X86/shrinkwrap-hang.ll
@@ -0,0 +1,32 @@
+; RUN: llc %s -o - -enable-shrink-wrap=true | FileCheck %s
+
+target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
+target triple = "i686-pc-linux"
+
+ at b = global i32 1, align 4
+ at a = common global i32 0, align 4
+
+declare void @fn1() #0
+
+; CHECK-LABEL: fn2:
+define void @fn2() #0 {
+entry:
+  %0 = load i32, i32* @b, align 4
+  %tobool = icmp eq i32 %0, 0
+  br i1 %tobool, label %if.end, label %lbl
+
+lbl:                                              ; preds = %if.end, %entry
+  store i32 0, i32* @b, align 4
+  br label %if.end
+
+if.end:                                           ; preds = %entry, %lbl
+  tail call void @fn1()
+  %1 = load i32, i32* @b, align 4
+  %tobool1 = icmp eq i32 %1, 0
+  br i1 %tobool1, label %if.end3, label %lbl
+
+if.end3:                                          ; preds = %if.end
+  ret void
+}
+
+attributes #0 = { norecurse nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
Index: llvm/trunk/lib/CodeGen/ShrinkWrap.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/ShrinkWrap.cpp
+++ llvm/trunk/lib/CodeGen/ShrinkWrap.cpp
@@ -263,6 +263,8 @@
     if (!IDom)
       break;
   }
+  if (IDom == &Block)
+    return nullptr;
   return IDom;
 }
 
@@ -352,13 +354,9 @@
       if (MLI->getLoopDepth(Save) > MLI->getLoopDepth(Restore)) {
         // Push Save outside of this loop if immediate dominator is different
         // from save block. If immediate dominator is not different, bail out.
-        MachineBasicBlock *IDom = FindIDom<>(*Save, Save->predecessors(), *MDT);
-        if (IDom != Save)
-          Save = IDom;
-        else {
-          Save = nullptr;
+        Save = FindIDom<>(*Save, Save->predecessors(), *MDT);
+        if (!Save)
           break;
-        }
       } else {
         // If the loop does not exit, there is no point in looking
         // for a post-dominator outside the loop.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15847.44130.patch
Type: text/x-patch
Size: 2414 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160106/1cd80f1d/attachment.bin>


More information about the llvm-commits mailing list