Go to the documentation of this file.
30 #define DEBUG_TYPE "aarch64-O0-prelegalizer-combiner"
33 using namespace MIPatternMatch;
44 #define AARCH64O0PRELEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_DEPS
45 #include "AArch64GenO0PreLegalizeGICombiner.inc"
46 #undef AARCH64O0PRELEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_DEPS
49 #define AARCH64O0PRELEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_H
50 #include "AArch64GenO0PreLegalizeGICombiner.inc"
51 #undef AARCH64O0PRELEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_H
53 class AArch64O0PreLegalizerCombinerInfo :
public CombinerInfo {
56 AArch64GenO0PreLegalizerCombinerHelperRuleConfig GeneratedRuleCfg;
59 AArch64O0PreLegalizerCombinerInfo(
bool EnableOpt,
bool OptSize,
bool MinSize,
63 nullptr, EnableOpt, OptSize, MinSize),
65 if (!GeneratedRuleCfg.parseCommandLineOption())
77 AArch64GenO0PreLegalizerCombinerHelper
Generated(GeneratedRuleCfg, Helper);
82 unsigned Opc =
MI.getOpcode();
84 case TargetOpcode::G_CONCAT_VECTORS:
85 return Helper.tryCombineConcatVectors(
MI);
86 case TargetOpcode::G_SHUFFLE_VECTOR:
87 return Helper.tryCombineShuffleVector(
MI);
88 case TargetOpcode::G_MEMCPY_INLINE:
89 return Helper.tryEmitMemcpyInline(
MI);
90 case TargetOpcode::G_MEMCPY:
91 case TargetOpcode::G_MEMMOVE:
92 case TargetOpcode::G_MEMSET: {
96 if (Helper.tryCombineMemCpyFamily(
MI, MaxLen))
98 if (Opc == TargetOpcode::G_MEMSET)
107 #define AARCH64O0PRELEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_CPP
108 #include "AArch64GenO0PreLegalizeGICombiner.inc"
109 #undef AARCH64O0PRELEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_CPP
118 AArch64O0PreLegalizerCombiner();
121 return "AArch64O0PreLegalizerCombiner";
130 void AArch64O0PreLegalizerCombiner::getAnalysisUsage(
AnalysisUsage &AU)
const {
139 AArch64O0PreLegalizerCombiner::AArch64O0PreLegalizerCombiner()
144 bool AArch64O0PreLegalizerCombiner::runOnMachineFunction(
MachineFunction &MF) {
146 MachineFunctionProperties::Property::FailedISel))
148 auto &TPC = getAnalysis<TargetPassConfig>();
151 GISelKnownBits *KB = &getAnalysis<GISelKnownBitsAnalysis>().get(MF);
152 AArch64O0PreLegalizerCombinerInfo PCInfo(
153 false,
F.hasOptSize(),
F.hasMinSize(), KB,
nullptr );
155 return C.combineMachineInstrs(MF,
nullptr );
160 "Combine AArch64 machine instrs before legalization",
171 return new AArch64O0PreLegalizerCombiner();
bool hasProperty(Property P) const
This is an optimization pass for GlobalISel generic memory operations.
The actual analysis pass wrapper.
void initializeAArch64O0PreLegalizerCombinerPass(PassRegistry &)
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
auto instrs(const MachineBasicBlock &BB)
void getSelectionDAGFallbackAnalysisUsage(AnalysisUsage &AU)
Modify analysis usage so it preserves passes required for the SelectionDAG fallback.
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
To use KnownBitsInfo analysis in a pass, KnownBitsInfo &Info = getAnalysis<GISelKnownBitsInfoAnalysis...
(vector float) vec_cmpeq(*A, *B) C
Represent the analysis usage information of a pass.
const MachineFunctionProperties & getProperties() const
Get the function properties.
INITIALIZE_PASS_BEGIN(AArch64O0PreLegalizerCombiner, DEBUG_TYPE, "Combine AArch64 machine instrs before legalization", false, false) INITIALIZE_PASS_END(AArch64O0PreLegalizerCombiner
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis)
Target-Independent Code Generator Pass Configuration Options.
bool tryEmitBZero(MachineInstr &MI, MachineIRBuilder &MIRBuilder, bool MinSize)
Replace a G_MEMSET with a value of 0 with a G_BZERO instruction if it is supported and beneficial to ...
Helper class to build MachineInstr.
Representation of each machine instruction.
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
Combine AArch64 machine instrs before legalization
void setPreservesCFG()
This function should be called by the pass, iff they do not:
StringRef - Represent a constant reference to a string, i.e.
AnalysisUsage & addPreserved()
Add the specified Pass class to the set of analyses preserved by this pass.
Abstract class that contains various methods for clients to notify about changes.
Function & getFunction()
Return the LLVM function that this machine code represents.
FunctionPass * createAArch64O0PreLegalizerCombiner()
FunctionPass class - This class is used to implement most global optimizations.
AnalysisUsage & addRequired()
DominatorTree Class - Concrete subclass of DominatorTreeBase that is used to compute a normal dominat...
AArch64O0PreLegalizerCombinerHelperState(CombinerHelper &Helper)