[clang] [llvm] [PowerPC] Add AES Builtins (PR #186895)
Lei Huang via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 28 06:01:19 PDT 2026
================
@@ -1138,20 +1138,84 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
break;
#include "clang/Basic/BuiltinsPPC.def"
}
- if (BuiltinID == PPC::BI__builtin_vsx_lxvp ||
- BuiltinID == PPC::BI__builtin_vsx_stxvp ||
- BuiltinID == PPC::BI__builtin_mma_lxvp ||
- BuiltinID == PPC::BI__builtin_mma_stxvp) {
- if (BuiltinID == PPC::BI__builtin_vsx_lxvp ||
- BuiltinID == PPC::BI__builtin_mma_lxvp) {
- Ops[0] = Builder.CreateGEP(Int8Ty, Ops[1], Ops[0]);
- } else {
- Ops[1] = Builder.CreateGEP(Int8Ty, Ops[2], Ops[1]);
- }
+ // Handle Accumulate=false custom builtins that returns directly.
+ switch (BuiltinID) {
+ case PPC::BI__builtin_vsx_lxvp:
+ case PPC::BI__builtin_mma_lxvp:
+ Ops[0] = Builder.CreateGEP(Int8Ty, Ops[1], Ops[0]);
+ Ops.pop_back();
+ return Builder.CreateCall(CGM.getIntrinsic(ID), Ops, "");
+ case PPC::BI__builtin_vsx_stxvp:
+ case PPC::BI__builtin_mma_stxvp:
+ Ops[1] = Builder.CreateGEP(Int8Ty, Ops[2], Ops[1]);
Ops.pop_back();
- llvm::Function *F = CGM.getIntrinsic(ID);
- return Builder.CreateCall(F, Ops, "");
+ return Builder.CreateCall(CGM.getIntrinsic(ID), Ops, "");
+ case PPC::BI__builtin_disassemble_dmr:
+ Ops[1] = Builder.CreateLoad(EmitPointerWithAlignment(E->getArg(1)));
+ return Builder.CreateAlignedStore(Ops[1], Ops[0], MaybeAlign());
+
+ // Handle AES encrypt paired builtins - they return a value directly.
+ // For variant builtins, add the appropriate immediate value.
+ case PPC::BI__builtin_aes128_encrypt_paired:
+ Ops.push_back(llvm::ConstantInt::get(Int32Ty, 0));
+ return Builder.CreateCall(CGM.getIntrinsic(ID), Ops, "");
----------------
lei137 wrote:
I prefer to keep this as it's clear and simple and we can easily see the difference for the different builtins.
https://github.com/llvm/llvm-project/pull/186895
More information about the cfe-commits
mailing list