[clang] [FMV][AArch64] Do not emit ifunc resolver on use. (PR #97761)
Alexandros Lamprineas via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 8 07:00:43 PDT 2024
================
@@ -59,15 +59,22 @@ int bar() {
return m.goo(1) + foo(1) + foo();
}
+// Example to demonstrate that at the point of use we haven't yet seen the default.
+// At that point a declaration for the unmangled symbol is emitted, which is later
+// replaced by the ifunc symbol (once we have seen the default definition).
+__attribute__((target_version("aes"))) void fmv(void) {}
+void caller(void) { fmv(); }
+__attribute__((target_version("default"))) void fmv(void) {}
----------------
labrinea wrote:
If we hadn't replaced the unmangled symbol, the compiler would assert because of type mismatch with the ifunc symbol:
```
Found return instr that returns non-void in Function of void return type!
ret ptr @fmv._Maes
voidFound return instr that returns non-void in Function of void return type!
ret ptr @fmv.default
voidfatal error: error in backend: Broken module found, compilation aborted!
```
When the versioned function is called but no resolver is emitted (if we comment out the default definition), we would like to see that a a declaration is emitted. However, I couldn't get the script `update_cc_test_checks.py` do that for me.
```
declare void @fmv()
```
https://github.com/llvm/llvm-project/pull/97761
More information about the cfe-commits
mailing list