File indexing completed on 2026-05-10 08:43:23
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef LLVM_CODEGEN_GLOBALISEL_COMBINER_H
0016 #define LLVM_CODEGEN_GLOBALISEL_COMBINER_H
0017
0018 #include "llvm/CodeGen/GlobalISel/CombinerInfo.h"
0019 #include "llvm/CodeGen/GlobalISel/GIMatchTableExecutor.h"
0020 #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h"
0021 #include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
0022
0023 namespace llvm {
0024 class MachineRegisterInfo;
0025 class GISelCSEInfo;
0026 class TargetPassConfig;
0027 class MachineFunction;
0028 class MachineIRBuilder;
0029
0030
0031
0032
0033
0034 class Combiner : public GIMatchTableExecutor {
0035 private:
0036 using WorkListTy = GISelWorkList<512>;
0037
0038 class WorkListMaintainer;
0039 template <CombinerInfo::ObserverLevel Lvl> class WorkListMaintainerImpl;
0040
0041 WorkListTy WorkList;
0042
0043
0044
0045
0046
0047
0048
0049 std::unique_ptr<MachineIRBuilder> Builder;
0050 std::unique_ptr<WorkListMaintainer> WLObserver;
0051 std::unique_ptr<GISelObserverWrapper> ObserverWrapper;
0052
0053 bool HasSetupMF = false;
0054
0055 static bool tryDCE(MachineInstr &MI, MachineRegisterInfo &MRI);
0056
0057 public:
0058
0059
0060 Combiner(MachineFunction &MF, CombinerInfo &CInfo,
0061 const TargetPassConfig *TPC, GISelKnownBits *KB,
0062 GISelCSEInfo *CSEInfo = nullptr);
0063 virtual ~Combiner();
0064
0065 virtual bool tryCombineAll(MachineInstr &I) const = 0;
0066
0067 bool combineMachineInstrs();
0068
0069 protected:
0070 CombinerInfo &CInfo;
0071 GISelChangeObserver &Observer;
0072 MachineIRBuilder &B;
0073 MachineFunction &MF;
0074 MachineRegisterInfo &MRI;
0075 GISelKnownBits *KB;
0076
0077 const TargetPassConfig *TPC;
0078 GISelCSEInfo *CSEInfo;
0079 };
0080
0081 }
0082
0083 #endif