llvm-6502/test/Transforms/IndVarSimplify/preserve-gep-loop-variant.ll
Andrew Trick 26e5285f9f Conditionalize indvars tests that rely on SCEV expansion of geps,
which is relevant with canonical IVs. Anything else being checked by
these tests is already covered by early CSE.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139535 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-12 20:26:34 +00:00

43 lines
1.1 KiB
LLVM

; RUN: opt < %s -indvars -S -enable-iv-rewrite | FileCheck %s
; CHECK-NOT: {{inttoptr|ptrtoint}}
; CHECK: scevgep
; CHECK-NOT: {{inttoptr|ptrtoint}}
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128-n:32:64"
; Indvars shouldn't need inttoptr/ptrtoint to expand an address here.
define void @foo(i8* %p) nounwind {
entry:
br i1 true, label %bb.nph, label %for.end
for.cond:
%phitmp = icmp slt i64 %inc, 20
br i1 %phitmp, label %for.body, label %for.cond.for.end_crit_edge
for.cond.for.end_crit_edge:
br label %for.end
bb.nph:
br label %for.body
for.body:
%storemerge1 = phi i64 [ %inc, %for.cond ], [ 0, %bb.nph ]
%call = tail call i64 @bar() nounwind
%call2 = tail call i64 @car() nounwind
%conv = trunc i64 %call2 to i8
%conv3 = sext i8 %conv to i64
%add = add nsw i64 %call, %storemerge1
%add4 = add nsw i64 %add, %conv3
%arrayidx = getelementptr inbounds i8* %p, i64 %add4
store i8 0, i8* %arrayidx
%inc = add nsw i64 %storemerge1, 1
br label %for.cond
for.end:
ret void
}
declare i64 @bar()
declare i64 @car()