diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2020-06-01 13:16:58 -0400 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2020-06-01 17:55:08 -0400 |
commit | a8f720925599f8e44366438f1ccb4b4e9d9375ae (patch) | |
tree | 8748d510d7b7735c489f83f77be4536032e46c6c /llvm/lib | |
parent | 06aaf0b3431f29b6debbb96fdd92ada896f336ff (diff) | |
download | llvm-a8f720925599f8e44366438f1ccb4b4e9d9375ae.zip llvm-a8f720925599f8e44366438f1ccb4b4e9d9375ae.tar.gz llvm-a8f720925599f8e44366438f1ccb4b4e9d9375ae.tar.bz2 |
AMDGPU: Change internal tracking of wave size
Store the log2 wave size instead of forcing division and log2
operations when querying either.
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUFeatures.td | 14 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h | 18 |
3 files changed, 19 insertions, 19 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td b/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td index 6ca896c..db00f8f 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td +++ b/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td @@ -29,16 +29,16 @@ def FeatureLocalMemorySize0 : SubtargetFeatureLocalMemorySize<0>; def FeatureLocalMemorySize32768 : SubtargetFeatureLocalMemorySize<32768>; def FeatureLocalMemorySize65536 : SubtargetFeatureLocalMemorySize<65536>; -class SubtargetFeatureWavefrontSize <int Value> : SubtargetFeature< - "wavefrontsize"#Value, - "WavefrontSize", - !cast<string>(Value), +class SubtargetFeatureWavefrontSize <int ValueLog2> : SubtargetFeature< + "wavefrontsize"#!shl(1, ValueLog2), + "WavefrontSizeLog2", + !cast<string>(ValueLog2), "The number of threads per wavefront" >; -def FeatureWavefrontSize16 : SubtargetFeatureWavefrontSize<16>; -def FeatureWavefrontSize32 : SubtargetFeatureWavefrontSize<32>; -def FeatureWavefrontSize64 : SubtargetFeatureWavefrontSize<64>; +def FeatureWavefrontSize16 : SubtargetFeatureWavefrontSize<4>; +def FeatureWavefrontSize32 : SubtargetFeatureWavefrontSize<5>; +def FeatureWavefrontSize64 : SubtargetFeatureWavefrontSize<6>; class SubtargetFeatureGeneration <string Value, string FeatureName, string Subtarget, diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp index 3e24c4a..bd9cb92 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp @@ -126,8 +126,8 @@ GCNSubtarget::initializeSubtargetDependencies(const Triple &TT, } // Don't crash on invalid devices. - if (WavefrontSize == 0) - WavefrontSize = 64; + if (WavefrontSizeLog2 == 0) + WavefrontSizeLog2 = 5; HasFminFmaxLegacy = getGeneration() < AMDGPUSubtarget::VOLCANIC_ISLANDS; @@ -163,7 +163,7 @@ AMDGPUSubtarget::AMDGPUSubtarget(const Triple &TT) : HasTrigReducedRange(false), MaxWavesPerEU(10), LocalMemorySize(0), - WavefrontSize(0) + WavefrontSizeLog2(0) { } GCNSubtarget::GCNSubtarget(const Triple &TT, StringRef GPU, StringRef FS, diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h index 4db2a0f..604a766 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h @@ -77,7 +77,7 @@ protected: bool HasTrigReducedRange; unsigned MaxWavesPerEU; int LocalMemorySize; - unsigned WavefrontSize; + char WavefrontSizeLog2; public: AMDGPUSubtarget(const Triple &TT); @@ -181,7 +181,11 @@ public: } unsigned getWavefrontSize() const { - return WavefrontSize; + return 1 << WavefrontSizeLog2; + } + + unsigned getWavefrontSizeLog2() const { + return WavefrontSizeLog2; } int getLocalMemorySize() const { @@ -237,8 +241,8 @@ public: /// \returns Corresponsing DWARF register number mapping flavour for the /// \p WavefrontSize. AMDGPUDwarfFlavour getAMDGPUDwarfFlavour() const { - return WavefrontSize == 32 ? AMDGPUDwarfFlavour::Wave32 - : AMDGPUDwarfFlavour::Wave64; + return getWavefrontSize() == 32 ? AMDGPUDwarfFlavour::Wave32 + : AMDGPUDwarfFlavour::Wave64; } virtual ~AMDGPUSubtarget() {} @@ -454,10 +458,6 @@ public: return (Generation)Gen; } - unsigned getWavefrontSizeLog2() const { - return Log2_32(WavefrontSize); - } - /// Return the number of high bits known to be zero fror a frame index. unsigned getKnownHighZeroBitsForFrameIndex() const { return countLeadingZeros(MaxWaveScratchSize) + getWavefrontSizeLog2(); @@ -1160,7 +1160,7 @@ public: const override; bool isWave32() const { - return WavefrontSize == 32; + return getWavefrontSize() == 32; } const TargetRegisterClass *getBoolRC() const { |