Bug noted in D112717 can be sidestepped with this change. Expanding all ConstantExpr involved with LDS up front makes the variable specialisation simpler. Excludes ConstantExpr that don't access LDS to avoid disturbing codegen elsewhere. Reviewed By: rampitec Differential Revision: https://reviews.llvm.org/D133422
50 lines
1.5 KiB
C++
50 lines
1.5 KiB
C++
//===- AMDGPUMemoryUtils.h - Memory related helper functions -*- C++ -*----===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_AMDGPU_UTILS_AMDGPUMEMORYUTILS_H
|
|
#define LLVM_LIB_TARGET_AMDGPU_UTILS_AMDGPUMEMORYUTILS_H
|
|
|
|
#include <vector>
|
|
|
|
namespace llvm {
|
|
|
|
struct Align;
|
|
class AAResults;
|
|
class ConstantExpr;
|
|
class DataLayout;
|
|
class Function;
|
|
class GlobalVariable;
|
|
class LoadInst;
|
|
class MemoryDef;
|
|
class MemorySSA;
|
|
class Module;
|
|
class Value;
|
|
|
|
namespace AMDGPU {
|
|
|
|
Align getAlign(DataLayout const &DL, const GlobalVariable *GV);
|
|
|
|
bool isLDSVariableToLower(const GlobalVariable &GV);
|
|
std::vector<GlobalVariable *> findLDSVariablesToLower(Module &M,
|
|
const Function *F);
|
|
|
|
/// Given a \p Def clobbering a load from \p Ptr according to the MSSA check
|
|
/// if this is actually a memory update or an artificial clobber to facilitate
|
|
/// ordering constraints.
|
|
bool isReallyAClobber(const Value *Ptr, MemoryDef *Def, AAResults *AA);
|
|
|
|
/// Check is a \p Load is clobbered in its function.
|
|
bool isClobberedInFunction(const LoadInst *Load, MemorySSA *MSSA,
|
|
AAResults *AA);
|
|
|
|
} // end namespace AMDGPU
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_LIB_TARGET_AMDGPU_UTILS_AMDGPUMEMORYUTILS_H
|