brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · e7a1bf4 Raw
64 lines · plain
1// RUN: cir-opt %s --verify-roundtrip | FileCheck %s2 3!s32i = !cir.int<s, 32>4 5module  {6 7cir.func @throw_with_no_return() {8  cir.throw9  cir.unreachable10}11 12// CHECK: cir.func @throw_with_no_return() {13// CHECK:  cir.throw14// CHECK:  cir.unreachable15// CHECK: }16 17cir.func @throw_with_no_return_2(%arg0: !s32i, %arg1: !s32i) -> !s32i {18  %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init]19  %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["b", init]20  %2 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"]21  cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>22  cir.store %arg1, %1 : !s32i, !cir.ptr<!s32i>23  cir.scope {24    %7 = cir.load align(4) %1 : !cir.ptr<!s32i>, !s32i25    %8 = cir.const #cir.int<0> : !s32i26    %9 = cir.cmp(eq, %7, %8) : !s32i, !cir.bool27    cir.if %9 {28      cir.throw29      cir.unreachable30    }31  }32  %3 = cir.load align(4) %0 : !cir.ptr<!s32i>, !s32i33  %4 = cir.load align(4) %1 : !cir.ptr<!s32i>, !s32i34  %5 = cir.binop(div, %3, %4) : !s32i35  cir.store %5, %2 : !s32i, !cir.ptr<!s32i>36  %6 = cir.load %2 : !cir.ptr<!s32i>, !s32i37  cir.return %6 : !s32i38}39 40// CHECK: cir.func @throw_with_no_return_2(%[[ARG_0:.*]]: !s32i, %[[ARG_1:.*]]: !s32i) -> !s32i {41// CHECK:  %[[A_ADDR:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init]42// CHECK:  %[[B_ADDR:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["b", init]43// CHECK:  %[[RES_ADDR:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"]44// CHECK:  cir.store %[[ARG_0]], %[[A_ADDR]] : !s32i, !cir.ptr<!s32i>45// CHECK:  cir.store %[[ARG_1]], %[[B_ADDR]] : !s32i, !cir.ptr<!s32i>46// CHECK:  cir.scope {47// CHECK:    %[[TMP_B:.*]] = cir.load{{.*}} %[[B_ADDR]] : !cir.ptr<!s32i>, !s32i48// CHECK:    %[[CONST_0:.*]] = cir.const #cir.int<0> : !s32i49// CHECK:    %[[IS_B_ZERO:.*]] = cir.cmp(eq, %[[TMP_B]], %[[CONST_0]]) : !s32i, !cir.bool50// CHECK:    cir.if %[[IS_B_ZERO]] {51// CHECK:      cir.throw52// CHECK:      cir.unreachable53// CHECK:    }54// CHECK:  }55// CHECK:  %[[TMP_A:.*]] = cir.load{{.*}} %[[A_ADDR]] : !cir.ptr<!s32i>, !s32i56// CHECK:  %[[TMP_B:.*]] = cir.load{{.*}} %[[B_ADDR]] : !cir.ptr<!s32i>, !s32i57// CHECK:  %[[DIV_A_B:.*]] = cir.binop(div, %[[TMP_A:.*]], %[[TMP_B:.*]]) : !s32i58// CHECK:  cir.store %[[DIV_A_B]], %[[RES_ADDR]] : !s32i, !cir.ptr<!s32i>59// CHECK:  %[[RESULT:.*]] = cir.load %[[RES_ADDR]] : !cir.ptr<!s32i>, !s32i60// CHECK:  cir.return %[[RESULT]] : !s32i61// CHECK: }62 63}64