diff options
Diffstat (limited to 'polly/test/DeLICM/skip_maywrite.ll')
-rw-r--r-- | polly/test/DeLICM/skip_maywrite.ll | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/polly/test/DeLICM/skip_maywrite.ll b/polly/test/DeLICM/skip_maywrite.ll new file mode 100644 index 00000000000..e3ab2877592 --- /dev/null +++ b/polly/test/DeLICM/skip_maywrite.ll @@ -0,0 +1,74 @@ +; RUN: opt %loadPolly -polly-delicm -analyze -pass-remarks-missed=polly-delicm < %s 2>&1 | FileCheck %s +; +; void func(double *A) { +; for (int j = 0; j < 2; j += 1) { /* outer */ +; memset(A[j], 0, sizeof(double)); +; double phi = 0.0; +; for (int i = 0; i < 4; i += 1) /* reduction */ +; phi += 4.2; +; if (phi >= 0.0) +; A[j] = phi; +; } +; } +; + +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] + %phi = phi double [0.0, %reduction.preheader], [%add, %reduction.inc] + %i.cmp = icmp slt i32 %i, 4 + br i1 %i.cmp, label %body, label %reduction.exit + + + + body: + %add = fadd double %phi, 4.2 + br label %reduction.inc + + + + reduction.inc: + %i.inc = add nuw nsw i32 %i, 1 + br label %reduction.for + + reduction.exit: + %phi.cmp = fcmp ogt double %phi, 0.0 + br i1 %phi.cmp , label %reduction.exit_true, label %reduction.exit_false + + reduction.exit_true: + %A_idx = getelementptr inbounds double, double* %A, i32 %j + store double %phi, double* %A_idx + br label %outer.inc + + reduction.exit_false: + 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: Skipped possible mapping target because it is not an unconditional overwrite |