5 #include "src/compiler/backend/instruction-scheduler.h" 11 bool InstructionScheduler::SchedulerSupported() {
return true; }
13 int InstructionScheduler::GetTargetInstructionFlags(
14 const Instruction* instr)
const {
15 switch (instr->arch_opcode()) {
17 case kPPC_AndComplement:
19 case kPPC_OrComplement:
21 case kPPC_ShiftLeft32:
22 case kPPC_ShiftLeft64:
23 case kPPC_ShiftLeftPair:
24 case kPPC_ShiftRight32:
25 case kPPC_ShiftRight64:
26 case kPPC_ShiftRightPair:
27 case kPPC_ShiftRightAlg32:
28 case kPPC_ShiftRightAlg64:
29 case kPPC_ShiftRightAlgPair:
33 case kPPC_RotLeftAndMask32:
34 case kPPC_RotLeftAndClear64:
35 case kPPC_RotLeftAndClearLeft64:
36 case kPPC_RotLeftAndClearRight64:
39 case kPPC_AddWithOverflow32:
43 case kPPC_SubWithOverflow32:
47 case kPPC_Mul32WithHigh32:
66 case kPPC_FloorDouble:
68 case kPPC_TruncateDouble:
69 case kPPC_RoundDouble:
82 case kPPC_ExtendSignWord8:
83 case kPPC_ExtendSignWord16:
84 case kPPC_ExtendSignWord32:
85 case kPPC_Uint32ToUint64:
86 case kPPC_Int64ToInt32:
87 case kPPC_Int64ToFloat32:
88 case kPPC_Int64ToDouble:
89 case kPPC_Uint64ToFloat32:
90 case kPPC_Uint64ToDouble:
91 case kPPC_Int32ToFloat32:
92 case kPPC_Int32ToDouble:
93 case kPPC_Uint32ToFloat32:
94 case kPPC_Uint32ToDouble:
95 case kPPC_Float32ToDouble:
96 case kPPC_Float64SilenceNaN:
97 case kPPC_DoubleToInt32:
98 case kPPC_DoubleToUint32:
99 case kPPC_DoubleToInt64:
100 case kPPC_DoubleToUint64:
101 case kPPC_DoubleToFloat32:
102 case kPPC_DoubleExtractLowWord32:
103 case kPPC_DoubleExtractHighWord32:
104 case kPPC_DoubleInsertLowWord32:
105 case kPPC_DoubleInsertHighWord32:
106 case kPPC_DoubleConstruct:
107 case kPPC_BitcastInt32ToFloat32:
108 case kPPC_BitcastFloat32ToInt32:
109 case kPPC_BitcastInt64ToDouble:
110 case kPPC_BitcastDoubleToInt64:
113 return kNoOpcodeFlags;
115 case kPPC_LoadWordS8:
116 case kPPC_LoadWordU8:
117 case kPPC_LoadWordS16:
118 case kPPC_LoadWordU16:
119 case kPPC_LoadWordS32:
120 case kPPC_LoadWordU32:
121 case kPPC_LoadWord64:
122 case kPPC_LoadFloat32:
123 case kPPC_LoadDouble:
124 return kIsLoadOperation;
126 case kPPC_StoreWord8:
127 case kPPC_StoreWord16:
128 case kPPC_StoreWord32:
129 case kPPC_StoreWord64:
130 case kPPC_StoreFloat32:
131 case kPPC_StoreDouble:
134 case kPPC_StoreToStackSlot:
135 return kHasSideEffect;
137 case kPPC_AtomicLoadUint8:
138 case kPPC_AtomicLoadUint16:
139 case kPPC_AtomicLoadWord32:
140 case kPPC_AtomicLoadWord64:
141 return kIsLoadOperation;
143 case kPPC_AtomicStoreUint8:
144 case kPPC_AtomicStoreUint16:
145 case kPPC_AtomicStoreWord32:
146 case kPPC_AtomicStoreWord64:
147 case kPPC_AtomicExchangeUint8:
148 case kPPC_AtomicExchangeUint16:
149 case kPPC_AtomicExchangeWord32:
150 case kPPC_AtomicExchangeWord64:
151 case kPPC_AtomicCompareExchangeUint8:
152 case kPPC_AtomicCompareExchangeUint16:
153 case kPPC_AtomicCompareExchangeWord32:
154 case kPPC_AtomicCompareExchangeWord64:
155 case kPPC_AtomicAddUint8:
156 case kPPC_AtomicAddUint16:
157 case kPPC_AtomicAddUint32:
158 case kPPC_AtomicAddUint64:
159 case kPPC_AtomicAddInt8:
160 case kPPC_AtomicAddInt16:
161 case kPPC_AtomicAddInt32:
162 case kPPC_AtomicAddInt64:
163 case kPPC_AtomicSubUint8:
164 case kPPC_AtomicSubUint16:
165 case kPPC_AtomicSubUint32:
166 case kPPC_AtomicSubUint64:
167 case kPPC_AtomicSubInt8:
168 case kPPC_AtomicSubInt16:
169 case kPPC_AtomicSubInt32:
170 case kPPC_AtomicSubInt64:
171 case kPPC_AtomicAndUint8:
172 case kPPC_AtomicAndUint16:
173 case kPPC_AtomicAndUint32:
174 case kPPC_AtomicAndUint64:
175 case kPPC_AtomicAndInt8:
176 case kPPC_AtomicAndInt16:
177 case kPPC_AtomicAndInt32:
178 case kPPC_AtomicAndInt64:
179 case kPPC_AtomicOrUint8:
180 case kPPC_AtomicOrUint16:
181 case kPPC_AtomicOrUint32:
182 case kPPC_AtomicOrUint64:
183 case kPPC_AtomicOrInt8:
184 case kPPC_AtomicOrInt16:
185 case kPPC_AtomicOrInt32:
186 case kPPC_AtomicOrInt64:
187 case kPPC_AtomicXorUint8:
188 case kPPC_AtomicXorUint16:
189 case kPPC_AtomicXorUint32:
190 case kPPC_AtomicXorUint64:
191 case kPPC_AtomicXorInt8:
192 case kPPC_AtomicXorInt16:
193 case kPPC_AtomicXorInt32:
194 case kPPC_AtomicXorInt64:
195 return kHasSideEffect;
197 #define CASE(Name) case k##Name: 198 COMMON_ARCH_OPCODE_LIST(CASE)
207 int InstructionScheduler::GetInstructionLatency(
const Instruction* instr) {