diff options
author | Nadav Rotem <nrotem@apple.com> | 2012-12-30 07:47:00 +0000 |
---|---|---|
committer | Nadav Rotem <nrotem@apple.com> | 2012-12-30 07:47:00 +0000 |
commit | 0b37f14371d601bab6493f47aa9326abb3e768e2 (patch) | |
tree | 364d4839745eef166422d71022bab0c044cbfc8e /llvm/test/Transforms/LoopVectorize/lcssa-crash.ll | |
parent | 56bf2e1830c820ea9fd8e1db2b33874cd0f4ab85 (diff) | |
download | bcm5719-llvm-0b37f14371d601bab6493f47aa9326abb3e768e2.tar.gz bcm5719-llvm-0b37f14371d601bab6493f47aa9326abb3e768e2.zip |
LoopVectorizer: Fix a bug in the code that updates the loop exiting block.
LCSSA PHIs may have undef values. The vectorizer updates values that are used by outside users such as PHIs.
The bug happened because undefs are not loop values. This patch handles these PHIs.
PR14725
llvm-svn: 171251
Diffstat (limited to 'llvm/test/Transforms/LoopVectorize/lcssa-crash.ll')
-rw-r--r-- | llvm/test/Transforms/LoopVectorize/lcssa-crash.ll | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopVectorize/lcssa-crash.ll b/llvm/test/Transforms/LoopVectorize/lcssa-crash.ll new file mode 100644 index 00000000000..a618db53fff --- /dev/null +++ b/llvm/test/Transforms/LoopVectorize/lcssa-crash.ll @@ -0,0 +1,29 @@ +; RUN: opt < %s -loop-vectorize -force-vector-width=4 + +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-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +%type1 = type { %type2 } +%type2 = type { [0 x i8*], i8**, i32, i32, i32 } + +define void @test() nounwind uwtable align 2 { + br label %for.body.lr.ph.i.i.i + +for.body.lr.ph.i.i.i: + br label %for.body.i.i.i + +for.body.i.i.i: + %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc.i.i.i ], [ 0, %for.body.lr.ph.i.i.i ] + br label %for.inc.i.i.i + +for.inc.i.i.i: + %indvars.iv.next = add i64 %indvars.iv, 1 + %lftr.wideiv = trunc i64 %indvars.iv.next to i32 + %exitcond = icmp ne i32 %lftr.wideiv, undef + br i1 %exitcond, label %for.body.i.i.i, label %for.end.i.i.i + +for.end.i.i.i: + %lcssa = phi %type1* [ undef, %for.inc.i.i.i ] + unreachable +} + |