diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td index 8d70536ec21c..bc68310b2f5c 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td +++ b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td @@ -198,6 +198,7 @@ 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_global_atomic_csub>; def : SourceOfDivergence<int_amdgcn_ds_fadd>; def : SourceOfDivergence<int_amdgcn_ds_fmin>; def : SourceOfDivergence<int_amdgcn_ds_fmax>; @@ -238,6 +239,7 @@ def : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_xor>; def : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_inc>; def : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_dec>; def : SourceOfDivergence<int_amdgcn_struct_buffer_atomic_cmpswap>; +def : SourceOfDivergence<int_amdgcn_buffer_atomic_csub>; def : SourceOfDivergence<int_amdgcn_ps_live>; def : SourceOfDivergence<int_amdgcn_ds_swizzle>; def : SourceOfDivergence<int_amdgcn_ds_ordered_add>; @@ -247,6 +249,7 @@ def : SourceOfDivergence<int_amdgcn_permlanex16>; def : SourceOfDivergence<int_amdgcn_mov_dpp>; def : SourceOfDivergence<int_amdgcn_mov_dpp8>; def : SourceOfDivergence<int_amdgcn_update_dpp>; +def : SourceOfDivergence<int_amdgcn_writelane>; def : SourceOfDivergence<int_amdgcn_mfma_f32_4x4x1f32>; def : SourceOfDivergence<int_amdgcn_mfma_f32_4x4x1f32>; @@ -270,5 +273,13 @@ def : SourceOfDivergence<int_amdgcn_mfma_i32_32x32x8i8>; def : SourceOfDivergence<int_amdgcn_mfma_f32_32x32x2bf16>; def : SourceOfDivergence<int_amdgcn_mfma_f32_32x32x4bf16>; +// The dummy boolean output is divergent from the IR's perspective, +// but the mask results are uniform. These produce a divergent and +// uniform result, so the returned struct is collectively divergent. +// isAlwaysUniform can override the extract of the uniform component. +def : SourceOfDivergence<int_amdgcn_if>; +def : SourceOfDivergence<int_amdgcn_else>; +def : SourceOfDivergence<int_amdgcn_loop>; + foreach intr = AMDGPUImageDimAtomicIntrinsics in def : SourceOfDivergence<intr>; |