forked from OSchip/llvm-project
AMDGPU/GlobalISel: Select llvm.amdgcn.raw.tbuffer.store
This commit is contained in:
parent
ab9762a9f5
commit
0eb62d5b3f
|
@ -144,6 +144,8 @@ def : GINodeEquiv<G_AMDGPU_BUFFER_STORE_SHORT, SIbuffer_store_short>;
|
|||
def : GINodeEquiv<G_AMDGPU_BUFFER_STORE_BYTE, SIbuffer_store_byte>;
|
||||
def : GINodeEquiv<G_AMDGPU_BUFFER_STORE_FORMAT, SIbuffer_store_format>;
|
||||
def : GINodeEquiv<G_AMDGPU_BUFFER_STORE_FORMAT_D16, SIbuffer_store_format_d16>;
|
||||
def : GINodeEquiv<G_AMDGPU_TBUFFER_STORE_FORMAT, SItbuffer_store>;
|
||||
def : GINodeEquiv<G_AMDGPU_TBUFFER_STORE_FORMAT_D16, SItbuffer_store_d16>;
|
||||
|
||||
// FIXME: Check MMO is atomic
|
||||
def : GINodeEquiv<G_AMDGPU_ATOMIC_INC, SIatomic_inc>;
|
||||
|
|
|
@ -2775,6 +2775,9 @@ bool AMDGPULegalizerInfo::legalizeIntrinsic(MachineInstr &MI,
|
|||
case Intrinsic::amdgcn_raw_buffer_store_format:
|
||||
case Intrinsic::amdgcn_struct_buffer_store_format:
|
||||
return legalizeBufferStore(MI, MRI, B, false, true);
|
||||
case Intrinsic::amdgcn_raw_tbuffer_store:
|
||||
case Intrinsic::amdgcn_struct_tbuffer_store:
|
||||
return legalizeBufferStore(MI, MRI, B, true, true);
|
||||
case Intrinsic::amdgcn_raw_buffer_load:
|
||||
case Intrinsic::amdgcn_struct_buffer_load:
|
||||
return legalizeBufferLoad(MI, MRI, B, false, false);
|
||||
|
|
|
@ -2256,7 +2256,9 @@ void AMDGPURegisterBankInfo::applyMappingImpl(
|
|||
case AMDGPU::G_AMDGPU_BUFFER_STORE_BYTE:
|
||||
case AMDGPU::G_AMDGPU_BUFFER_STORE_SHORT:
|
||||
case AMDGPU::G_AMDGPU_BUFFER_STORE_FORMAT:
|
||||
case AMDGPU::G_AMDGPU_BUFFER_STORE_FORMAT_D16: {
|
||||
case AMDGPU::G_AMDGPU_BUFFER_STORE_FORMAT_D16:
|
||||
case AMDGPU::G_AMDGPU_TBUFFER_STORE_FORMAT:
|
||||
case AMDGPU::G_AMDGPU_TBUFFER_STORE_FORMAT_D16: {
|
||||
applyDefaultMapping(OpdMapper);
|
||||
executeInWaterfallLoop(MI, MRI, {1, 4});
|
||||
return;
|
||||
|
|
|
@ -1760,8 +1760,8 @@ multiclass MTBUF_StoreIntrinsicPat<SDPatternOperator name, ValueType vt,
|
|||
def : GCNPat<
|
||||
(name vt:$vdata, v4i32:$rsrc, 0, 0, i32:$soffset, timm:$offset,
|
||||
timm:$format, timm:$auxiliary, 0),
|
||||
(!cast<MTBUF_Pseudo>(opcode # _OFFSET_exact) $vdata, $rsrc, $soffset,
|
||||
(as_i16imm $offset), (as_i8imm $format),
|
||||
(!cast<MTBUF_Pseudo>(opcode # _OFFSET_exact) getVregSrcForVT<vt>.ret:$vdata, SReg_128:$rsrc, SCSrc_b32:$soffset,
|
||||
(as_i16timm $offset), (as_i8timm $format),
|
||||
(extract_glc $auxiliary), (extract_slc $auxiliary), 0, (extract_dlc $auxiliary),
|
||||
(extract_swz $auxiliary))
|
||||
>;
|
||||
|
@ -1769,8 +1769,8 @@ multiclass MTBUF_StoreIntrinsicPat<SDPatternOperator name, ValueType vt,
|
|||
def : GCNPat<
|
||||
(name vt:$vdata, v4i32:$rsrc, i32:$vindex, 0, i32:$soffset, timm:$offset,
|
||||
timm:$format, timm:$auxiliary, timm),
|
||||
(!cast<MTBUF_Pseudo>(opcode # _IDXEN_exact) $vdata, $vindex, $rsrc, $soffset,
|
||||
(as_i16imm $offset), (as_i8imm $format),
|
||||
(!cast<MTBUF_Pseudo>(opcode # _IDXEN_exact) getVregSrcForVT<vt>.ret:$vdata, VGPR_32:$vindex, SReg_128:$rsrc, SCSrc_b32:$soffset,
|
||||
(as_i16timm $offset), (as_i8timm $format),
|
||||
(extract_glc $auxiliary), (extract_slc $auxiliary), 0, (extract_dlc $auxiliary),
|
||||
(extract_swz $auxiliary))
|
||||
>;
|
||||
|
@ -1778,8 +1778,8 @@ multiclass MTBUF_StoreIntrinsicPat<SDPatternOperator name, ValueType vt,
|
|||
def : GCNPat<
|
||||
(name vt:$vdata, v4i32:$rsrc, 0, i32:$voffset, i32:$soffset, timm:$offset,
|
||||
timm:$format, timm:$auxiliary, 0),
|
||||
(!cast<MTBUF_Pseudo>(opcode # _OFFEN_exact) $vdata, $voffset, $rsrc, $soffset,
|
||||
(as_i16imm $offset), (as_i8imm $format),
|
||||
(!cast<MTBUF_Pseudo>(opcode # _OFFEN_exact) getVregSrcForVT<vt>.ret:$vdata, VGPR_32:$voffset, SReg_128:$rsrc, SCSrc_b32:$soffset,
|
||||
(as_i16timm $offset), (as_i8timm $format),
|
||||
(extract_glc $auxiliary), (extract_slc $auxiliary), 0, (extract_dlc $auxiliary),
|
||||
(extract_swz $auxiliary))
|
||||
>;
|
||||
|
@ -1788,9 +1788,9 @@ multiclass MTBUF_StoreIntrinsicPat<SDPatternOperator name, ValueType vt,
|
|||
(name vt:$vdata, v4i32:$rsrc, i32:$vindex, i32:$voffset, i32:$soffset,
|
||||
timm:$offset, timm:$format, timm:$auxiliary, timm),
|
||||
(!cast<MTBUF_Pseudo>(opcode # _BOTHEN_exact)
|
||||
$vdata,
|
||||
(REG_SEQUENCE VReg_64, $vindex, sub0, $voffset, sub1),
|
||||
$rsrc, $soffset, (as_i16imm $offset), (as_i8imm $format),
|
||||
getVregSrcForVT<vt>.ret:$vdata,
|
||||
(REG_SEQUENCE VReg_64, VGPR_32:$vindex, sub0, VGPR_32:$voffset, sub1),
|
||||
SReg_128:$rsrc, SCSrc_b32:$soffset, (as_i16timm $offset), (as_i8timm $format),
|
||||
(extract_glc $auxiliary), (extract_slc $auxiliary), 0, (extract_dlc $auxiliary),
|
||||
(extract_swz $auxiliary))
|
||||
>;
|
||||
|
|
Loading…
Reference in New Issue