forked from OSchip/llvm-project
AMDGPU: Make isIntrinsicSourceOfDivergence table-driven
Summary: This is in preparation for the new dimension-aware image intrinsics, which I'd rather not have to list here by hand. Change-Id: Iaa16e3a635a11283918ce0d9e1e618591b0bf6fa Reviewers: arsenm, rampitec, b-sumner Subscribers: kzhuravl, wdng, yaxunl, dstuttard, tpr, llvm-commits, t-tye Differential Revision: https://reviews.llvm.org/D44938 llvm-svn: 328939
This commit is contained in:
parent
5d0d30304c
commit
4254d45a79
|
@ -26,3 +26,53 @@ foreach intr = !listconcat(AMDGPUBufferIntrinsics,
|
|||
AMDGPUImageIntrinsics) in {
|
||||
def : RsrcIntrinsic<!cast<AMDGPURsrcIntrinsic>(intr)>;
|
||||
}
|
||||
|
||||
class SourceOfDivergence<Intrinsic intr> : SearchableTable {
|
||||
let SearchableFields = ["Intr"];
|
||||
let EnumNameField = ?;
|
||||
|
||||
Intrinsic Intr = intr;
|
||||
}
|
||||
|
||||
def : SourceOfDivergence<int_amdgcn_workitem_id_x>;
|
||||
def : SourceOfDivergence<int_amdgcn_workitem_id_y>;
|
||||
def : SourceOfDivergence<int_amdgcn_workitem_id_z>;
|
||||
def : SourceOfDivergence<int_amdgcn_interp_mov>;
|
||||
def : SourceOfDivergence<int_amdgcn_interp_p1>;
|
||||
def : SourceOfDivergence<int_amdgcn_interp_p2>;
|
||||
def : SourceOfDivergence<int_amdgcn_mbcnt_hi>;
|
||||
def : SourceOfDivergence<int_amdgcn_mbcnt_lo>;
|
||||
def : SourceOfDivergence<int_r600_read_tidig_x>;
|
||||
def : SourceOfDivergence<int_r600_read_tidig_y>;
|
||||
def : SourceOfDivergence<int_r600_read_tidig_z>;
|
||||
def : SourceOfDivergence<int_amdgcn_atomic_inc>;
|
||||
def : SourceOfDivergence<int_amdgcn_atomic_dec>;
|
||||
def : SourceOfDivergence<int_amdgcn_ds_fadd>;
|
||||
def : SourceOfDivergence<int_amdgcn_ds_fmin>;
|
||||
def : SourceOfDivergence<int_amdgcn_ds_fmax>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_swap>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_add>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_sub>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_smin>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_umin>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_smax>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_umax>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_and>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_or>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_xor>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_inc>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_dec>;
|
||||
def : SourceOfDivergence<int_amdgcn_image_atomic_cmpswap>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_swap>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_add>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_sub>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_smin>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_umin>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_smax>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_umax>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_and>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_or>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_xor>;
|
||||
def : SourceOfDivergence<int_amdgcn_buffer_atomic_cmpswap>;
|
||||
def : SourceOfDivergence<int_amdgcn_ps_live>;
|
||||
def : SourceOfDivergence<int_amdgcn_ds_swizzle>;
|
||||
|
|
|
@ -946,54 +946,20 @@ AMDGPUAS getAMDGPUAS(const Module &M) {
|
|||
return getAMDGPUAS(Triple(M.getTargetTriple()));
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
struct SourceOfDivergence {
|
||||
unsigned Intr;
|
||||
};
|
||||
const SourceOfDivergence *lookupSourceOfDivergenceByIntr(unsigned Intr);
|
||||
|
||||
#define GET_SOURCEOFDIVERGENCE_IMPL
|
||||
#include "AMDGPUGenSearchableTables.inc"
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
bool isIntrinsicSourceOfDivergence(unsigned IntrID) {
|
||||
switch (IntrID) {
|
||||
case Intrinsic::amdgcn_workitem_id_x:
|
||||
case Intrinsic::amdgcn_workitem_id_y:
|
||||
case Intrinsic::amdgcn_workitem_id_z:
|
||||
case Intrinsic::amdgcn_interp_mov:
|
||||
case Intrinsic::amdgcn_interp_p1:
|
||||
case Intrinsic::amdgcn_interp_p2:
|
||||
case Intrinsic::amdgcn_mbcnt_hi:
|
||||
case Intrinsic::amdgcn_mbcnt_lo:
|
||||
case Intrinsic::r600_read_tidig_x:
|
||||
case Intrinsic::r600_read_tidig_y:
|
||||
case Intrinsic::r600_read_tidig_z:
|
||||
case Intrinsic::amdgcn_atomic_inc:
|
||||
case Intrinsic::amdgcn_atomic_dec:
|
||||
case Intrinsic::amdgcn_ds_fadd:
|
||||
case Intrinsic::amdgcn_ds_fmin:
|
||||
case Intrinsic::amdgcn_ds_fmax:
|
||||
case Intrinsic::amdgcn_image_atomic_swap:
|
||||
case Intrinsic::amdgcn_image_atomic_add:
|
||||
case Intrinsic::amdgcn_image_atomic_sub:
|
||||
case Intrinsic::amdgcn_image_atomic_smin:
|
||||
case Intrinsic::amdgcn_image_atomic_umin:
|
||||
case Intrinsic::amdgcn_image_atomic_smax:
|
||||
case Intrinsic::amdgcn_image_atomic_umax:
|
||||
case Intrinsic::amdgcn_image_atomic_and:
|
||||
case Intrinsic::amdgcn_image_atomic_or:
|
||||
case Intrinsic::amdgcn_image_atomic_xor:
|
||||
case Intrinsic::amdgcn_image_atomic_inc:
|
||||
case Intrinsic::amdgcn_image_atomic_dec:
|
||||
case Intrinsic::amdgcn_image_atomic_cmpswap:
|
||||
case Intrinsic::amdgcn_buffer_atomic_swap:
|
||||
case Intrinsic::amdgcn_buffer_atomic_add:
|
||||
case Intrinsic::amdgcn_buffer_atomic_sub:
|
||||
case Intrinsic::amdgcn_buffer_atomic_smin:
|
||||
case Intrinsic::amdgcn_buffer_atomic_umin:
|
||||
case Intrinsic::amdgcn_buffer_atomic_smax:
|
||||
case Intrinsic::amdgcn_buffer_atomic_umax:
|
||||
case Intrinsic::amdgcn_buffer_atomic_and:
|
||||
case Intrinsic::amdgcn_buffer_atomic_or:
|
||||
case Intrinsic::amdgcn_buffer_atomic_xor:
|
||||
case Intrinsic::amdgcn_buffer_atomic_cmpswap:
|
||||
case Intrinsic::amdgcn_ps_live:
|
||||
case Intrinsic::amdgcn_ds_swizzle:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return lookupSourceOfDivergenceByIntr(IntrID);
|
||||
}
|
||||
} // namespace AMDGPU
|
||||
} // namespace llvm
|
||||
|
|
Loading…
Reference in New Issue