blob: 30a4ec84958887fa10cc50196255108df3ab3cd2 [file] [log] [blame]
Tobias Grosserd1e33e72015-02-19 05:31:07 +00001; RUN: opt %loadPolly -polly-detect-unprofitable -polly-scops -analyze -polly-allow-unsigned < %s | FileCheck %s
Tobias Grosserbfbc3692015-01-09 00:01:33 +00002
3; void f(int a[], int N, unsigned P) {
4; int i;
5; for (i = 0; i < N; ++i)
6; if (P > 42)
7; a[i] = i;
8; }
9
10target 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"
Tobias Grosserbfbc3692015-01-09 00:01:33 +000011
12define void @f(i64* nocapture %a, i64 %N, i64 %P) nounwind {
13entry:
14 br label %bb
15
16bb:
17 %i = phi i64 [ 0, %entry ], [ %i.inc, %bb.backedge ]
18 %brcond = icmp uge i64 %P, 42
19 br i1 %brcond, label %store, label %bb.backedge
20
21store:
Johannes Doerfert883f8c12015-09-15 22:52:53 +000022 %scevgep = getelementptr inbounds i64, i64* %a, i64 %i
Tobias Grosserbfbc3692015-01-09 00:01:33 +000023 store i64 %i, i64* %scevgep
24 br label %bb.backedge
25
26bb.backedge:
27 %i.inc = add nsw i64 %i, 1
28 %exitcond = icmp eq i64 %i.inc, %N
29 br i1 %exitcond, label %return, label %bb
30
31return:
32 ret void
33}
34
35; CHECK: Assumed Context:
36; CHECK: { : }
37
38; CHECK: Stmt_store
39; CHECK: Domain :=
Johannes Doerfert96425c22015-08-30 21:13:53 +000040; CHECK: [P, N] -> { Stmt_store[i0] :
Johannes Doerfert5b9ff8b2015-09-10 13:00:06 +000041; CHECK-DAG: i0 >= 0
42; CHECK-DAG: and
43; CHECK-DAG: i0 <= -1 + N
44; CHECK-DAG: and
45; CHECK-DAG: P >= 42
Tobias Grosserbfbc3692015-01-09 00:01:33 +000046; CHECK: };
Tobias Grosser54839312015-04-21 11:37:25 +000047; CHECK: Schedule :=
Johannes Doerfert96425c22015-08-30 21:13:53 +000048; CHECK: [P, N] -> { Stmt_store[i0] -> [i0] };
Tobias Grosserbfbc3692015-01-09 00:01:33 +000049; CHECK: MustWriteAccess := [Reduction Type: NONE]
Johannes Doerfert96425c22015-08-30 21:13:53 +000050; CHECK: [P, N] -> { Stmt_store[i0] -> MemRef_a[i0] };