[CodeGen] Port InterleavedLoadCombine to new pass manager (#75164)
This commit is contained in:
parent
18b41576ca
commit
a930fec033
@ -27,6 +27,7 @@
|
||||
#include "llvm/CodeGen/DwarfEHPrepare.h"
|
||||
#include "llvm/CodeGen/ExpandReductions.h"
|
||||
#include "llvm/CodeGen/InterleavedAccess.h"
|
||||
#include "llvm/CodeGen/InterleavedLoadCombine.h"
|
||||
#include "llvm/CodeGen/JMCInstrumenter.h"
|
||||
#include "llvm/CodeGen/MachinePassManager.h"
|
||||
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
|
||||
|
||||
29
llvm/include/llvm/CodeGen/InterleavedLoadCombine.h
Normal file
29
llvm/include/llvm/CodeGen/InterleavedLoadCombine.h
Normal file
@ -0,0 +1,29 @@
|
||||
//===- llvm/CodeGen/InterleavedLoadCombine.h --------------------*- 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_CODEGEN_INTERLEAVEDLOADCOMBINE_H
|
||||
#define LLVM_CODEGEN_INTERLEAVEDLOADCOMBINE_H
|
||||
|
||||
#include "llvm/IR/PassManager.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class TargetMachine;
|
||||
|
||||
class InterleavedLoadCombinePass
|
||||
: public PassInfoMixin<InterleavedLoadCombinePass> {
|
||||
const TargetMachine *TM;
|
||||
|
||||
public:
|
||||
explicit InterleavedLoadCombinePass(const TargetMachine *TM) : TM(TM) {}
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
|
||||
};
|
||||
|
||||
} // namespace llvm
|
||||
|
||||
#endif // InterleavedLoadCombine
|
||||
@ -47,6 +47,7 @@ FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass, ())
|
||||
FUNCTION_PASS("expand-reductions", ExpandReductionsPass, ())
|
||||
FUNCTION_PASS("expandvp", ExpandVectorPredicationPass, ())
|
||||
FUNCTION_PASS("interleaved-access", InterleavedAccessPass, (TM))
|
||||
FUNCTION_PASS("interleaved-load-combine", InterleavedLoadCombinePass, (TM))
|
||||
FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass, ())
|
||||
FUNCTION_PASS("lowerinvoke", LowerInvokePass, ())
|
||||
FUNCTION_PASS("mergeicmps", MergeICmpsPass, ())
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
#include "llvm/Analysis/MemorySSAUpdater.h"
|
||||
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
|
||||
#include "llvm/Analysis/TargetTransformInfo.h"
|
||||
#include "llvm/CodeGen/InterleavedLoadCombine.h"
|
||||
#include "llvm/CodeGen/Passes.h"
|
||||
#include "llvm/CodeGen/TargetLowering.h"
|
||||
#include "llvm/CodeGen/TargetPassConfig.h"
|
||||
@ -63,7 +64,7 @@ struct VectorInfo;
|
||||
struct InterleavedLoadCombineImpl {
|
||||
public:
|
||||
InterleavedLoadCombineImpl(Function &F, DominatorTree &DT, MemorySSA &MSSA,
|
||||
TargetMachine &TM)
|
||||
const TargetMachine &TM)
|
||||
: F(F), DT(DT), MSSA(MSSA),
|
||||
TLI(*TM.getSubtargetImpl(F)->getTargetLowering()),
|
||||
TTI(TM.getTargetTransformInfo(F)) {}
|
||||
@ -1339,6 +1340,15 @@ private:
|
||||
};
|
||||
} // anonymous namespace
|
||||
|
||||
PreservedAnalyses
|
||||
InterleavedLoadCombinePass::run(Function &F, FunctionAnalysisManager &FAM) {
|
||||
|
||||
auto &DT = FAM.getResult<DominatorTreeAnalysis>(F);
|
||||
auto &MemSSA = FAM.getResult<MemorySSAAnalysis>(F).getMSSA();
|
||||
bool Changed = InterleavedLoadCombineImpl(F, DT, MemSSA, *TM).run();
|
||||
return Changed ? PreservedAnalyses::none() : PreservedAnalyses::all();
|
||||
}
|
||||
|
||||
char InterleavedLoadCombine::ID = 0;
|
||||
|
||||
INITIALIZE_PASS_BEGIN(
|
||||
|
||||
@ -78,6 +78,7 @@
|
||||
#include "llvm/CodeGen/ExpandLargeFpConvert.h"
|
||||
#include "llvm/CodeGen/HardwareLoops.h"
|
||||
#include "llvm/CodeGen/InterleavedAccess.h"
|
||||
#include "llvm/CodeGen/InterleavedLoadCombine.h"
|
||||
#include "llvm/CodeGen/JMCInstrumenter.h"
|
||||
#include "llvm/CodeGen/SafeStack.h"
|
||||
#include "llvm/CodeGen/SelectOptimize.h"
|
||||
|
||||
@ -320,6 +320,7 @@ FUNCTION_PASS("instcount", InstCountPass())
|
||||
FUNCTION_PASS("instnamer", InstructionNamerPass())
|
||||
FUNCTION_PASS("instsimplify", InstSimplifyPass())
|
||||
FUNCTION_PASS("interleaved-access", InterleavedAccessPass(TM))
|
||||
FUNCTION_PASS("interleaved-load-combine", InterleavedLoadCombinePass(TM))
|
||||
FUNCTION_PASS("invalidate<all>", InvalidateAllAnalysesPass())
|
||||
FUNCTION_PASS("irce", IRCEPass())
|
||||
FUNCTION_PASS("jump-threading", JumpThreadingPass())
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
; RUN: llc < %s | FileCheck --check-prefix AS %s
|
||||
; RUN: opt -S -interleaved-load-combine < %s | FileCheck %s
|
||||
; RUN: opt -S -passes=interleaved-load-combine < %s | FileCheck %s
|
||||
|
||||
; ModuleID = 'aarch64_interleaved-ld-combine.bc'
|
||||
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -interleaved-load-combine -S -verify-memoryssa %s | FileCheck %s
|
||||
; RUN: opt -passes=interleaved-load-combine -S -verify-memoryssa %s | FileCheck %s
|
||||
|
||||
target triple = "arm64-apple-darwin"
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user