LLVM: lib/Target/ARM/ARMMacroFusion.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
18
19namespace llvm {
20
21
24
26
27 case ARM::AESMC :
28 return FirstMI == nullptr || FirstMI->getOpcode() == ARM::AESE;
29
30 case ARM::AESIMC:
31 return FirstMI == nullptr || FirstMI->getOpcode() == ARM::AESD;
32 }
33
34 return false;
35}
36
37
40
41 if ((FirstMI == nullptr || FirstMI->getOpcode() == ARM::MOVi16) &&
42 SecondMI.getOpcode() == ARM::MOVTi16)
43 return true;
44
45 return false;
46}
47
48
49
50
56
57 if (ST.hasFuseAES() && isAESPair(FirstMI, SecondMI))
58 return true;
59 if (ST.hasFuseLiterals() && isLiteralsPair(FirstMI, SecondMI))
60 return true;
61
62 return false;
63}
64
68
69}
const TargetInstrInfo & TII
Representation of each machine instruction.
unsigned getOpcode() const
Returns the opcode of this MachineInstr.
TargetInstrInfo - Interface to description of machine instruction set.
TargetSubtargetInfo - Generic base class for all target subtargets.
This is an optimization pass for GlobalISel generic memory operations.
static bool isAESPair(const MachineInstr *FirstMI, const MachineInstr &SecondMI)
Definition ARMMacroFusion.cpp:22
LLVM_ABI std::unique_ptr< ScheduleDAGMutation > createMacroFusionDAGMutation(ArrayRef< MacroFusionPredTy > Predicates, bool BranchOnly=false)
Create a DAG scheduling mutation to pair instructions back to back for instructions that benefit acco...
std::unique_ptr< ScheduleDAGMutation > createARMMacroFusionDAGMutation()
Note that you have to add: DAG.addMutation(createARMMacroFusionDAGMutation()); to ARMTargetMachine::c...
Definition ARMMacroFusion.cpp:65
static bool isLiteralsPair(const MachineInstr *FirstMI, const MachineInstr &SecondMI)
Definition ARMMacroFusion.cpp:38
static bool shouldScheduleAdjacent(const TargetInstrInfo &TII, const TargetSubtargetInfo &TSI, const MachineInstr *FirstMI, const MachineInstr &SecondMI)
Check if the instr pair, FirstMI and SecondMI, should be fused together.
Definition ARMMacroFusion.cpp:51