[llvm] TargetLibraryInfo: Add DragonFly function list (PR #150885)

Brad Smith via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 27 23:27:25 PDT 2025


https://github.com/brad0 created https://github.com/llvm/llvm-project/pull/150885

None

>From a266faa4cfc75baa274232037e804fbb495e0df8 Mon Sep 17 00:00:00 2001
From: Brad Smith <brad at comstyle.com>
Date: Mon, 28 Jul 2025 01:20:36 -0400
Subject: [PATCH] TargetLibraryInfo: Add DragonFly function list

---
 llvm/lib/Analysis/TargetLibraryInfo.cpp | 28 ++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp
index 6e9276669eb70..56f3160607746 100644
--- a/llvm/lib/Analysis/TargetLibraryInfo.cpp
+++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp
@@ -115,7 +115,7 @@ static bool hasBcmp(const Triple &TT) {
     return TT.isGNUEnvironment() || TT.isMusl();
   // Both NetBSD and OpenBSD are planning to remove the function. Windows does
   // not have it.
-  return TT.isOSFreeBSD() || TT.isOSSolaris();
+  return TT.isOSFreeBSD() || TT.isOSDragonFly() ||  TT.isOSSolaris();
 }
 
 static bool isCallingConvCCompatible(CallingConv::ID CC, const Triple &TT,
@@ -605,10 +605,11 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T,
     TLI.setUnavailable(LibFunc_exp10l);
   }
 
-  // ffsl is available on at least Darwin, Mac OS X, iOS, FreeBSD, and
+  // ffsl is available on at least Darwin, Mac OS X, iOS, FreeBSD, DragonFly and
   // Linux (GLIBC):
   // http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/ffsl.3.html
   // http://svn.freebsd.org/base/head/lib/libc/string/ffsl.c
+  // https://gitweb.dragonflybsd.org/?p=dragonfly.git;a=blob;f=lib/libc/string/ffsl.c
   // http://www.gnu.org/software/gnulib/manual/html_node/ffsl.html
   switch (T.getOS()) {
   case Triple::Darwin:
@@ -618,14 +619,16 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T,
   case Triple::WatchOS:
   case Triple::XROS:
   case Triple::FreeBSD:
+  case Triple::DragonFly:
   case Triple::Linux:
     break;
   default:
     TLI.setUnavailable(LibFunc_ffsl);
   }
 
-  // ffsll is available on at least FreeBSD and Linux (GLIBC):
+  // ffsll is available on at least FreeBSD, DragonFly and Linux (GLIBC):
   // http://svn.freebsd.org/base/head/lib/libc/string/ffsll.c
+  // https://gitweb.dragonflybsd.org/?p=dragonfly.git;a=blob;f=lib/libc/string/ffsll.c
   // http://www.gnu.org/software/gnulib/manual/html_node/ffsll.html
   switch (T.getOS()) {
   case Triple::Darwin:
@@ -635,17 +638,21 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T,
   case Triple::WatchOS:
   case Triple::XROS:
   case Triple::FreeBSD:
+  case Triple::DragonFly:
   case Triple::Linux:
     break;
   default:
     TLI.setUnavailable(LibFunc_ffsll);
   }
 
-  // The following functions are available on at least FreeBSD:
+  // The following functions are available on at least FreeBSD and DragonFly:
   // http://svn.freebsd.org/base/head/lib/libc/string/fls.c
   // http://svn.freebsd.org/base/head/lib/libc/string/flsl.c
   // http://svn.freebsd.org/base/head/lib/libc/string/flsll.c
-  if (!T.isOSFreeBSD()) {
+  // https://gitweb.dragonflybsd.org/?p=dragonfly.git;a=blob;f=lib/libc/string/fls.c
+  // https://gitweb.dragonflybsd.org/?p=dragonfly.git;a=blob;f=lib/libc/string/flsl.c
+  // https://gitweb.dragonflybsd.org/?p=dragonfly.git;a=blob;f=lib/libc/string/flsll.c
+  if (!T.isOSFreeBSD() && !T.isOSDragonFly()) {
     TLI.setUnavailable(LibFunc_fls);
     TLI.setUnavailable(LibFunc_flsl);
     TLI.setUnavailable(LibFunc_flsll);
@@ -903,6 +910,17 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T,
     TLI.setUnavailable(LibFunc_roundevenl);
   }
 
+  if (T.isOSDragonFly()) {
+    TLI.setAvailable(LibFunc_fputc_unlocked);
+    TLI.setAvailable(LibFunc_fputs_unlocked);
+    TLI.setAvailable(LibFunc_fread_unlocked);
+    TLI.setAvailable(LibFunc_fwrite_unlocked);
+    TLI.setAvailable(LibFunc_getc_unlocked);
+    TLI.setAvailable(LibFunc_getchar_unlocked);
+    TLI.setAvailable(LibFunc_putc_unlocked);
+    TLI.setAvailable(LibFunc_putchar_unlocked);
+  }
+
   // As currently implemented in clang, NVPTX code has no standard library to
   // speak of.  Headers provide a standard-ish library implementation, but many
   // of the signatures are wrong -- for example, many libm functions are not



More information about the llvm-commits mailing list