diff options
author | Michael Liao <michael.hliao@gmail.com> | 2020-06-24 12:13:10 -0400 |
---|---|---|
committer | Michael Liao <michael.hliao@gmail.com> | 2020-08-20 21:29:18 -0400 |
commit | 5257a60ee02e5cbecb2f577b27a9c89e92b2f85f (patch) | |
tree | 942a090a610ce13a2e628e17ec08c226007edeb1 /llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp | |
parent | e2ab5bcf569107caf8c5efb6013d6902fe32238b (diff) | |
download | llvm-5257a60ee02e5cbecb2f577b27a9c89e92b2f85f.zip llvm-5257a60ee02e5cbecb2f577b27a9c89e92b2f85f.tar.gz llvm-5257a60ee02e5cbecb2f577b27a9c89e92b2f85f.tar.bz2 |
[amdgpu] Add codegen support for HIP dynamic shared memory.
Summary:
- HIP uses an unsized extern array `extern __shared__ T s[]` to declare
the dynamic shared memory, which size is not known at the
compile time.
Reviewers: arsenm, yaxunl, kpyzhov, b-sumner
Subscribers: kzhuravl, jvesely, wdng, nhaehnle, dstuttard, tpr, t-tye, hiraditya, kerbowa, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D82496
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp b/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp index 64acd6e..14890fc 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp @@ -49,10 +49,27 @@ unsigned AMDGPUMachineFunction::allocateLDSGlobal(const DataLayout &DL, /// TODO: We should sort these to minimize wasted space due to alignment /// padding. Currently the padding is decided by the first encountered use /// during lowering. - unsigned Offset = LDSSize = alignTo(LDSSize, Alignment); + unsigned Offset = StaticLDSSize = alignTo(StaticLDSSize, Alignment); Entry.first->second = Offset; - LDSSize += DL.getTypeAllocSize(GV.getValueType()); + StaticLDSSize += DL.getTypeAllocSize(GV.getValueType()); + + // Update the LDS size considering the padding to align the dynamic shared + // memory. + LDSSize = alignTo(StaticLDSSize, DynLDSAlign); return Offset; } + +void AMDGPUMachineFunction::setDynLDSAlign(const DataLayout &DL, + const GlobalVariable &GV) { + assert(DL.getTypeAllocSize(GV.getValueType()).isZero()); + + Align Alignment = + DL.getValueOrABITypeAlignment(GV.getAlign(), GV.getValueType()); + if (Alignment <= DynLDSAlign) + return; + + LDSSize = alignTo(StaticLDSSize, Alignment); + DynLDSAlign = Alignment; +} |