15
15
#define LLVM_CODEGEN_SELECTIONDAGISEL_H
16
16
17
17
#include " llvm/CodeGen/MachineFunctionPass.h"
18
+ #include " llvm/CodeGen/MachinePassManager.h"
18
19
#include " llvm/CodeGen/SelectionDAG.h"
19
20
#include " llvm/IR/BasicBlock.h"
20
21
#include < memory>
@@ -24,21 +25,23 @@ class AAResults;
24
25
class AssumptionCache ;
25
26
class TargetInstrInfo ;
26
27
class TargetMachine ;
28
+ class SSPLayoutInfo ;
27
29
class SelectionDAGBuilder ;
28
30
class SDValue ;
29
31
class MachineRegisterInfo ;
30
32
class MachineFunction ;
31
33
class OptimizationRemarkEmitter ;
32
34
class TargetLowering ;
33
35
class TargetLibraryInfo ;
36
+ class TargetTransformInfo ;
34
37
class FunctionLoweringInfo ;
35
38
class SwiftErrorValueTracking ;
36
39
class GCFunctionInfo ;
37
40
class ScheduleDAGSDNodes ;
38
41
39
42
// / SelectionDAGISel - This is the common base class used for SelectionDAG-based
40
43
// / pattern-matching instruction selectors.
41
- class SelectionDAGISel : public MachineFunctionPass {
44
+ class SelectionDAGISel {
42
45
public:
43
46
TargetMachine &TM;
44
47
const TargetLibraryInfo *LibInfo;
@@ -51,6 +54,8 @@ class SelectionDAGISel : public MachineFunctionPass {
51
54
AAResults *AA = nullptr ;
52
55
AssumptionCache *AC = nullptr ;
53
56
GCFunctionInfo *GFI = nullptr ;
57
+ SSPLayoutInfo *SP = nullptr ;
58
+ TargetTransformInfo *TTI = nullptr ;
54
59
CodeGenOptLevel OptLevel;
55
60
const TargetInstrInfo *TII;
56
61
const TargetLowering *TLI;
@@ -67,16 +72,22 @@ class SelectionDAGISel : public MachineFunctionPass {
67
72
// / functions. Storing the filter result here so that we only need to do the
68
73
// / filtering once.
69
74
bool MatchFilterFuncName = false ;
75
+ StringRef FuncName;
70
76
71
- explicit SelectionDAGISel (char &ID, TargetMachine &tm,
77
+ explicit SelectionDAGISel (TargetMachine &tm,
72
78
CodeGenOptLevel OL = CodeGenOptLevel::Default);
73
- ~SelectionDAGISel () override ;
79
+ ~SelectionDAGISel ();
74
80
75
81
const TargetLowering *getTargetLowering () const { return TLI; }
76
82
77
- void getAnalysisUsage (AnalysisUsage &AU) const override ;
83
+ void initialize (MachineFunctionAnalysisManager &MFAM);
84
+ void initialize (MachineFunctionPass &MFP);
78
85
79
- bool runOnMachineFunction (MachineFunction &MF) override ;
86
+ // / Subclasses can override this function to set Subtarget
87
+ // / before running the pass.
88
+ virtual void prepare (MachineFunction &MF) {}
89
+
90
+ bool runOnMachineFunction (MachineFunction &mf, bool Skipped);
80
91
81
92
virtual void emitFunctionEntryCode () {}
82
93
@@ -517,6 +528,30 @@ class SelectionDAGISel : public MachineFunctionPass {
517
528
bool isMorphNodeTo);
518
529
};
519
530
531
+ class SelectionDAGISelLegacy : public MachineFunctionPass {
532
+ std::unique_ptr<SelectionDAGISel> Selector;
533
+
534
+ public:
535
+ SelectionDAGISelLegacy (char &ID, std::unique_ptr<SelectionDAGISel> S);
536
+
537
+ ~SelectionDAGISelLegacy () override = default ;
538
+
539
+ void getAnalysisUsage (AnalysisUsage &AU) const override ;
540
+
541
+ bool runOnMachineFunction (MachineFunction &MF) override ;
542
+ };
543
+
544
+ class SelectionDAGISelPass : public PassInfoMixin <SelectionDAGISelPass> {
545
+ std::unique_ptr<SelectionDAGISel> Selector;
546
+
547
+ protected:
548
+ SelectionDAGISelPass (std::unique_ptr<SelectionDAGISel> Selector)
549
+ : Selector(std::move(Selector)) {}
550
+
551
+ public:
552
+ PreservedAnalyses run (MachineFunction &MF,
553
+ MachineFunctionAnalysisManager &MFAM);
554
+ };
520
555
}
521
556
522
557
#endif /* LLVM_CODEGEN_SELECTIONDAGISEL_H */
0 commit comments