[Ventus][fix]Change kernel local arg address

This commit is contained in:
ziliangzl 2024-06-24 16:58:00 +08:00
parent b35eefb5de
commit d3b22c0d7f
1 changed files with 13 additions and 0 deletions

View File

@ -12,6 +12,7 @@
//===----------------------------------------------------------------------===//
#include "RISCVISelLowering.h"
#include "MCTargetDesc/RISCVMCTargetDesc.h"
#include "MCTargetDesc/RISCVMatInt.h"
#include "RISCV.h"
#include "RISCVMachineFunctionInfo.h"
@ -7486,6 +7487,7 @@ SDValue RISCVTargetLowering::lowerKernArgParameterPtr(SelectionDAG &DAG,
return DAG.getObjectPtrOffset(SL, BasePtr, TypeSize::Fixed(Offset));
}
SDValue RISCVTargetLowering::getFPExtOrFPRound(SelectionDAG &DAG,
SDValue Op,
const SDLoc &DL,
@ -7566,6 +7568,17 @@ SDValue RISCVTargetLowering::lowerKernargMemParameter(
MachineMemOperand::MODereferenceable |
MachineMemOperand::MOInvariant);
if(Arg->Flags.getPointerAddrSpace() == RISCVAS::LOCAL_ADDRESS) {
MVT XLenVT = Subtarget.getXLenVT();
MachineSDNode *LDSNode = DAG.getMachineNode(
RISCV::CSRRS, SL, XLenVT,
DAG.getTargetConstant(0x806, SL, XLenVT),
DAG.getRegister(RISCV::X0, XLenVT));
SDValue Add = DAG.getObjectPtrOffset(SL, Load, SDValue(LDSNode, 0));
SDValue Val = convertArgType(DAG, VT, MemVT, SL, Add, Signed, Arg);
return DAG.getMergeValues({ Val, Load.getValue(1) }, SL);
}
SDValue Val = convertArgType(DAG, VT, MemVT, SL, Load, Signed, Arg);
// return DAG.getMergeValues({ Load, Load.getValue(1) }, SL);
return DAG.getMergeValues({ Val, Load.getValue(1) }, SL);