[Ventus][fix]Change kernel local arg address
This commit is contained in:
parent
b35eefb5de
commit
d3b22c0d7f
|
@ -12,6 +12,7 @@
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "RISCVISelLowering.h"
|
#include "RISCVISelLowering.h"
|
||||||
|
#include "MCTargetDesc/RISCVMCTargetDesc.h"
|
||||||
#include "MCTargetDesc/RISCVMatInt.h"
|
#include "MCTargetDesc/RISCVMatInt.h"
|
||||||
#include "RISCV.h"
|
#include "RISCV.h"
|
||||||
#include "RISCVMachineFunctionInfo.h"
|
#include "RISCVMachineFunctionInfo.h"
|
||||||
|
@ -7486,6 +7487,7 @@ SDValue RISCVTargetLowering::lowerKernArgParameterPtr(SelectionDAG &DAG,
|
||||||
|
|
||||||
return DAG.getObjectPtrOffset(SL, BasePtr, TypeSize::Fixed(Offset));
|
return DAG.getObjectPtrOffset(SL, BasePtr, TypeSize::Fixed(Offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
SDValue RISCVTargetLowering::getFPExtOrFPRound(SelectionDAG &DAG,
|
SDValue RISCVTargetLowering::getFPExtOrFPRound(SelectionDAG &DAG,
|
||||||
SDValue Op,
|
SDValue Op,
|
||||||
const SDLoc &DL,
|
const SDLoc &DL,
|
||||||
|
@ -7566,6 +7568,17 @@ SDValue RISCVTargetLowering::lowerKernargMemParameter(
|
||||||
MachineMemOperand::MODereferenceable |
|
MachineMemOperand::MODereferenceable |
|
||||||
MachineMemOperand::MOInvariant);
|
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);
|
SDValue Val = convertArgType(DAG, VT, MemVT, SL, Load, Signed, Arg);
|
||||||
// return DAG.getMergeValues({ Load, Load.getValue(1) }, SL);
|
// return DAG.getMergeValues({ Load, Load.getValue(1) }, SL);
|
||||||
return DAG.getMergeValues({ Val, Load.getValue(1) }, SL);
|
return DAG.getMergeValues({ Val, Load.getValue(1) }, SL);
|
||||||
|
|
Loading…
Reference in New Issue