summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/LoopSimplify/dup-preds.ll
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2013-10-04 23:41:05 +0000
committerHal Finkel <hfinkel@anl.gov>2013-10-04 23:41:05 +0000
commitf5a3eaea55b32a6f475870aaa18f2f95c3b37a40 (patch)
treeec3deedfa9af3b0b7a6583779f91e93c4aca634c /llvm/test/Transforms/LoopSimplify/dup-preds.ll
parent41369b5f416f393b5869a19cb0629b6d6e97417d (diff)
downloadbcm5719-llvm-f5a3eaea55b32a6f475870aaa18f2f95c3b37a40.tar.gz
bcm5719-llvm-f5a3eaea55b32a6f475870aaa18f2f95c3b37a40.zip
UpdatePHINodes in BasicBlockUtils should not crash on duplicate predecessors
UpdatePHINodes has an optimization to reuse an existing PHI node, where it first deletes all of its entries and then replaces them. Unfortunately, in the case where we had duplicate predecessors (which are allowed so long as the associated PHI entries have the same value), the loop removing the existing PHI entries from the to-be-reused PHI would assert (if that PHI was not the one which had the duplicates). llvm-svn: 192001
Diffstat (limited to 'llvm/test/Transforms/LoopSimplify/dup-preds.ll')
-rw-r--r--llvm/test/Transforms/LoopSimplify/dup-preds.ll46
1 files changed, 46 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopSimplify/dup-preds.ll b/llvm/test/Transforms/LoopSimplify/dup-preds.ll
new file mode 100644
index 00000000000..3d1f1499b11
--- /dev/null
+++ b/llvm/test/Transforms/LoopSimplify/dup-preds.ll
@@ -0,0 +1,46 @@
+; RUN: opt -loop-simplify -S %s | FileCheck %s
+target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
+target triple = "powerpc64-bgq-linux"
+
+define fastcc void @do_update_md([3 x float]* nocapture readonly %x) #0 {
+entry:
+ br i1 undef, label %if.end365, label %lor.lhs.false134
+
+lor.lhs.false134: ; preds = %entry
+ br i1 undef, label %lor.lhs.false138, label %if.end365
+
+lor.lhs.false138: ; preds = %lor.lhs.false134
+ br i1 undef, label %lor.lhs.false142, label %if.end365
+
+lor.lhs.false142: ; preds = %lor.lhs.false138
+ br i1 undef, label %for.body276.lr.ph, label %if.end365
+
+for.body276.lr.ph: ; preds = %lor.lhs.false142
+ switch i16 undef, label %if.then288 [
+ i16 4, label %for.body344
+ i16 2, label %for.body344
+ ]
+
+if.then288: ; preds = %for.body276.lr.ph
+ br label %for.body305
+
+for.body305: ; preds = %for.body305, %if.then288
+ br label %for.body305
+
+for.body344: ; preds = %for.body344, %for.body276.lr.ph, %for.body276.lr.ph
+ %indvar = phi i64 [ %indvar.next, %for.body344 ], [ 0, %for.body276.lr.ph ]
+ %indvars.iv552 = phi i64 [ %indvars.iv.next553, %for.body344 ], [ 0, %for.body276.lr.ph ], [ 0, %for.body276.lr.ph ]
+ %indvars.iv.next553 = add nuw nsw i64 %indvars.iv552, 1
+ %indvar.next = add i64 %indvar, 1
+ br label %for.body344
+
+; CHECK-LABEL: @do_update_md
+; CHECK: %indvars.iv552 = phi i64 [ %indvars.iv.next553, %for.body344 ], [ 0, %for.body344.preheader ]
+; CHECK: ret
+
+if.end365: ; preds = %lor.lhs.false142, %lor.lhs.false138, %lor.lhs.false134, %entry
+ ret void
+}
+
+attributes #0 = { nounwind }
+
OpenPOWER on IntegriCloud