brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 718906f Raw
77 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 @fold_ternary(%arg0: !s32i, %arg1: !s32i) -> !s32i {8    %0 = cir.const #cir.bool<false> : !cir.bool9    %1 = cir.ternary (%0, true {10      cir.yield %arg0 : !s32i11    }, false {12      cir.yield %arg1 : !s32i13    }) : (!cir.bool) -> !s32i14    cir.return %1 : !s32i15  }16 17  //      CHECK: cir.func{{.*}} @fold_ternary(%{{.+}}: !s32i, %[[ARG:.+]]: !s32i) -> !s32i {18  // CHECK-NEXT:   cir.return %[[ARG]] : !s32i19  // CHECK-NEXT: }20 21  cir.func @simplify_ternary(%arg0 : !cir.bool, %arg1 : !s32i) -> !s32i {22    %0 = cir.ternary (%arg0, true {23      %1 = cir.const #cir.int<42> : !s32i24      cir.yield %1 : !s32i25    }, false {26      cir.yield %arg1 : !s32i27    }) : (!cir.bool) -> !s32i28    cir.return %0 : !s32i29  }30 31  //      CHECK: cir.func{{.*}} @simplify_ternary(%[[ARG0:.+]]: !cir.bool, %[[ARG1:.+]]: !s32i) -> !s32i {32  // CHECK-NEXT:   %[[#A:]] = cir.const #cir.int<42> : !s32i33  // CHECK-NEXT:   %[[#B:]] = cir.select if %[[ARG0]] then %[[#A]] else %[[ARG1]] : (!cir.bool, !s32i, !s32i) -> !s32i34  // CHECK-NEXT:   cir.return %[[#B]] : !s32i35  // CHECK-NEXT: }36 37  cir.func @simplify_ternary_false_const(%arg0 : !cir.bool, %arg1 : !s32i) -> !s32i {38    %0 = cir.ternary (%arg0, true {39      cir.yield %arg1 : !s32i40    }, false {41      %1 = cir.const #cir.int<24> : !s32i42      cir.yield %1 : !s32i43    }) : (!cir.bool) -> !s32i44    cir.return %0 : !s32i45  }46 47  //      CHECK: cir.func{{.*}} @simplify_ternary_false_const(%[[ARG0:.+]]: !cir.bool, %[[ARG1:.+]]: !s32i) -> !s32i {48  // CHECK-NEXT:   %[[#A:]] = cir.const #cir.int<24> : !s32i49  // CHECK-NEXT:   %[[#B:]] = cir.select if %[[ARG0]] then %[[ARG1]] else %[[#A]] : (!cir.bool, !s32i, !s32i) -> !s32i50  // CHECK-NEXT:   cir.return %[[#B]] : !s32i51  // CHECK-NEXT: }52 53  cir.func @non_simplifiable_ternary(%arg0 : !cir.bool) -> !s32i {54    %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init]55    %1 = cir.ternary (%arg0, true {56      %2 = cir.const #cir.int<42> : !s32i57      cir.yield %2 : !s32i58    }, false {59      %3 = cir.load %0 : !cir.ptr<!s32i>, !s32i60      cir.yield %3 : !s32i61    }) : (!cir.bool) -> !s32i62    cir.return %1 : !s32i63  }64 65  //      CHECK: cir.func{{.*}} @non_simplifiable_ternary(%[[ARG0:.+]]: !cir.bool) -> !s32i {66  // CHECK-NEXT:   %[[#A:]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init]67  // CHECK-NEXT:   %[[#B:]] = cir.ternary(%[[ARG0]], true {68  // CHECK-NEXT:     %[[#C:]] = cir.const #cir.int<42> : !s32i69  // CHECK-NEXT:     cir.yield %[[#C]] : !s32i70  // CHECK-NEXT:   }, false {71  // CHECK-NEXT:     %[[#D:]] = cir.load %[[#A]] : !cir.ptr<!s32i>, !s32i72  // CHECK-NEXT:     cir.yield %[[#D]] : !s32i73  // CHECK-NEXT:   }) : (!cir.bool) -> !s32i74  // CHECK-NEXT:   cir.return %[[#B]] : !s32i75  // CHECK-NEXT: }76}77