Files
clang-p2996/polly/test/DeLICM/reduction_looprotate.ll
Michael Kruse 5ae08c0ebb [DeLICM] Known knowledge.
Extend the Knowledge class to store information about the contents
of array elements and which values are written. Two knowledges do
not conflict the known content is the same. The content information
if computed from writes to and loads from the array elements, and
represented by "ValInst": isl spaces that compare equal if the value
represented is the same.

Differential Revision: https://reviews.llvm.org/D31247

llvm-svn: 302339
2017-05-06 14:03:58 +00:00

69 lines
1.4 KiB
LLVM

; RUN: opt %loadPolly -polly-flatten-schedule -polly-delicm -analyze < %s | FileCheck %s
;
; void func(double *A) {
; for (int j = 0; j < 2; j += 1) { /* outer */
; for (int i = 0; i < 4; i += 1) { /* reduction */
; double phi = A[j];
; phi += 4.2;
; A[j] = phi;
; }
; }
; }
;
; There is nothing to do in this case. All accesses are in %body.
;
define void @func(double* noalias nonnull %A) {
entry:
br label %outer.preheader
outer.preheader:
br label %outer.for
outer.for:
%j = phi i32 [0, %outer.preheader], [%j.inc, %outer.inc]
%j.cmp = icmp slt i32 %j, 2
br i1 %j.cmp, label %reduction.preheader, label %outer.exit
reduction.preheader:
br label %reduction.for
reduction.for:
%i = phi i32 [0, %reduction.preheader], [%i.inc, %reduction.inc]
br label %body
body:
%A_idx = getelementptr inbounds double, double* %A, i32 %j
%val = load double, double* %A_idx
%add = fadd double %val, 4.2
store double %add, double* %A_idx
br label %reduction.inc
reduction.inc:
%i.inc = add nuw nsw i32 %i, 1
%i.cmp = icmp slt i32 %i.inc, 4
br i1 %i.cmp, label %reduction.for, label %reduction.exit
reduction.exit:
br label %outer.inc
outer.inc:
%j.inc = add nuw nsw i32 %j, 1
br label %outer.for
outer.exit:
br label %return
return:
ret void
}
; CHECK: No modification has been made