================
@@ -3027,10 +3028,80 @@ void CodeGenFunction::EmitMultiVersionResolver(
case llvm::Triple::riscv64:
EmitRISCVMultiVersionResolver(Resolver, Options);
return;
-
+ case llvm::Triple::ppc:
+ case llvm::Triple::ppc64:
+ if (getContext().getTargetInfo().getTriple().isOSAIX()) {
+ EmitPPCAIXMultiVersionResolver(Resolver, Options);
+ return;
+ }
+ [[fallthrough]];
default:
- assert(false && "Only implemented for x86, AArch64 and RISC-V targets");
+ assert(false &&
+ "Only implemented for x86, AArch64, RISC-V, and PowerPC targets");
+ }
+}
+
+/*
+ * Desc_t *foo_desc = ppc_get_function_descriptor(&foo);
+ * if (foo_desc->addr == ppc_get_function_entry(&foo)) {
+ * FuncPtr fp = resolver();
+ * __c11_atomic_store((_Atomic FuncPtr *)&foo_desc->addr, fp, 0);
+ * }
+ * return ((int (*)(int)) foo_desc)(a);
+ */
+void CodeGenFunction::EmitPPCAIXMultiVersionResolver(
----------------
diggerlin wrote:
it looks the function change the IR generated , we do not have the test for
the functionality ?
https://github.com/llvm/llvm-project/pull/177428
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits