94 lines · plain
1// RUN: cir-opt %s -cir-canonicalize -o - | FileCheck %s2 3!s32i = !cir.int<s, 32>4!s64i = !cir.int<s, 64>5!u32i = !cir.int<u, 32>6 7module {8 cir.func @redundant_br() {9 cir.br ^bb110 ^bb1: // pred: ^bb011 %0 = cir.alloca !u32i, !cir.ptr<!u32i>, ["a", init] {alignment = 4 : i64}12 %1 = cir.const #cir.int<4> : !u32i13 cir.store %1, %0 : !u32i, !cir.ptr<!u32i>14 cir.br ^bb215 ^bb2: // pred: ^bb116 cir.return17 }18 // CHECK: cir.func{{.*}} @redundant_br() {19 // CHECK-NEXT: %[[A:.*]] = cir.alloca !u32i, !cir.ptr<!u32i>, ["a", init] {alignment = 4 : i64}20 // CHECK-NEXT: %[[FOUR:.*]] = cir.const #cir.int<4> : !u32i21 // CHECK-NEXT: cir.store %[[FOUR]], %[[A]] : !u32i, !cir.ptr<!u32i>22 // CHECK-NEXT: cir.return23 // CHECK-NEXT: }24 25 cir.func @empty_scope() {26 cir.scope {27 }28 cir.return29 }30 // CHECK: cir.func{{.*}} @empty_scope() {31 // CHECK-NEXT: cir.return32 // CHECK-NEXT: }33 34 cir.func @unary_not(%arg0: !cir.bool) -> !cir.bool {35 %0 = cir.unary(not, %arg0) : !cir.bool, !cir.bool36 %1 = cir.unary(not, %0) : !cir.bool, !cir.bool37 cir.return %1 : !cir.bool38 }39 // CHECK: cir.func{{.*}} @unary_not(%arg0: !cir.bool) -> !cir.bool40 // CHECK-NEXT: cir.return %arg0 : !cir.bool41 42 cir.func @unary_poison() -> !s32i {43 %0 = cir.const #cir.poison : !s32i44 %1 = cir.unary(inc, %0) : !s32i, !s32i45 cir.return %1 : !s32i46 }47 // CHECK: @unary_poison48 // CHECK-NEXT: %[[P:.+]] = cir.const #cir.poison : !s32i49 // CHECK-NEXT: cir.return %[[P]] : !s32i50 // CHECK-NEXT: }51 52 cir.func @cast1(%arg0: !cir.bool) -> !cir.bool {53 %0 = cir.cast bool_to_int %arg0 : !cir.bool -> !s32i54 %1 = cir.cast int_to_bool %0 : !s32i -> !cir.bool55 cir.return %1 : !cir.bool56 }57 // CHECK: cir.func{{.*}} @cast1(%[[ARG0:.*]]: !cir.bool) -> !cir.bool58 // CHECK-NEXT: cir.return %[[ARG0]] : !cir.bool59 60 cir.func @cast2(%arg0: !s32i) -> !cir.bool {61 %0 = cir.cast int_to_bool %arg0 : !s32i -> !cir.bool62 %1 = cir.cast bool_to_int %0 : !cir.bool -> !s32i63 %2 = cir.cast integral %1 : !s32i -> !s64i64 %3 = cir.cast int_to_bool %2 : !s64i -> !cir.bool65 cir.return %3 : !cir.bool66 }67 // CHECK: cir.func{{.*}} @cast2(%[[ARG0:.*]]: !s32i) -> !cir.bool68 // CHECK-NEXT: %[[CAST:.*]] = cir.cast int_to_bool %[[ARG0]] : !s32i -> !cir.bool69 // CHECK-NEXT: cir.return %[[CAST]] : !cir.bool70 71 cir.func @no_fold_cast(%arg0: !s32i) -> !s64i {72 %0 = cir.cast int_to_bool %arg0 : !s32i -> !cir.bool73 %1 = cir.cast bool_to_int %0 : !cir.bool -> !s32i74 %2 = cir.cast integral %1 : !s32i -> !s64i75 cir.return %2 : !s64i76 }77 // CHECK: cir.func{{.*}} @no_fold_cast(%[[ARG0:.*]]: !s32i) -> !s64i78 // CHECK-NEXT: %[[CAST:.*]] = cir.cast int_to_bool %[[ARG0]] : !s32i -> !cir.bool79 // CHECK-NEXT: %[[CAST2:.*]] = cir.cast bool_to_int %[[CAST]] : !cir.bool -> !s32i80 // CHECK-NEXT: %[[CAST3:.*]] = cir.cast integral %[[CAST2]] : !s32i -> !s64i81 // CHECK-NEXT: cir.return %[[CAST3]] : !s64i82 83 cir.func @cast_poison() -> !s64i {84 %0 = cir.const #cir.poison : !s32i85 %1 = cir.cast integral %0 : !s32i -> !s64i86 cir.return %1 : !s64i87 }88 // CHECK: @cast_poison89 // CHECK-NEXT: %[[P:.+]] = cir.const #cir.poison : !s64i90 // CHECK-NEXT: cir.return %[[P]] : !s64i91 // CHECK-NEXT: }92 93}94