brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 62a94f4 Raw
197 lines · plain
1// RUN: cir-opt -cir-canonicalize -cir-simplify -o %t.cir %s2// RUN: FileCheck --input-file=%t.cir %s3 4!s32i = !cir.int<s, 32>5 6module {7    cir.func @foldCascade(%arg0: !s32i) {8    %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}9    cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>10    cir.scope {11      %1 = cir.load %0 : !cir.ptr<!s32i>, !s32i12      cir.switch (%1 : !s32i) {13        cir.case(equal, [#cir.int<1> : !s32i]) {14          cir.yield15        }16        cir.case(equal, [#cir.int<2> : !s32i]) {17          cir.yield18        }19        cir.case(equal, [#cir.int<3> : !s32i]) {20          %2 = cir.const #cir.int<2> : !s32i21          cir.store %2, %0 : !s32i, !cir.ptr<!s32i>22          cir.break23        }24        cir.yield25      }26    }27    cir.return28  }29  //CHECK: cir.func @foldCascade30  //CHECK:   cir.switch (%[[COND:.*]] : !s32i) {31  //CHECK-NEXT:     cir.case(anyof, [#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i]) {32  //CHECK-NEXT:       %[[TWO:.*]] = cir.const #cir.int<2> : !s32i33  //CHECK-NEXT:       cir.store %[[TWO]], %[[ARG0:.*]] : !s32i, !cir.ptr<!s32i>34  //CHECK-NEXT:       cir.break35  //CHECK-NEXT:     }36  //CHECK-NEXT:     cir.yield37  //CHECK-NEXT:   }38 39    cir.func @foldCascade2(%arg0: !s32i) {40    %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}41    cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>42    cir.scope {43      %1 = cir.load %0 : !cir.ptr<!s32i>, !s32i44      cir.switch (%1 : !s32i) {45        cir.case(equal, [#cir.int<0> : !s32i]) {46          cir.yield47        }48        cir.case(equal, [#cir.int<2> : !s32i]) {49          cir.yield50        }51        cir.case(equal, [#cir.int<4> : !s32i]) {52          cir.break53        }54        cir.case(equal, [#cir.int<1> : !s32i]) {55          cir.yield56        }57        cir.case(equal, [#cir.int<3> : !s32i]) {58          cir.yield59        }60        cir.case(equal, [#cir.int<5> : !s32i]) {61          cir.break62        }63        cir.yield64      }65    }66    cir.return67  }68  //CHECK: @foldCascade269  //CHECK:   cir.switch (%[[COND2:.*]] : !s32i) {70  //CHECK:     cir.case(anyof, [#cir.int<0> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i]) {71  //CHECK:       cir.break72  //cehck:     }73  //CHECK:     cir.case(anyof, [#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i]) {74  //CHECK:       cir.break75  //CHECK:     }76  //CHECK:     cir.yield77  //CHECK:   }78  cir.func @foldCascade3(%arg0: !s32i ) {79    %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}80    cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>81    cir.scope {82      %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["x"] {alignment = 4 : i64}83      %2 = cir.load %0 : !cir.ptr<!s32i>, !s32i84      cir.switch (%2 : !s32i) {85        cir.case(equal, [#cir.int<0> : !s32i]) {86          cir.yield87        }88        cir.case(equal, [#cir.int<1> : !s32i]) {89          cir.yield90        }91        cir.case(equal, [#cir.int<2> : !s32i]) {92          cir.yield93        }94        cir.case(equal, [#cir.int<3> : !s32i]) {95          cir.yield96        }97        cir.case(equal, [#cir.int<4> : !s32i]) {98          cir.yield99        }100        cir.case(equal, [#cir.int<5> : !s32i]) {101          cir.break102        }103        cir.yield104      }105    }106    cir.return107  }108  //CHECK: cir.func @foldCascade3109  //CHECK:   cir.switch (%[[COND3:.*]] : !s32i) {110  //CHECK:     cir.case(anyof, [#cir.int<0> : !s32i, #cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i, #cir.int<4> : !s32i, #cir.int<5> : !s32i]) {111  //CHECK:       cir.break112  //CHECK:    }113  //CHECK:    cir.yield114  //CHECK:   }115  cir.func @foldCascadeWithDefault(%arg0: !s32i ) {116    %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}117    cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>118    cir.scope {119      %1 = cir.load %0 : !cir.ptr<!s32i>, !s32i120      cir.switch (%1 : !s32i) {121        cir.case(equal, [#cir.int<3> : !s32i]) {122          cir.break123        }124        cir.case(equal, [#cir.int<4> : !s32i]) {125          cir.yield126        }127        cir.case(equal, [#cir.int<5> : !s32i]) {128          cir.yield129        }130        cir.case(default, []) {131          cir.yield132        }133        cir.case(equal, [#cir.int<6> : !s32i]) {134          cir.yield135        }136        cir.case(equal, [#cir.int<7> : !s32i]) {137          cir.break138        }139        cir.yield140      }141    }142    cir.return143  }144  //CHECK: cir.func @foldCascadeWithDefault145  //CHECK:   cir.switch (%[[COND:.*]] : !s32i) {146  //CHECK:      cir.case(equal, [#cir.int<3> : !s32i]) {147  //CHECK:        cir.break148  //CHECK:      }149  //CHECK:      cir.case(anyof, [#cir.int<4> : !s32i, #cir.int<5> : !s32i]) {150  //CHECK:        cir.yield151  //CHECK:      }152  //CHECK:      cir.case(default, []) {153  //CHECK:        cir.yield154  //CHECK:      }155  //CHECK:      cir.case(anyof, [#cir.int<6> : !s32i, #cir.int<7> : !s32i]) {156  //CHECK:        cir.break157  //CHECK:      }158  //CHECK:      cir.yield159  //CHECK:   }160  cir.func @foldAllCascade(%arg0: !s32i ) {161    %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}162    cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>163    cir.scope {164      %1 = cir.load %0 : !cir.ptr<!s32i>, !s32i165      cir.switch (%1 : !s32i) {166        cir.case(equal, [#cir.int<0> : !s32i]) {167          cir.yield168        }169        cir.case(equal, [#cir.int<1> : !s32i]) {170          cir.yield171        }172        cir.case(equal, [#cir.int<2> : !s32i]) {173          cir.yield174        }175        cir.case(equal, [#cir.int<3> : !s32i]) {176          cir.yield177        }178        cir.case(equal, [#cir.int<4> : !s32i]) {179          cir.yield180        }181        cir.case(equal, [#cir.int<5> : !s32i]) {182          cir.yield183        }184        cir.yield185      }186    }187    cir.return188  }189  //CHECK: cir.func @foldAllCascade190  //CHECK:   cir.switch (%[[COND:.*]] : !s32i) {191  //CHECK:     cir.case(anyof, [#cir.int<0> : !s32i, #cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i, #cir.int<4> : !s32i, #cir.int<5> : !s32i]) {192  //CHECK:       cir.yield193  //CHECK:     }194  //CHECK:     cir.yield195  //CHECK:   }196}197