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
@@ -513,6 +524,30 @@ class SelectionDAGISel : public MachineFunctionPass {
513
524
bool isMorphNodeTo);
514
525
};
515
526
527
+ class SelectionDAGISelLegacy : public MachineFunctionPass {
528
+ std::unique_ptr<SelectionDAGISel> Selector;
529
+
530
+ public:
531
+ SelectionDAGISelLegacy (char &ID, std::unique_ptr<SelectionDAGISel> S);
532
+
533
+ ~SelectionDAGISelLegacy () override = default ;
534
+
535
+ void getAnalysisUsage (AnalysisUsage &AU) const override ;
536
+
537
+ bool runOnMachineFunction (MachineFunction &MF) override ;
538
+ };
539
+
540
+ class SelectionDAGISelPass : public PassInfoMixin <SelectionDAGISelPass> {
541
+ std::unique_ptr<SelectionDAGISel> Selector;
542
+
543
+ protected:
544
+ SelectionDAGISelPass (std::unique_ptr<SelectionDAGISel> Selector)
545
+ : Selector(std::move(Selector)) {}
546
+
547
+ public:
548
+ PreservedAnalyses run (MachineFunction &MF,
549
+ MachineFunctionAnalysisManager &MFAM);
550
+ };
516
551
}
517
552
518
553
#endif /* LLVM_CODEGEN_SELECTIONDAGISEL_H */
0 commit comments