[llvm] 3a75551 - Reland "[NFC][AMDGPULowerModuleLDSPass] Factorize repetead sort code"
Juan Manuel MARTINEZ CAAMAÑO via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 12 00:38:25 PDT 2023
Author: Juan Manuel MARTINEZ CAAMAÑO
Date: 2023-07-12T09:27:20+02:00
New Revision: 3a75551e857bbe70687baa60b537d5b55ed67dbb
URL: https://github.com/llvm/llvm-project/commit/3a75551e857bbe70687baa60b537d5b55ed67dbb
DIFF: https://github.com/llvm/llvm-project/commit/3a75551e857bbe70687baa60b537d5b55ed67dbb.diff
LOG: Reland "[NFC][AMDGPULowerModuleLDSPass] Factorize repetead sort code"
Fixed compilation error and reudndant copy warning
Differential Revision: https://reviews.llvm.org/D154977
Added:
Modified:
llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp b/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
index d5f9255507c43d..c83da618749233 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
@@ -245,6 +245,13 @@ bool isKernelLDS(const Function *F) {
return AMDGPU::isKernel(F->getCallingConv());
}
+template <typename T> std::vector<T> sortByName(std::vector<T> &&V) {
+ llvm::sort(V.begin(), V.end(), [](const auto *L, const auto *R) {
+ return L->getName() < R->getName();
+ });
+ return {std::move(V)};
+}
+
class AMDGPULowerModuleLDS : public ModulePass {
static void
@@ -733,10 +740,7 @@ class AMDGPULowerModuleLDS : public ModulePass {
}
// Put them in an arbitrary but reproducible order
- llvm::sort(OrderedKernels.begin(), OrderedKernels.end(),
- [](const Function *lhs, const Function *rhs) -> bool {
- return lhs->getName() < rhs->getName();
- });
+ OrderedKernels = sortByName(std::move(OrderedKernels));
// Annotate the kernels with their order in this vector
LLVMContext &Ctx = M->getContext();
@@ -1185,13 +1189,8 @@ class AMDGPULowerModuleLDS : public ModulePass {
// The order must be consistent between lookup table and accesses to
// lookup table
- std::vector<GlobalVariable *> TableLookupVariablesOrdered(
- TableLookupVariables.begin(), TableLookupVariables.end());
- llvm::sort(TableLookupVariablesOrdered.begin(),
- TableLookupVariablesOrdered.end(),
- [](const GlobalVariable *lhs, const GlobalVariable *rhs) {
- return lhs->getName() < rhs->getName();
- });
+ auto TableLookupVariablesOrdered = sortByName(std::vector(
+ TableLookupVariables.begin(), TableLookupVariables.end()));
GlobalVariable *LookupTable = buildLookupTable(
M, TableLookupVariablesOrdered, OrderedKernels, KernelToReplacement);
@@ -1338,12 +1337,9 @@ class AMDGPULowerModuleLDS : public ModulePass {
// The order of fields in this struct depends on the order of
// varables in the argument which varies when changing how they
// are identified, leading to spurious test breakage.
- std::vector<GlobalVariable *> Sorted(LDSVarsToTransform.begin(),
- LDSVarsToTransform.end());
- llvm::sort(Sorted.begin(), Sorted.end(),
- [](const GlobalVariable *lhs, const GlobalVariable *rhs) {
- return lhs->getName() < rhs->getName();
- });
+ auto Sorted = sortByName(
+ std::vector(LDSVarsToTransform.begin(), LDSVarsToTransform.end()));
+
for (GlobalVariable *GV : Sorted) {
OptimizedStructLayoutField F(GV,
DL.getTypeAllocSize(GV->getValueType()),
@@ -1424,19 +1420,15 @@ class AMDGPULowerModuleLDS : public ModulePass {
template <typename PredicateTy>
static void replaceLDSVariablesWithStruct(
Module &M, DenseSet<GlobalVariable *> const &LDSVarsToTransformArg,
- LDSVariableReplacement Replacement, PredicateTy Predicate) {
+ const LDSVariableReplacement &Replacement, PredicateTy Predicate) {
LLVMContext &Ctx = M.getContext();
const DataLayout &DL = M.getDataLayout();
// A hack... we need to insert the aliasing info in a predictable order for
// lit tests. Would like to have them in a stable order already, ideally the
// same order they get allocated, which might mean an ordered set container
- std::vector<GlobalVariable *> LDSVarsToTransform(
- LDSVarsToTransformArg.begin(), LDSVarsToTransformArg.end());
- llvm::sort(LDSVarsToTransform.begin(), LDSVarsToTransform.end(),
- [](const GlobalVariable *lhs, const GlobalVariable *rhs) {
- return lhs->getName() < rhs->getName();
- });
+ std::vector<GlobalVariable *> LDSVarsToTransform = sortByName(std::vector(
+ LDSVarsToTransformArg.begin(), LDSVarsToTransformArg.end()));
// Create alias.scope and their lists. Each field in the new structure
// does not alias with all other fields.
@@ -1458,7 +1450,7 @@ class AMDGPULowerModuleLDS : public ModulePass {
// field of the instance that will be allocated by AMDGPUMachineFunction
for (size_t I = 0; I < NumberVars; I++) {
GlobalVariable *GV = LDSVarsToTransform[I];
- Constant *GEP = Replacement.LDSVarsToConstantGEP[GV];
+ Constant *GEP = Replacement.LDSVarsToConstantGEP.at(GV);
GV->replaceUsesWithIf(GEP, Predicate);
More information about the llvm-commits
mailing list