forked from OSchip/llvm-project
67 lines
2.2 KiB
LLVM
67 lines
2.2 KiB
LLVM
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %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"
|
|
|
|
; void foo(float *input) {
|
|
; for (int j = 0; j < 8; j++) {
|
|
; //SCoP begin
|
|
; for (int i = 0; i < 63; i++) {
|
|
; float x = input[j * 64 + i + 1];
|
|
; input[j * 64 + i + 0] = x * x;
|
|
; }
|
|
; }
|
|
; }
|
|
;
|
|
; Access functions:
|
|
;
|
|
; input[j * 64 + i + 1] => {4,+,256}<%for.cond1.preheader>
|
|
; input[j * 64 + i + 0] => {0,+,256}<%for.cond1.preheader>
|
|
;
|
|
; They should share the same zero-start parameter:
|
|
;
|
|
; p0: {0,+,256}<%for.cond1.preheader>
|
|
; input[j * 64 + i + 1] => p0 + 4
|
|
; input[j * 64 + i + 0] => p0
|
|
;
|
|
|
|
; Function Attrs: nounwind
|
|
define void @foo(float* nocapture %input) {
|
|
entry:
|
|
br label %for.cond1.preheader
|
|
|
|
for.cond1.preheader: ; preds = %for.inc10, %entry
|
|
%j.021 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]
|
|
%mul = shl nsw i64 %j.021, 6
|
|
br label %for.body3
|
|
|
|
for.body3: ; preds = %for.body3, %for.cond1.preheader
|
|
%i.020 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
|
|
%add = add nsw i64 %i.020, %mul
|
|
%add4 = add nsw i64 %add, 1
|
|
%arrayidx = getelementptr inbounds float* %input, i64 %add4
|
|
%0 = load float* %arrayidx, align 8
|
|
%mul5 = fmul float %0, %0
|
|
%arrayidx9 = getelementptr inbounds float* %input, i64 %add
|
|
store float %mul5, float* %arrayidx9, align 8
|
|
%inc = add nsw i64 %i.020, 1
|
|
%exitcond = icmp eq i64 %inc, 63
|
|
br i1 %exitcond, label %for.inc10, label %for.body3
|
|
|
|
for.inc10: ; preds = %for.body3
|
|
%inc11 = add nsw i64 %j.021, 1
|
|
%exitcond22 = icmp eq i64 %inc11, 8
|
|
fence seq_cst
|
|
br i1 %exitcond22, label %for.end12, label %for.cond1.preheader
|
|
|
|
for.end12: ; preds = %for.inc10
|
|
ret void
|
|
}
|
|
|
|
; CHECK p0: {0,+,256}<%for.cond1.preheader>
|
|
; CHECK-NOT: p1
|
|
|
|
; CHECK: ReadAccess :=
|
|
; CHECK: [p_0] -> { Stmt_for_body3[i0] -> MemRef_input[o0] : 4o0 = 4 + p_0 + 4i0 };
|
|
; CHECK: MustWriteAccess :=
|
|
; CHECK: [p_0] -> { Stmt_for_body3[i0] -> MemRef_input[o0] : 4o0 = p_0 + 4i0 };
|