summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/LoopVectorize/pr39160.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/LoopVectorize/pr39160.ll')
-rw-r--r--llvm/test/Transforms/LoopVectorize/pr39160.ll98
1 files changed, 98 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopVectorize/pr39160.ll b/llvm/test/Transforms/LoopVectorize/pr39160.ll
new file mode 100644
index 00000000000..38ca5f964a0
--- /dev/null
+++ b/llvm/test/Transforms/LoopVectorize/pr39160.ll
@@ -0,0 +1,98 @@
+; RUN: opt -loop-vectorize -S < %s 2>&1 | FileCheck %s
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1"
+target triple = "x86_64-unknown-linux-gnu"
+
+; Make sure that we can compile the test without crash.
+define void @barney() {
+
+; CHECK-LABEL: @barney(
+; CHECK: middle.block:
+
+bb:
+ br label %bb2
+
+bb2: ; preds = %bb2, %bb
+ %tmp4 = icmp slt i32 undef, 0
+ br i1 %tmp4, label %bb2, label %bb5
+
+bb5: ; preds = %bb2
+ br label %bb19
+
+bb18: ; preds = %bb33
+ ret void
+
+bb19: ; preds = %bb36, %bb5
+ %tmp21 = phi i64 [ undef, %bb36 ], [ 2, %bb5 ]
+ %tmp22 = phi i32 [ %tmp65, %bb36 ], [ undef, %bb5 ]
+ br label %bb50
+
+bb33: ; preds = %bb62
+ br i1 undef, label %bb18, label %bb36
+
+bb36: ; preds = %bb33
+ br label %bb19
+
+bb46: ; preds = %bb50
+ br i1 undef, label %bb48, label %bb59
+
+bb48: ; preds = %bb46
+ %tmp49 = add i32 %tmp52, 14
+ ret void
+
+bb50: ; preds = %bb50, %bb19
+ %tmp52 = phi i32 [ %tmp55, %bb50 ], [ %tmp22, %bb19 ]
+ %tmp53 = phi i64 [ %tmp56, %bb50 ], [ 1, %bb19 ]
+ %tmp54 = add i32 %tmp52, 12
+ %tmp55 = add i32 %tmp52, 13
+ %tmp56 = add nuw nsw i64 %tmp53, 1
+ %tmp58 = icmp ult i64 %tmp53, undef
+ br i1 %tmp58, label %bb50, label %bb46
+
+bb59: ; preds = %bb46
+ br label %bb62
+
+bb62: ; preds = %bb68, %bb59
+ %tmp63 = phi i32 [ %tmp65, %bb68 ], [ %tmp55, %bb59 ]
+ %tmp64 = phi i64 [ %tmp66, %bb68 ], [ %tmp56, %bb59 ]
+ %tmp65 = add i32 %tmp63, 13
+ %tmp66 = add nuw nsw i64 %tmp64, 1
+ %tmp67 = icmp ult i64 %tmp66, %tmp21
+ br i1 %tmp67, label %bb68, label %bb33
+
+bb68: ; preds = %bb62
+ br label %bb62
+}
+
+define i32 @foo(i32 addrspace(1)* %p) {
+
+; CHECK-LABEL: foo
+; CHECK: middle.block:
+
+entry:
+ br label %outer
+
+outer: ; preds = %outer_latch, %entry
+ %iv = phi i64 [ 2, %entry ], [ %iv.next, %outer_latch ]
+ br label %inner
+
+inner: ; preds = %inner, %outer
+ %0 = phi i32 [ %2, %inner ], [ 0, %outer ]
+ %a = phi i32 [ %3, %inner ], [ 1, %outer ]
+ %b = phi i32 [ %1, %inner ], [ 6, %outer ]
+ %1 = add i32 %b, 2
+ %2 = or i32 %0, %b
+ %3 = add nuw nsw i32 %a, 1
+ %4 = zext i32 %3 to i64
+ %5 = icmp ugt i64 %iv, %4
+ br i1 %5, label %inner, label %outer_latch
+
+outer_latch: ; preds = %inner
+ store atomic i32 %2, i32 addrspace(1)* %p unordered, align 4
+ %iv.next = add nuw nsw i64 %iv, 1
+ %6 = icmp ugt i64 %iv, 63
+ br i1 %6, label %exit, label %outer
+
+exit: ; preds = %outer_latch
+ ret i32 0
+}
OpenPOWER on IntegriCloud