[flang-commits] [flang] [llvm] [flang][flang-rt] Add support for non-standard TIMEF intrinsic (PR #185377)
Eugene Epshteyn via flang-commits
flang-commits at lists.llvm.org
Tue Mar 31 06:33:49 PDT 2026
================
@@ -413,6 +416,54 @@ double RTNAME(Dsecnds)(double *refTime, const char *sourceFile, int line) {
// GNU extension function TIME()
std::int64_t RTNAME(time)() { return time(nullptr); }
+/*
+ * Extension function TIMEF().
+ * By default, it returns number of seconds that have
+ * elapsed since the first time TIMEF was called.
+ * For the first call, it returns 0.
+ *
+ * FLANG_TIMEF_IN_MILLISECONDS=1 sets the resolution to
+ * milliseconds
+ */
+double RTNAME(Timef)() {
+#ifndef _WIN32
+ // posix-compliant
+ static clock_t start = (clock_t)-1;
+ static long ticks_per_sec = 0;
+ struct tms b;
+ clock_t current;
+ double duration;
+ {
+ CriticalSection critical{timef_lock};
+ if (ticks_per_sec <= 0) {
+ ticks_per_sec = sysconf(_SC_CLK_TCK);
+ if (ticks_per_sec <= 0)
+ return 0.0;
+ }
+
+ if (times(&b) == (clock_t)-1) {
----------------
eugeneepshteyn wrote:
Let's change `(clock_t)-1` to `static_cast<clock_t>(-1)`. If you think it's too ugly, you could declare it once in this function as `constexpr clock_t` error constant :-)
https://github.com/llvm/llvm-project/pull/185377
More information about the flang-commits
mailing list