61 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_true(%arg0 : !s32i, %arg1 : !s32i) -> !s32i {8 %0 = cir.const #cir.bool<true> : !cir.bool9 %1 = cir.select if %0 then %arg0 else %arg1 : (!cir.bool, !s32i, !s32i) -> !s32i10 cir.return %1 : !s32i11 }12 13 // CHECK: cir.func{{.*}} @fold_true(%[[ARG0:.+]]: !s32i, %[[ARG1:.+]]: !s32i) -> !s32i {14 // CHECK-NEXT: cir.return %[[ARG0]] : !s32i15 // CHECK-NEXT: }16 17 cir.func @fold_false(%arg0 : !s32i, %arg1 : !s32i) -> !s32i {18 %0 = cir.const #cir.bool<false> : !cir.bool19 %1 = cir.select if %0 then %arg0 else %arg1 : (!cir.bool, !s32i, !s32i) -> !s32i20 cir.return %1 : !s32i21 }22 23 // CHECK: cir.func{{.*}} @fold_false(%[[ARG0:.+]]: !s32i, %[[ARG1:.+]]: !s32i) -> !s32i {24 // CHECK-NEXT: cir.return %[[ARG1]] : !s32i25 // CHECK-NEXT: }26 27 cir.func @fold_to_const(%arg0 : !cir.bool) -> !s32i {28 %0 = cir.const #cir.int<42> : !s32i29 %1 = cir.select if %arg0 then %0 else %0 : (!cir.bool, !s32i, !s32i) -> !s32i30 cir.return %1 : !s32i31 }32 33 // CHECK: cir.func{{.*}} @fold_to_const(%{{.+}}: !cir.bool) -> !s32i {34 // CHECK-NEXT: %[[#A:]] = cir.const #cir.int<42> : !s32i35 // CHECK-NEXT: cir.return %[[#A]] : !s32i36 // CHECK-NEXT: }37 38 cir.func @simplify_1(%arg0 : !cir.bool) -> !cir.bool {39 %0 = cir.const #cir.bool<true> : !cir.bool40 %1 = cir.const #cir.bool<false> : !cir.bool41 %2 = cir.select if %arg0 then %0 else %1 : (!cir.bool, !cir.bool, !cir.bool) -> !cir.bool42 cir.return %2 : !cir.bool43 }44 45 // CHECK: cir.func{{.*}} @simplify_1(%[[ARG0:.+]]: !cir.bool) -> !cir.bool {46 // CHECK-NEXT: cir.return %[[ARG0]] : !cir.bool47 // CHECK-NEXT: }48 49 cir.func @simplify_2(%arg0 : !cir.bool) -> !cir.bool {50 %0 = cir.const #cir.bool<false> : !cir.bool51 %1 = cir.const #cir.bool<true> : !cir.bool52 %2 = cir.select if %arg0 then %0 else %1 : (!cir.bool, !cir.bool, !cir.bool) -> !cir.bool53 cir.return %2 : !cir.bool54 }55 56 // CHECK: cir.func{{.*}} @simplify_2(%[[ARG0:.+]]: !cir.bool) -> !cir.bool {57 // CHECK-NEXT: %[[#A:]] = cir.unary(not, %[[ARG0]]) : !cir.bool, !cir.bool58 // CHECK-NEXT: cir.return %[[#A]] : !cir.bool59 // CHECK-NEXT: }60}61