blob: 5f37a8a36b95bb2296318706cddff7dae55aedb9 [file] [log] [blame]
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir -mmlir --mlir-print-ir-before=cir-simplify %s -o %t1.cir 2>&1 | FileCheck -check-prefix=CIR-BEFORE %s
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir -mmlir --mlir-print-ir-after=cir-simplify %s -o %t2.cir 2>&1 | FileCheck -check-prefix=CIR-AFTER %s
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t.ll
// RUN: FileCheck --input-file=%t.ll --check-prefix=LLVM %s
int test(bool x) {
return x ? 1 : 2;
}
// CIR-BEFORE: cir.func @_Z4testb
// CIR-BEFORE: %{{.+}} = cir.ternary(%{{.+}}, true {
// CIR-BEFORE-NEXT: %[[#A:]] = cir.const #cir.int<1> : !s32i
// CIR-BEFORE-NEXT: cir.yield %[[#A]] : !s32i
// CIR-BEFORE-NEXT: }, false {
// CIR-BEFORE-NEXT: %[[#B:]] = cir.const #cir.int<2> : !s32i
// CIR-BEFORE-NEXT: cir.yield %[[#B]] : !s32i
// CIR-BEFORE-NEXT: }) : (!cir.bool) -> !s32i
// CIR-BEFORE: }
// CIR-AFTER: cir.func @_Z4testb
// CIR-AFTER: %[[#A:]] = cir.const #cir.int<1> : !s32i
// CIR-AFTER-NEXT: %[[#B:]] = cir.const #cir.int<2> : !s32i
// CIR-AFTER-NEXT: %{{.+}} = cir.select if %{{.+}} then %[[#A]] else %[[#B]] : (!cir.bool, !s32i, !s32i) -> !s32i
// CIR-AFTER: }
// LLVM: define dso_local i32 @_Z4testb
// LLVM: %{{.+}} = select i1 %{{.+}}, i32 1, i32 2
// LLVM: }
int test2(bool cond) {
constexpr int x = 1;
constexpr int y = 2;
return cond ? x : y;
}
// CIR-BEFORE: cir.func @_Z5test2b
// CIR-BEFORE: %[[#COND:]] = cir.load %{{.+}} : !cir.ptr<!cir.bool>, !cir.bool
// CIR-BEFORE-NEXT: %{{.+}} = cir.ternary(%[[#COND]], true {
// CIR-BEFORE-NEXT: %[[#A:]] = cir.const #cir.int<1> : !s32i
// CIR-BEFORE-NEXT: cir.yield %[[#A]] : !s32i
// CIR-BEFORE-NEXT: }, false {
// CIR-BEFORE-NEXT: %[[#B:]] = cir.const #cir.int<2> : !s32i
// CIR-BEFORE-NEXT: cir.yield %[[#B]] : !s32i
// CIR-BEFORE-NEXT: }) : (!cir.bool) -> !s32i
// CIR-BEFORE: }
// CIR-AFTER: cir.func @_Z5test2b
// CIR-AFTER: %[[#COND:]] = cir.load %{{.+}} : !cir.ptr<!cir.bool>, !cir.bool
// CIR-AFTER-NEXT: %[[#A:]] = cir.const #cir.int<1> : !s32i
// CIR-AFTER-NEXT: %[[#B:]] = cir.const #cir.int<2> : !s32i
// CIR-AFTER-NEXT: %{{.+}} = cir.select if %[[#COND]] then %[[#A]] else %[[#B]] : (!cir.bool, !s32i, !s32i) -> !s32i
// CIR-AFTER: }
// LLVM: define dso_local i32 @_Z5test2b
// LLVM: %{{.+}} = select i1 %{{.+}}, i32 1, i32 2
// LLVM: }