[PATCH] [Jump-Threading] Fixed jump threading hang issues (PR15386, PR15851)

Dinesh Dwivedi dinesh.d at samsung.com
Tue Jun 10 23:10:38 PDT 2014


Wow, I couldn't have come up with that. I have updated code to remove
unreachable blocks at the start of pass.

I had to update one test case in select.ll where
  switch i32 %0, label %L2 [
    i32 5061, label %L1
    i32 0, label %L2
  ]
is now getting converted to 
  %cond = icmp eq i32 %0, 5061
  br i1 %cond, label %L2.thread, label %L2

http://reviews.llvm.org/D3991

Files:
  lib/Transforms/Scalar/JumpThreading.cpp
  test/Transforms/JumpThreading/pr15851_hang.ll
  test/Transforms/JumpThreading/select.ll

Index: lib/Transforms/Scalar/JumpThreading.cpp
===================================================================
--- lib/Transforms/Scalar/JumpThreading.cpp
+++ lib/Transforms/Scalar/JumpThreading.cpp
@@ -158,6 +158,8 @@
   TLI = &getAnalysis<TargetLibraryInfo>();
   LVI = &getAnalysis<LazyValueInfo>();
 
+  removeUnreachableBlocks(F);
+
   FindLoopHeaders(F);
 
   bool Changed, EverChanged = false;
Index: test/Transforms/JumpThreading/pr15851_hang.ll
===================================================================
--- /dev/null
+++ test/Transforms/JumpThreading/pr15851_hang.ll
@@ -0,0 +1,22 @@
+; RUN: timeout 10s opt -S -jump-threading < %s | FileCheck %s
+
+; CHECK-LABEL: @f(
+; CHECK-LABEL: entry
+; CHECK: ret void
+; CHECK-NOT: for.cond1
+; CHECK-NOT: for.body
+
+define void @f() {
+entry:
+  ret void
+
+for.cond1:
+  %i.025 = phi i32 [ %inc, %for.body ], [ %inc, %for.body ], [ 1, %for.cond1 ]
+  %cmp = icmp slt i32 %i.025, 2
+  br i1 %cmp, label %for.body, label %for.cond1
+
+for.body:
+  %inc = add nsw i32 %i.025, 0
+  %a = icmp ugt i32 %inc, 2
+  br i1 %a, label %for.cond1, label %for.cond1
+}
Index: test/Transforms/JumpThreading/select.ll
===================================================================
--- test/Transforms/JumpThreading/select.ll
+++ test/Transforms/JumpThreading/select.ll
@@ -127,7 +127,7 @@
 ; CHECK: test_switch_default
 ; CHECK: entry:
 ; CHECK: load
-; CHECK: switch
+; CHECK: icmp
 ; CHECK: [[THREADED:[A-Za-z.0-9]+]]:
 ; CHECK: store
 ; CHECK: br
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D3991.10316.patch
Type: text/x-patch
Size: 1507 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140611/084b59b1/attachment.bin>


More information about the llvm-commits mailing list