3535#include "llvm/CodeGen/MachineFrameInfo.h"
3636#include "llvm/CodeGen/MachineFunction.h"
3737#include "llvm/CodeGen/MachineLoopInfo.h"
38+ #include "llvm/CodeGen/PseudoSourceValueManager.h"
3839#include "llvm/CodeGen/SDPatternMatch.h"
3940#include "llvm/IR/DiagnosticInfo.h"
4041#include "llvm/IR/IRBuilder.h"
@@ -2265,6 +2266,14 @@ bool SITargetLowering::isTypeDesirableForOp(unsigned Op, EVT VT) const {
22652266 return TargetLowering::isTypeDesirableForOp(Op, VT);
22662267}
22672268
2269+ MachinePointerInfo
2270+ SITargetLowering::getKernargSegmentPtrInfo(MachineFunction &MF) const {
2271+ // This isn't really a constant pool but close enough.
2272+ MachinePointerInfo PtrInfo(MF.getPSVManager().getConstantPool());
2273+ PtrInfo.AddrSpace = AMDGPUAS::CONSTANT_ADDRESS;
2274+ return PtrInfo;
2275+ }
2276+
22682277SDValue SITargetLowering::lowerKernArgParameterPtr(SelectionDAG &DAG,
22692278 const SDLoc &SL,
22702279 SDValue Chain,
@@ -2341,7 +2350,9 @@ SDValue SITargetLowering::lowerKernargMemParameter(
23412350 SelectionDAG &DAG, EVT VT, EVT MemVT, const SDLoc &SL, SDValue Chain,
23422351 uint64_t Offset, Align Alignment, bool Signed,
23432352 const ISD::InputArg *Arg) const {
2344- MachinePointerInfo PtrInfo(AMDGPUAS::CONSTANT_ADDRESS);
2353+
2354+ MachinePointerInfo PtrInfo =
2355+ getKernargSegmentPtrInfo(DAG.getMachineFunction());
23452356
23462357 // Try to avoid using an extload by loading earlier than the argument address,
23472358 // and extracting the relevant bits. The load should hopefully be merged with
@@ -2356,7 +2367,8 @@ SDValue SITargetLowering::lowerKernargMemParameter(
23562367 // TODO: If we passed in the base kernel offset we could have a better
23572368 // alignment than 4, but we don't really need it.
23582369 SDValue Ptr = lowerKernArgParameterPtr(DAG, SL, Chain, AlignDownOffset);
2359- SDValue Load = DAG.getLoad(MVT::i32, SL, Chain, Ptr, PtrInfo, Align(4),
2370+ SDValue Load = DAG.getLoad(MVT::i32, SL, Chain, Ptr,
2371+ PtrInfo.getWithOffset(AlignDownOffset), Align(4),
23602372 MachineMemOperand::MODereferenceable |
23612373 MachineMemOperand::MOInvariant);
23622374
@@ -2371,9 +2383,9 @@ SDValue SITargetLowering::lowerKernargMemParameter(
23712383 }
23722384
23732385 SDValue Ptr = lowerKernArgParameterPtr(DAG, SL, Chain, Offset);
2374- SDValue Load = DAG.getLoad(MemVT, SL, Chain, Ptr, PtrInfo, Alignment,
2375- MachineMemOperand::MODereferenceable |
2376- MachineMemOperand::MOInvariant);
2386+ SDValue Load = DAG.getLoad(
2387+ MemVT, SL, Chain, Ptr, PtrInfo.getWithOffset(Offset), Alignment,
2388+ MachineMemOperand::MODereferenceable | MachineMemOperand::MOInvariant);
23772389
23782390 SDValue Val = convertArgType(DAG, VT, MemVT, SL, Load, Signed, Arg);
23792391 return DAG.getMergeValues({Val, Load.getValue(1)}, SL);
@@ -8143,10 +8155,11 @@ SITargetLowering::loadImplicitKernelArgument(SelectionDAG &DAG, MVT VT,
81438155 MachineFunction &MF = DAG.getMachineFunction();
81448156 uint64_t Offset = getImplicitParameterOffset(MF, Param);
81458157 SDValue Ptr = lowerKernArgParameterPtr(DAG, DL, DAG.getEntryNode(), Offset);
8146- MachinePointerInfo PtrInfo(AMDGPUAS::CONSTANT_ADDRESS);
8147- return DAG.getLoad(VT, DL, DAG.getEntryNode(), Ptr, PtrInfo, Alignment,
8148- MachineMemOperand::MODereferenceable |
8149- MachineMemOperand::MOInvariant);
8158+ MachinePointerInfo PtrInfo =
8159+ getKernargSegmentPtrInfo(DAG.getMachineFunction());
8160+ return DAG.getLoad(
8161+ VT, DL, DAG.getEntryNode(), Ptr, PtrInfo.getWithOffset(Offset), Alignment,
8162+ MachineMemOperand::MODereferenceable | MachineMemOperand::MOInvariant);
81508163}
81518164
81528165SDValue SITargetLowering::lowerTrapHsaQueuePtr(SDValue Op,
0 commit comments