[llvm] [AArch64] Implement -fno-plt for SelectionDAG/GlobalISel (PR #78890)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 7 19:58:51 PST 2024
================
@@ -1293,8 +1293,19 @@ bool AArch64CallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
!Subtarget.noBTIAtReturnTwice() &&
MF.getInfo<AArch64FunctionInfo>()->branchTargetEnforcement())
Opc = AArch64::BLR_BTI;
- else
+ else {
+ // For an intrinsic call (e.g. memset), use GOT if "RtLibUseGOT" (-fno-plt)
+ // is set.
+ if (Info.Callee.isSymbol() && F.getParent()->getRtLibUseGOT()) {
+ auto Reg =
+ MRI.createGenericVirtualRegister(getLLTForType(*F.getType(), DL));
+ auto MIB = MIRBuilder.buildInstr(TargetOpcode::G_GLOBAL_VALUE);
+ DstOp(Reg).addDefToMIB(MRI, MIB);
----------------
MaskRay wrote:
`buildInstr(TargetOpcode::G_GLOBAL_VALUE)` cannot be CSEed today, and I think this patch should not change it.
It seems that only the `buildInstr` overload with `DstOps/SrcOps` can perform CSE. `MachineIRBuilder::buildGlobalValue` does not call this overload.
https://github.com/llvm/llvm-project/pull/78890
More information about the llvm-commits
mailing list