summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-06-13 16:25:49 +0000
committerDan Gohman <gohman@apple.com>2009-06-13 16:25:49 +0000
commit426901aa19d0d4d9d580bd95af2ba00711c360a3 (patch)
tree08430c19ed431acec6fc6c3752b5fe0d9a9ffa3e /llvm/test
parent8db2edcf7fd7de2e3965e873890fdaf1c7c4b261 (diff)
downloadbcm5719-llvm-426901aa19d0d4d9d580bd95af2ba00711c360a3.tar.gz
bcm5719-llvm-426901aa19d0d4d9d580bd95af2ba00711c360a3.zip
Teach SCEVExpander's visitAddRecExpr to reuse an existing canonical
induction variable when the addrec to be expanded does not require a wider type. This eliminates the need for IndVarSimplify to micro-manage SCEV expansions, because SCEVExpander now automatically expands them in the form that IndVarSimplify considers to be canonical. (LSR still micro-manages its SCEV expansions, because it's optimizing for the target, rather than for other optimizations.) Also, this uses the new getAnyExtendExpr, which has more clever expression simplification logic than the IndVarSimplify code it replaces, and this cleans up some ugly expansions in code such as the included masked-iv.ll testcase. llvm-svn: 73294
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll2
-rw-r--r--llvm/test/Transforms/IndVarSimplify/masked-iv.ll24
2 files changed, 25 insertions, 1 deletions
diff --git a/llvm/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll b/llvm/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll
index d70e6049797..b4a2c506189 100644
--- a/llvm/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll
+++ b/llvm/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | opt -indvars | llvm-dis | %prcontext Loop: 1 | grep %indvar
+; RUN: llvm-as < %s | opt -indvars | llvm-dis | %prcontext ^Loop: 1 | grep %Canonical
; The indvar simplification code should ensure that the first PHI in the block
; is the canonical one!
diff --git a/llvm/test/Transforms/IndVarSimplify/masked-iv.ll b/llvm/test/Transforms/IndVarSimplify/masked-iv.ll
new file mode 100644
index 00000000000..c7583c9655a
--- /dev/null
+++ b/llvm/test/Transforms/IndVarSimplify/masked-iv.ll
@@ -0,0 +1,24 @@
+; RUN: llvm-as < %s | opt -indvars | llvm-dis | grep trunc | count 1
+
+; Indvars should do the IV arithmetic in the canonical IV type (i64),
+; and only use one truncation.
+
+define void @foo(i64* %A, i64* %B, i64 %n, i64 %a, i64 %s) nounwind {
+entry:
+ %t0 = icmp sgt i64 %n, 0 ; <i1> [#uses=1]
+ br i1 %t0, label %bb.preheader, label %return
+
+bb.preheader: ; preds = %entry
+ br label %bb
+
+bb: ; preds = %bb, %bb.preheader
+ %i.01 = phi i64 [ %t6, %bb ], [ %a, %bb.preheader ] ; <i64> [#uses=3]
+ %t1 = and i64 %i.01, 255 ; <i64> [#uses=1]
+ %t2 = getelementptr i64* %A, i64 %t1 ; <i64*> [#uses=1]
+ store i64 %i.01, i64* %t2, align 8
+ %t6 = add i64 %i.01, %s ; <i64> [#uses=1]
+ br label %bb
+
+return: ; preds = %entry
+ ret void
+}
OpenPOWER on IntegriCloud