[clang] [Clang][CodeGen] Lookup standard library declarations for builtins to… (PR #204792)

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 23 01:03:29 PDT 2026


zmodem wrote:

Maybe that's the best place to approach this from. Consider:

```
float f(float x, float y) {
  return __builtin_hypotf(x, y);
}
```

Compiling (on Windows) with `clang -Os -S -emit-llvm -target i686-pc-win32 -o - \src\temp\a.c -D_MT -D_DLL` gives

```
; Function Attrs: nounwind optsize
define dso_local float @f(float noundef %0, float noundef %1) local_unnamed_addr #0 {
  %3 = tail call float @hypotf(float noundef %0, float noundef %1) #2
  ret float %3
}

; Function Attrs: nounwind optsize
declare dso_local float @hypotf(float noundef, float noundef) local_unnamed_addr #1
```

if we include `math.h` first:

```
#include <math.h>
float f(float x, float y) {
  return __builtin_hypotf(x, y);
}
```

I get:

```
; Function Attrs: nounwind optsize
define dso_local float @f(float noundef %0, float noundef %1) local_unnamed_addr #0 {
  %3 = tail call float @_hypotf(float noundef %0, float noundef %1) #2, !inline_history !6
  ret float %3
}

; Function Attrs: optsize
declare dllimport float @_hypotf(float noundef, float noundef) local_unnamed_addr #1
```

I think we want the latter result regardless of whether the header was included. The modules issue is just a more complicated version of the same problem.


https://github.com/llvm/llvm-project/pull/204792


More information about the cfe-commits mailing list