From: Yashwant Singh Date: Wed, 8 Feb 2023 06:11:51 +0000 (+0530) Subject: [AMDGPU] Introduce never uniform bit field in tablegen X-Git-Tag: upstream/17.0.6~18229 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cde2f330b36fc36760329be1d3c52e92da400663;p=platform%2Fupstream%2Fllvm.git [AMDGPU] Introduce never uniform bit field in tablegen IsNeverUniform can be set to 1 to mark instructions which are inherently never-uniform/divergent. Enabling this bit in Writelane instruction for now. To be extended to all required instructions. Reviewed By: arsenm, sameerds, #amdgpu Differential Revision: https://reviews.llvm.org/D143154 --- diff --git a/llvm/lib/Target/AMDGPU/SIDefines.h b/llvm/lib/Target/AMDGPU/SIDefines.h index 142fb87..432d522 100644 --- a/llvm/lib/Target/AMDGPU/SIDefines.h +++ b/llvm/lib/Target/AMDGPU/SIDefines.h @@ -133,6 +133,9 @@ enum : uint64_t { // Whether tied sources will be read. TiedSourceNotRead = UINT64_C(1) << 60, + + // Is never uniform. + IsNeverUniform = UINT64_C(1) << 61, }; // v_cmp_class_* etc. use a 10-bit mask for what operation is checked. diff --git a/llvm/lib/Target/AMDGPU/SIInstrFormats.td b/llvm/lib/Target/AMDGPU/SIInstrFormats.td index d86d4e6..f674777 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrFormats.td +++ b/llvm/lib/Target/AMDGPU/SIInstrFormats.td @@ -153,6 +153,9 @@ class InstSI getParent()->getRegInfo(); const AMDGPURegisterBankInfo *RBI = ST.getRegBankInfo(); diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.h b/llvm/lib/Target/AMDGPU/SIInstrInfo.h index 8de8d45..ce02b25 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.h +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.h @@ -781,6 +781,10 @@ public: return get(Opcode).TSFlags & SIInstrFlags::FPAtomic; } + static bool isNeverUniform(const MachineInstr &MI){ + return MI.getDesc().TSFlags & SIInstrFlags::IsNeverUniform; + } + static bool doesNotReadTiedSource(const MachineInstr &MI) { return MI.getDesc().TSFlags & SIInstrFlags::TiedSourceNotRead; } diff --git a/llvm/lib/Target/AMDGPU/VOP2Instructions.td b/llvm/lib/Target/AMDGPU/VOP2Instructions.td index 10a7f06..d8d7682 100644 --- a/llvm/lib/Target/AMDGPU/VOP2Instructions.td +++ b/llvm/lib/Target/AMDGPU/VOP2Instructions.td @@ -764,11 +764,10 @@ defm V_SUBREV_U32 : VOP2Inst <"v_subrev_u32", VOP_I32_I32_I32_ARITH, null_frag, let isConvergent = 1, Uses = [] in { def V_READLANE_B32 : VOP2_Pseudo<"v_readlane_b32", VOP_READLANE, [(set i32:$vdst, (int_amdgcn_readlane i32:$src0, i32:$src1))]>; - -let Constraints = "$vdst = $vdst_in", DisableEncoding="$vdst_in" in { +let IsNeverUniform = 1, Constraints = "$vdst = $vdst_in", DisableEncoding="$vdst_in" in { def V_WRITELANE_B32 : VOP2_Pseudo<"v_writelane_b32", VOP_WRITELANE, [(set i32:$vdst, (int_amdgcn_writelane i32:$src0, i32:$src1, i32:$vdst_in))]>; -} // End $vdst = $vdst_in, DisableEncoding $vdst_in +} // End IsNeverUniform, $vdst = $vdst_in, DisableEncoding $vdst_in } // End isConvergent = 1 let isReMaterializable = 1 in { diff --git a/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/MIR/always-uniform.mir b/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/MIR/always-uniform.mir index 35a5a3f..9d15b89 100644 --- a/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/MIR/always-uniform.mir +++ b/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/MIR/always-uniform.mir @@ -1,4 +1,5 @@ -# RUN: llc -mtriple=amdgcn-- -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s +# RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s + # readlane, readfirstlane is always uniform --- diff --git a/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/MIR/never-uniform.mir b/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/MIR/never-uniform.mir index a125441..3adcc38 100644 --- a/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/MIR/never-uniform.mir +++ b/llvm/test/Analysis/DivergenceAnalysis/AMDGPU/MIR/never-uniform.mir @@ -1,4 +1,4 @@ -# RUN: llc -mtriple=amdgcn-- -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s +# RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s # loads from flat non uniform --- name: flatloads