| Johannes Doerfert | 9a132f3 | 2015-09-28 09:33:22 +0000 | [diff] [blame] | 1 | ; RUN: opt %loadPolly -polly-detect-unprofitable -polly-scops -analyze < %s | FileCheck %s | 
|  | 2 | ; RUN: opt %loadPolly -polly-detect-unprofitable -polly-ast -analyze < %s | FileCheck %s --check-prefix=AST | 
|  | 3 | ; | 
|  | 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 Doerfert | 9a132f3 | 2015-09-28 09:33:22 +0000 | [diff] [blame] | 25 | ; CHECK:      Stmt_sw_bb | 
|  | 26 | ; CHECK:            Domain := | 
|  | 27 | ; CHECK:                [N] -> { Stmt_sw_bb[0] : N >= 1 }; | 
| Michael Kruse | cac948e | 2015-10-02 13:53:07 +0000 | [diff] [blame] | 28 | ; 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 Doerfert | 9a132f3 | 2015-09-28 09:33:22 +0000 | [diff] [blame] | 37 | ; 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 | ; | 
|  | 57 | target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | 
|  | 58 |  | 
|  | 59 | define void @f(i32* %A, i32 %N) { | 
|  | 60 | entry: | 
|  | 61 | %tmp = sext i32 %N to i64 | 
|  | 62 | br label %for.cond | 
|  | 63 |  | 
|  | 64 | for.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 |  | 
|  | 69 | for.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 |  | 
|  | 78 | sw.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 |  | 
|  | 85 | sw.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 |  | 
|  | 92 | sw.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 |  | 
|  | 99 | sw.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 |  | 
|  | 106 | sw.default:                                       ; preds = %for.body | 
|  | 107 | br label %sw.epilog | 
|  | 108 |  | 
|  | 109 | sw.epilog:                                        ; preds = %sw.default, %sw.bb.9, %sw.bb.5, %sw.bb.1, %sw.bb | 
|  | 110 | br label %for.inc | 
|  | 111 |  | 
|  | 112 | for.inc:                                          ; preds = %sw.epilog | 
|  | 113 | %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 | 
|  | 114 | br label %for.cond | 
|  | 115 |  | 
|  | 116 | for.end:                                          ; preds = %for.cond | 
|  | 117 | ret void | 
|  | 118 | } |