diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
| commit | b915e9e0fc85ba6f398b3fab0db6a81a8913af94 (patch) | |
| tree | 98b8f811c7aff2547cab8642daf372d6c59502fb /lib/Target/AMDGPU/AMDGPUMachineFunction.cpp | |
| parent | 6421cca32f69ac849537a3cff78c352195e99f1b (diff) | |
Notes
Diffstat (limited to 'lib/Target/AMDGPU/AMDGPUMachineFunction.cpp')
| -rw-r--r-- | lib/Target/AMDGPU/AMDGPUMachineFunction.cpp | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp b/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp index 44516dab04f1..40c3327a98db 100644 --- a/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp +++ b/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp @@ -1,23 +1,47 @@ +//===-- AMDGPUMachineFunctionInfo.cpp ---------------------------------------=// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + #include "AMDGPUMachineFunction.h" +#include "AMDGPUSubtarget.h" using namespace llvm; -// Pin the vtable to this file. -void AMDGPUMachineFunction::anchor() {} - AMDGPUMachineFunction::AMDGPUMachineFunction(const MachineFunction &MF) : MachineFunctionInfo(), + LocalMemoryObjects(), KernArgSize(0), MaxKernArgAlign(0), LDSSize(0), ABIArgOffset(0), - ScratchSize(0), - IsKernel(MF.getFunction()->getCallingConv() == llvm::CallingConv::AMDGPU_KERNEL || - MF.getFunction()->getCallingConv() == llvm::CallingConv::SPIR_KERNEL) -{ + IsKernel(MF.getFunction()->getCallingConv() == CallingConv::AMDGPU_KERNEL || + MF.getFunction()->getCallingConv() == CallingConv::SPIR_KERNEL) { + // FIXME: Should initialize KernArgSize based on ExplicitKernelArgOffset, + // except reserved size is not correctly aligned. } -bool AMDGPUMachineFunction::isKernel() const -{ - return IsKernel; +unsigned AMDGPUMachineFunction::allocateLDSGlobal(const DataLayout &DL, + const GlobalValue &GV) { + auto Entry = LocalMemoryObjects.insert(std::make_pair(&GV, 0)); + if (!Entry.second) + return Entry.first->second; + + unsigned Align = GV.getAlignment(); + if (Align == 0) + Align = DL.getABITypeAlignment(GV.getValueType()); + + /// 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, Align); + + Entry.first->second = Offset; + LDSSize += DL.getTypeAllocSize(GV.getValueType()); + + return Offset; } |
