From e23ae9456904baa62fdd486fd72f735803efc7ca Mon Sep 17 00:00:00 2001 From: ghehg Date: Fri, 27 Sep 2024 09:02:04 -0700 Subject: [PATCH 1/2] generate code for builtin call with FPContractMode=1 MathErrno=1 --- clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp | 6 ++++-- clang/test/CIR/CodeGen/builtin-abort.c | 13 +++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 clang/test/CIR/CodeGen/builtin-abort.c diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index ab4525d38b55..27816d833e91 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -337,7 +337,9 @@ RValue CIRGenFunction::buildBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, // '#pragma float_control(precise, on)'. This pragma disables fast-math, // which implies math-errno. if (E->hasStoredFPFeatures()) { - llvm_unreachable("NYI"); + FPOptionsOverride OP = E->getFPFeatures(); + if (OP.hasMathErrnoOverride()) + ErrnoOverriden = OP.getMathErrnoOverride(); } // True if 'atttibute__((optnone)) is used. This attibute overrides // fast-math which implies math-errno. @@ -1627,4 +1629,4 @@ mlir::cir::FuncOp CIRGenModule::getBuiltinLibFunction(const FunctionDecl *FD, auto Ty = getTypes().ConvertType(FD->getType()); return GetOrCreateCIRFunction(Name, Ty, D, /*ForVTable=*/false); -} \ No newline at end of file +} diff --git a/clang/test/CIR/CodeGen/builtin-abort.c b/clang/test/CIR/CodeGen/builtin-abort.c new file mode 100644 index 000000000000..9c1971bc0b1a --- /dev/null +++ b/clang/test/CIR/CodeGen/builtin-abort.c @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -triple aarch64-none-linux-android21 -fclangir -emit-cir %s -o %t.cir +// RUN: FileCheck --check-prefix=CIR --input-file=%t.cir %s +// RUN: %clang_cc1 -triple aarch64-none-linux-android21 -fclangir -emit-llvm %s -o %t.ll +// RUN: FileCheck --input-file=%t.ll %s -check-prefix=LLVM + +void abort(); +void test() { abort(); } + +// CIR-LABEL: test +// CIR: cir.call @abort() : () -> () + +// LLVM-LABEL: test +// LLVM: call void @abort() From c7f3e230c865c25658d2492e80194532455c7a7f Mon Sep 17 00:00:00 2001 From: ghehg Date: Fri, 27 Sep 2024 09:02:27 -0700 Subject: [PATCH 2/2] add test --- clang/test/CIR/CodeGen/builtin-abort.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/clang/test/CIR/CodeGen/builtin-abort.c b/clang/test/CIR/CodeGen/builtin-abort.c index 9c1971bc0b1a..d60d0efedd50 100644 --- a/clang/test/CIR/CodeGen/builtin-abort.c +++ b/clang/test/CIR/CodeGen/builtin-abort.c @@ -6,6 +6,8 @@ void abort(); void test() { abort(); } +// TODO: Add test to test unreachable when CIR support for NORETURN is added. + // CIR-LABEL: test // CIR: cir.call @abort() : () -> ()