• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
2;
3; Allow the user to define function names that are treated as
4; error functions and assumed not to be executed.
5;
6;    void timer_start(void);
7;    void timer_stop(void);
8;    void kernel(int *A, int *B, int timeit, int N) {
9;
10;      if (timeit)
11;        timer_start();
12;
13;      for (int i = 0; i < N; i++)
14;        A[i] += B[i];
15;
16;      if (timeit) {
17;        timer_stop();
18;        timer_start();
19;      }
20;
21;      for (int i = 0; i < N; i++)
22;        A[i] += B[i];
23;
24;      if (timeit)
25;        timer_stop();
26;    }
27;
28; CHECK:      Region: %for.cond---%if.end.20
29; CHECK:      Assumed Context:
30; CHECK-NEXT: [N, timeit] -> {  :  }
31; CHECK:      Invalid Context:
32; CHECK-NEXT: [N, timeit] -> {  : timeit < 0 or timeit > 0 }
33; CHECK:      Statements {
34; CHECK:        Stmt
35; CHECK:        Stmt
36; CHECK-NOT:    Stmt
37; CHECK:      }
38;
39target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
40
41define void @kernel(i32* %A, i32* %B, i32 %timeit, i32 %N) {
42entry:
43  %tobool = icmp eq i32 %timeit, 0
44  br i1 %tobool, label %if.end, label %if.then
45
46if.then:                                          ; preds = %entry
47  call void @timer_start()
48  br label %if.end
49
50if.end:                                           ; preds = %entry, %if.then
51  %tmp = sext i32 %N to i64
52  br label %for.cond
53
54for.cond:                                         ; preds = %for.inc, %if.end
55  %indvars.iv1 = phi i64 [ %indvars.iv.next2, %for.inc ], [ 0, %if.end ]
56  %cmp = icmp slt i64 %indvars.iv1, %tmp
57  br i1 %cmp, label %for.body, label %for.end
58
59for.body:                                         ; preds = %for.cond
60  %arrayidx = getelementptr inbounds i32, i32* %B, i64 %indvars.iv1
61  %tmp3 = load i32, i32* %arrayidx, align 4
62  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv1
63  %tmp4 = load i32, i32* %arrayidx2, align 4
64  %add = add nsw i32 %tmp4, %tmp3
65  store i32 %add, i32* %arrayidx2, align 4
66  br label %for.inc
67
68for.inc:                                          ; preds = %for.body
69  %indvars.iv.next2 = add nuw nsw i64 %indvars.iv1, 1
70  br label %for.cond
71
72for.end:                                          ; preds = %for.cond
73  %tobool3 = icmp eq i32 %timeit, 0
74  br i1 %tobool3, label %if.end.5, label %if.then.4
75
76if.then.4:                                        ; preds = %for.end
77  call void @timer_stop()
78  call void @timer_start()
79  br label %if.end.5
80
81if.end.5:                                         ; preds = %for.end, %if.then.4
82  %tmp5 = sext i32 %N to i64
83  br label %for.cond.7
84
85for.cond.7:                                       ; preds = %for.inc.15, %if.end.5
86  %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc.15 ], [ 0, %if.end.5 ]
87  %cmp8 = icmp slt i64 %indvars.iv, %tmp5
88  br i1 %cmp8, label %for.body.9, label %for.end.17
89
90for.body.9:                                       ; preds = %for.cond.7
91  %arrayidx11 = getelementptr inbounds i32, i32* %B, i64 %indvars.iv
92  %tmp6 = load i32, i32* %arrayidx11, align 4
93  %arrayidx13 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
94  %tmp7 = load i32, i32* %arrayidx13, align 4
95  %add14 = add nsw i32 %tmp7, %tmp6
96  store i32 %add14, i32* %arrayidx13, align 4
97  br label %for.inc.15
98
99for.inc.15:                                       ; preds = %for.body.9
100  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
101  br label %for.cond.7
102
103for.end.17:                                       ; preds = %for.cond.7
104  %tobool18 = icmp eq i32 %timeit, 0
105  br i1 %tobool18, label %if.end.20, label %if.then.19
106
107if.then.19:                                       ; preds = %for.end.17
108  call void @timer_stop()
109  br label %if.end.20
110
111if.end.20:                                        ; preds = %for.end.17, %if.then.19
112  ret void
113}
114
115declare void @timer_start()
116declare void @timer_stop()
117