diff options
author | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-04-01 17:09:14 +0000 |
---|---|---|
committer | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-04-01 17:09:14 +0000 |
commit | 4254d45a79d14179787f260a7c78ffc4a2461aa7 (patch) | |
tree | 19ee9776dbf5c2fba67372ed1f78e97f8b564746 /llvm/lib/Target | |
parent | 5d0d30304c5f2305d8458625e5e46db6cc7f0a06 (diff) | |
download | bcm5719-llvm-4254d45a79d14179787f260a7c78ffc4a2461aa7.tar.gz bcm5719-llvm-4254d45a79d14179787f260a7c78ffc4a2461aa7.zip |
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
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td | 50 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp | 60 |
2 files changed, 63 insertions, 47 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td index 79ebd3bb207..0b9fe07881a 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td +++ b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td @@ -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>; diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp index 69572b85e1c..4680e5ff5e4 100644 --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp @@ -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 |