mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-22 13:29:44 +00:00
R600/SI: Make sure SCRATCH_WAVE_OFFSET is added as Live-In to the function
This fixes a crash in an ocl conformance test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216219 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7af96a25fc
commit
5f52739370
@ -869,14 +869,19 @@ bool AMDGPUDAGToDAGISel::SelectMUBUFScratch(SDValue Addr, SDValue &Rsrc,
|
|||||||
const SIRegisterInfo *TRI =
|
const SIRegisterInfo *TRI =
|
||||||
static_cast<const SIRegisterInfo *>(MF.getSubtarget().getRegisterInfo());
|
static_cast<const SIRegisterInfo *>(MF.getSubtarget().getRegisterInfo());
|
||||||
MachineRegisterInfo &MRI = MF.getRegInfo();
|
MachineRegisterInfo &MRI = MF.getRegInfo();
|
||||||
|
const SITargetLowering& Lowering =
|
||||||
|
*static_cast<const SITargetLowering*>(getTargetLowering());
|
||||||
|
|
||||||
unsigned ScratchPtrReg =
|
unsigned ScratchPtrReg =
|
||||||
TRI->getPreloadedValue(MF, SIRegisterInfo::SCRATCH_PTR);
|
TRI->getPreloadedValue(MF, SIRegisterInfo::SCRATCH_PTR);
|
||||||
unsigned ScratchOffsetReg =
|
unsigned ScratchOffsetReg =
|
||||||
TRI->getPreloadedValue(MF, SIRegisterInfo::SCRATCH_WAVE_OFFSET);
|
TRI->getPreloadedValue(MF, SIRegisterInfo::SCRATCH_WAVE_OFFSET);
|
||||||
|
Lowering.CreateLiveInRegister(*CurDAG, &AMDGPU::SReg_32RegClass,
|
||||||
|
ScratchOffsetReg, MVT::i32);
|
||||||
|
|
||||||
Rsrc = buildScratchRSRC(CurDAG, DL, CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL, MRI.getLiveInVirtReg(ScratchPtrReg), MVT::i64));
|
Rsrc = buildScratchRSRC(CurDAG, DL,
|
||||||
|
CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL,
|
||||||
|
MRI.getLiveInVirtReg(ScratchPtrReg), MVT::i64));
|
||||||
SOffset = CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL,
|
SOffset = CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL,
|
||||||
MRI.getLiveInVirtReg(ScratchOffsetReg), MVT::i32);
|
MRI.getLiveInVirtReg(ScratchOffsetReg), MVT::i32);
|
||||||
|
|
||||||
|
@ -743,16 +743,9 @@ static SDNode *findUser(SDValue Value, unsigned Opcode) {
|
|||||||
|
|
||||||
SDValue SITargetLowering::LowerFrameIndex(SDValue Op, SelectionDAG &DAG) const {
|
SDValue SITargetLowering::LowerFrameIndex(SDValue Op, SelectionDAG &DAG) const {
|
||||||
|
|
||||||
MachineFunction &MF = DAG.getMachineFunction();
|
|
||||||
const SIInstrInfo *TII = static_cast<const SIInstrInfo *>(
|
|
||||||
getTargetMachine().getSubtargetImpl()->getInstrInfo());
|
|
||||||
const SIRegisterInfo &TRI = TII->getRegisterInfo();
|
|
||||||
FrameIndexSDNode *FINode = cast<FrameIndexSDNode>(Op);
|
FrameIndexSDNode *FINode = cast<FrameIndexSDNode>(Op);
|
||||||
unsigned FrameIndex = FINode->getIndex();
|
unsigned FrameIndex = FINode->getIndex();
|
||||||
|
|
||||||
CreateLiveInRegister(DAG, &AMDGPU::SReg_32RegClass,
|
|
||||||
TRI.getPreloadedValue(MF, SIRegisterInfo::SCRATCH_WAVE_OFFSET), MVT::i32);
|
|
||||||
|
|
||||||
return DAG.getTargetFrameIndex(FrameIndex, MVT::i32);
|
return DAG.getTargetFrameIndex(FrameIndex, MVT::i32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
; REQUIRES: asserts
|
|
||||||
; XFAIL: *
|
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs< %s
|
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs< %s
|
||||||
|
|
||||||
|
; This tests for a bug that caused a crash in
|
||||||
|
; AMDGPUDAGToDAGISel::SelectMUBUFScratch() which is used for selecting
|
||||||
|
; scratch loads and stores.
|
||||||
|
; CHECK-LABEL: @store_vector_ptrs
|
||||||
define void @store_vector_ptrs(<4 x i32*>* %out, <4 x [1024 x i32]*> %array) nounwind {
|
define void @store_vector_ptrs(<4 x i32*>* %out, <4 x [1024 x i32]*> %array) nounwind {
|
||||||
%p = getelementptr <4 x [1024 x i32]*> %array, <4 x i16> zeroinitializer, <4 x i16> <i16 16, i16 16, i16 16, i16 16>
|
%p = getelementptr <4 x [1024 x i32]*> %array, <4 x i16> zeroinitializer, <4 x i16> <i16 16, i16 16, i16 16, i16 16>
|
||||||
store <4 x i32*> %p, <4 x i32*>* %out
|
store <4 x i32*> %p, <4 x i32*>* %out
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user