blob: c2addd2cae005a699063c454e0977251eb9a2192 [file] [log] [blame]
Tobias Grosserf4ee3712015-10-06 15:36:44 +00001; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
2; RUN: opt %loadPolly -polly-ast -analyze < %s | FileCheck %s --check-prefix=AST
Johannes Doerfert9a132f32015-09-28 09:33:22 +00003;
4; void f(int *A, int N) {
5; for (int i = 0; i < N; i++) {
6; switch (i) {
7; case 0:
8; A[i] += 1;
9; break;
10; case 1:
11; A[i] += 2;
12; break;
13; case 2:
14; A[i] += 3;
15; break;
16; case 3:
17; A[i] += 4;
18; break;
19; default:;
20; }
21; }
22; }
23;
24; CHECK: Statements {
Johannes Doerfert9a132f32015-09-28 09:33:22 +000025; CHECK: Stmt_sw_bb
26; CHECK: Domain :=
27; CHECK: [N] -> { Stmt_sw_bb[0] : N >= 1 };
Michael Krusecac948e2015-10-02 13:53:07 +000028; CHECK: Stmt_sw_bb_1
29; CHECK: Domain :=
30; CHECK: [N] -> { Stmt_sw_bb_1[1] : N >= 2 };
31; CHECK: Stmt_sw_bb_5
32; CHECK: Domain :=
33; CHECK: [N] -> { Stmt_sw_bb_5[2] : N >= 3 };
34; CHECK: Stmt_sw_bb_9
35; CHECK: Domain :=
36; CHECK: [N] -> { Stmt_sw_bb_9[3] : N >= 4 };
Johannes Doerfert9a132f32015-09-28 09:33:22 +000037; CHECK: }
38;
39; AST: if (1)
40;
41; AST: if (N >= 1) {
42; AST: Stmt_sw_bb(0);
43; AST: if (N >= 2) {
44; AST: Stmt_sw_bb_1(1);
45; AST: if (N >= 3) {
46; AST: Stmt_sw_bb_5(2);
47; AST: if (N >= 4)
48; AST: Stmt_sw_bb_9(3);
49; AST: }
50; AST: }
51; AST: }
52;
53; AST: else
54; AST: { /* original code */ }
55;
56;
57target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
58
59define void @f(i32* %A, i32 %N) {
60entry:
61 %tmp = sext i32 %N to i64
62 br label %for.cond
63
64for.cond: ; preds = %for.inc, %entry
65 %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
66 %cmp = icmp slt i64 %indvars.iv, %tmp
67 br i1 %cmp, label %for.body, label %for.end
68
69for.body: ; preds = %for.cond
70 %tmp1 = trunc i64 %indvars.iv to i32
71 switch i32 %tmp1, label %sw.default [
72 i32 0, label %sw.bb
73 i32 1, label %sw.bb.1
74 i32 2, label %sw.bb.5
75 i32 3, label %sw.bb.9
76 ]
77
78sw.bb: ; preds = %for.body
79 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
80 %tmp2 = load i32, i32* %arrayidx, align 4
81 %add = add nsw i32 %tmp2, 1
82 store i32 %add, i32* %arrayidx, align 4
83 br label %sw.epilog
84
85sw.bb.1: ; preds = %for.body
86 %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
87 %tmp3 = load i32, i32* %arrayidx3, align 4
88 %add4 = add nsw i32 %tmp3, 2
89 store i32 %add4, i32* %arrayidx3, align 4
90 br label %sw.epilog
91
92sw.bb.5: ; preds = %for.body
93 %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
94 %tmp4 = load i32, i32* %arrayidx7, align 4
95 %add8 = add nsw i32 %tmp4, 3
96 store i32 %add8, i32* %arrayidx7, align 4
97 br label %sw.epilog
98
99sw.bb.9: ; preds = %for.body
100 %arrayidx11 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
101 %tmp5 = load i32, i32* %arrayidx11, align 4
102 %add12 = add nsw i32 %tmp5, 4
103 store i32 %add12, i32* %arrayidx11, align 4
104 br label %sw.epilog
105
106sw.default: ; preds = %for.body
107 br label %sw.epilog
108
109sw.epilog: ; preds = %sw.default, %sw.bb.9, %sw.bb.5, %sw.bb.1, %sw.bb
110 br label %for.inc
111
112for.inc: ; preds = %sw.epilog
113 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
114 br label %for.cond
115
116for.end: ; preds = %for.cond
117 ret void
118}