[clang] [CIR] Support __builtin_readcyclecounter (PR #231531)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 13 07:46:07 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clangir
Author: Arseniy Obolenskiy (aobolensk)
<details>
<summary>Changes</summary>
Simple LLVM IR intrinsic support
---
Full diff: https://github.com/llvm/llvm-project/pull/231531.diff
2 Files Affected:
- (modified) clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp (+2)
- (added) clang/test/CIR/CodeGenBuiltins/builtin-readcyclecounter.c (+11)
``````````diff
diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp
index 6b9597e32b18ab..fc7d63d9092aea 100644
--- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp
@@ -1927,6 +1927,8 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID,
return RValue::get(nullptr);
}
case Builtin::BI__builtin_readcyclecounter:
+ return RValue::get(builder.emitIntrinsicCallOp(
+ getLoc(e->getExprLoc()), "readcyclecounter", builder.getUInt64Ty()));
case Builtin::BI__builtin_readsteadycounter:
return errorBuiltinNYI(*this, e, builtinID);
case Builtin::BI__builtin___clear_cache: {
diff --git a/clang/test/CIR/CodeGenBuiltins/builtin-readcyclecounter.c b/clang/test/CIR/CodeGenBuiltins/builtin-readcyclecounter.c
new file mode 100644
index 00000000000000..9b4c47b35defeb
--- /dev/null
+++ b/clang/test/CIR/CodeGenBuiltins/builtin-readcyclecounter.c
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o - | FileCheck %s -check-prefix=CIR
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o - | FileCheck %s -check-prefix=LLVM
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s -check-prefix=LLVM
+
+// CIR-LABEL: cir.func {{.*}} @read_cycles(
+// CIR: %{{.+}} = cir.call_llvm_intrinsic "readcyclecounter" : () -> !u64i
+// LLVM-LABEL: @read_cycles(
+// LLVM: %{{.+}} = call i64 @llvm.readcyclecounter()
+unsigned long long read_cycles(void) {
+ return __builtin_readcyclecounter();
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/231531
More information about the cfe-commits
mailing list