diff options
| author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-08-13 00:58:31 +0000 |
|---|---|---|
| committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-08-13 00:58:31 +0000 |
| commit | 3502511548d86dfb09256f0f19d370be71812a62 (patch) | |
| tree | 443189e6cf9bc4ce437b322f3ee94802d2ec6a33 /llvm/test/Transforms/IndVarSimplify | |
| parent | 3e3a057c20d15ac9c88c96cea806fb780b59b93a (diff) | |
| download | bcm5719-llvm-3502511548d86dfb09256f0f19d370be71812a62.tar.gz bcm5719-llvm-3502511548d86dfb09256f0f19d370be71812a62.zip | |
[IndVars] Ignore (s|z)exts that don't extend the induction variable
`IVVisitor::visitCast` used to have the invariant that if the
instruction it was passed was a sext or zext instruction, the result of
the instruction would be wider than the induction variable. This is no
longer true after rL275037, so this change teaches `IndVarSimplify` s
implementation of `IVVisitor::visitCast` to work with the relaxed
invariant.
A corresponding change to SimplifyIndVar to preserve the said invariant
after rL275037 would also work, but given how `IVVisitor::visitCast` is
spelled (no indication of said invariant), I figured the current fix is
cleaner.
Fixes PR28935.
llvm-svn: 278584
Diffstat (limited to 'llvm/test/Transforms/IndVarSimplify')
| -rw-r--r-- | llvm/test/Transforms/IndVarSimplify/pr28935.ll | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/test/Transforms/IndVarSimplify/pr28935.ll b/llvm/test/Transforms/IndVarSimplify/pr28935.ll new file mode 100644 index 00000000000..0cfd1d31a41 --- /dev/null +++ b/llvm/test/Transforms/IndVarSimplify/pr28935.ll @@ -0,0 +1,20 @@ +; RUN: opt -S -indvars < %s | FileCheck %s + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +declare i16 @fn1(i16 returned, i64) + +define void @fn2() { +; CHECK-LABEL: @fn2( +entry: + br label %for.cond + +for.cond: + %f.0 = phi i64 [ undef, %entry ], [ %inc, %for.cond ] + %conv = trunc i64 %f.0 to i16 + %call = tail call i16 @fn1(i16 %conv, i64 %f.0) + %conv2 = zext i16 %call to i32 + %inc = add nsw i64 %f.0, 1 + br label %for.cond +} |

