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
22 lines
602 B
LLVM
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
|
|
}
|