diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp | 58 | 
1 files changed, 58 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp b/contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp new file mode 100644 index 000000000000..64acd6efe028 --- /dev/null +++ b/contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp @@ -0,0 +1,58 @@ +//===-- AMDGPUMachineFunctionInfo.cpp ---------------------------------------=// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "AMDGPUMachineFunction.h" +#include "AMDGPUSubtarget.h" +#include "AMDGPUPerfHintAnalysis.h" +#include "llvm/CodeGen/MachineModuleInfo.h" + +using namespace llvm; + +AMDGPUMachineFunction::AMDGPUMachineFunction(const MachineFunction &MF) : +  MachineFunctionInfo(), +  Mode(MF.getFunction()), +  IsEntryFunction(AMDGPU::isEntryFunctionCC(MF.getFunction().getCallingConv())), +  NoSignedZerosFPMath(MF.getTarget().Options.NoSignedZerosFPMath) { +  const AMDGPUSubtarget &ST = AMDGPUSubtarget::get(MF); + +  // FIXME: Should initialize KernArgSize based on ExplicitKernelArgOffset, +  // except reserved size is not correctly aligned. +  const Function &F = MF.getFunction(); + +  Attribute MemBoundAttr = F.getFnAttribute("amdgpu-memory-bound"); +  MemoryBound = MemBoundAttr.isStringAttribute() && +                MemBoundAttr.getValueAsString() == "true"; + +  Attribute WaveLimitAttr = F.getFnAttribute("amdgpu-wave-limiter"); +  WaveLimiter = WaveLimitAttr.isStringAttribute() && +                WaveLimitAttr.getValueAsString() == "true"; + +  CallingConv::ID CC = F.getCallingConv(); +  if (CC == CallingConv::AMDGPU_KERNEL || CC == CallingConv::SPIR_KERNEL) +    ExplicitKernArgSize = ST.getExplicitKernArgSize(F, MaxKernArgAlign); +} + +unsigned AMDGPUMachineFunction::allocateLDSGlobal(const DataLayout &DL, +                                                  const GlobalVariable &GV) { +  auto Entry = LocalMemoryObjects.insert(std::make_pair(&GV, 0)); +  if (!Entry.second) +    return Entry.first->second; + +  Align Alignment = +      DL.getValueOrABITypeAlignment(GV.getAlign(), 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, Alignment); + +  Entry.first->second = Offset; +  LDSSize += DL.getTypeAllocSize(GV.getValueType()); + +  return Offset; +}  | 
