Tobias Grosser 369430ffca codegen: properly instantiate SCEVs to the place where they are used
Given the following code

    for (i = 0; i < 10; i++) {
      ;
    }

S:  A[i] = 0

When code generating S using scev based code generation, we need to retrieve
the scev of 'i' at the location of 'S'. If we do not do this the scev that
we obtain will be expressed as {0,+,1}_for and will reference loop iterators
that do not surround 'S' and that we consequently do not know how to code
generate. What we really want is the scev to be instantiated to the value of 'i'
after the loop. This value is {10} and it can be code generated without
troubles.

llvm-svn: 177777
2013-03-22 23:42:53 +00:00

22 lines
602 B
LLVM

; RUN: opt %loadPolly -polly-codegen-isl -S -polly-codegen-scev < %s
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"
define void @list_sequence(i32* %A) {
entry:
br label %for.body
for.body:
%i = phi i32 [ 0, %entry ], [ %i.inc, %for.body ]
%i.inc = add nsw i32 %i, 1
%cmp5 = icmp slt i32 %i.inc, 2
br i1 %cmp5, label %for.body, label %for.next
for.next:
store i32 %i.inc, i32* %A
br label %for.end
for.end:
ret void
}