[PATCH] D154970: [NFC][AMDGPULowerModuleLDSPass] Factorize repetead sort code
Juan Manuel Martinez CaamaƱo via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 11 07:25:09 PDT 2023
jmmartinez created this revision.
Herald added subscribers: foad, kerbowa, mgrang, hiraditya, tpr, dstuttard, yaxunl, jvesely, kzhuravl, arsenm.
Herald added a project: All.
jmmartinez requested review of this revision.
Herald added subscribers: llvm-commits, wdng.
Herald added a project: LLVM.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D154970
Files:
llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
Index: llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
+++ llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
@@ -245,6 +245,13 @@
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 V;
+}
+
class AMDGPULowerModuleLDS : public ModulePass {
static void
@@ -729,10 +736,7 @@
}
// 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();
@@ -1179,13 +1183,8 @@
// 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);
@@ -1332,12 +1331,9 @@
// 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()),
@@ -1418,19 +1414,15 @@
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D154970.539087.patch
Type: text/x-patch
Size: 4000 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230711/c81bbf5f/attachment.bin>
More information about the llvm-commits
mailing list