// RUN: cir-opt -cir-canonicalize -cir-simplify -o %t.cir %s // RUN: FileCheck --input-file=%t.cir %s !s32i = !cir.int module { cir.func @fold_true(%arg0 : !s32i, %arg1 : !s32i) -> !s32i { %0 = cir.const #cir.bool : !cir.bool %1 = cir.select if %0 then %arg0 else %arg1 : (!cir.bool, !s32i, !s32i) -> !s32i cir.return %1 : !s32i } // CHECK: cir.func{{.*}} @fold_true(%[[ARG0:.+]]: !s32i, %[[ARG1:.+]]: !s32i) -> !s32i { // CHECK-NEXT: cir.return %[[ARG0]] : !s32i // CHECK-NEXT: } cir.func @fold_false(%arg0 : !s32i, %arg1 : !s32i) -> !s32i { %0 = cir.const #cir.bool : !cir.bool %1 = cir.select if %0 then %arg0 else %arg1 : (!cir.bool, !s32i, !s32i) -> !s32i cir.return %1 : !s32i } // CHECK: cir.func{{.*}} @fold_false(%[[ARG0:.+]]: !s32i, %[[ARG1:.+]]: !s32i) -> !s32i { // CHECK-NEXT: cir.return %[[ARG1]] : !s32i // CHECK-NEXT: } cir.func @fold_to_const(%arg0 : !cir.bool) -> !s32i { %0 = cir.const #cir.int<42> : !s32i %1 = cir.select if %arg0 then %0 else %0 : (!cir.bool, !s32i, !s32i) -> !s32i cir.return %1 : !s32i } // CHECK: cir.func{{.*}} @fold_to_const(%{{.+}}: !cir.bool) -> !s32i { // CHECK-NEXT: %[[#A:]] = cir.const #cir.int<42> : !s32i // CHECK-NEXT: cir.return %[[#A]] : !s32i // CHECK-NEXT: } cir.func @simplify_1(%arg0 : !cir.bool) -> !cir.bool { %0 = cir.const #cir.bool : !cir.bool %1 = cir.const #cir.bool : !cir.bool %2 = cir.select if %arg0 then %0 else %1 : (!cir.bool, !cir.bool, !cir.bool) -> !cir.bool cir.return %2 : !cir.bool } // CHECK: cir.func{{.*}} @simplify_1(%[[ARG0:.+]]: !cir.bool) -> !cir.bool { // CHECK-NEXT: cir.return %[[ARG0]] : !cir.bool // CHECK-NEXT: } cir.func @simplify_2(%arg0 : !cir.bool) -> !cir.bool { %0 = cir.const #cir.bool : !cir.bool %1 = cir.const #cir.bool : !cir.bool %2 = cir.select if %arg0 then %0 else %1 : (!cir.bool, !cir.bool, !cir.bool) -> !cir.bool cir.return %2 : !cir.bool } // CHECK: cir.func{{.*}} @simplify_2(%[[ARG0:.+]]: !cir.bool) -> !cir.bool { // CHECK-NEXT: %[[#A:]] = cir.not %[[ARG0]] : !cir.bool // CHECK-NEXT: cir.return %[[#A]] : !cir.bool // CHECK-NEXT: } }