brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 5606f9e Raw
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