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()) {
100 case kArmVmovLowU32F64:
101 case kArmVmovLowF64U32:
102 case kArmVmovHighU32F64:
103 case kArmVmovHighF64U32:
104 case kArmVmovF64U32U32:
105 case kArmVmovU32U32F64:
110 case kArmFloat64SilenceNaN:
112 case kArmF32x4ExtractLane:
113 case kArmF32x4ReplaceLane:
114 case kArmF32x4SConvertI32x4:
115 case kArmF32x4UConvertI32x4:
118 case kArmF32x4RecipApprox:
119 case kArmF32x4RecipSqrtApprox:
121 case kArmF32x4AddHoriz:
131 case kArmI32x4ExtractLane:
132 case kArmI32x4ReplaceLane:
133 case kArmI32x4SConvertF32x4:
134 case kArmI32x4SConvertI16x8Low:
135 case kArmI32x4SConvertI16x8High:
140 case kArmI32x4AddHoriz:
149 case kArmI32x4UConvertF32x4:
150 case kArmI32x4UConvertI16x8Low:
151 case kArmI32x4UConvertI16x8High:
158 case kArmI16x8ExtractLane:
159 case kArmI16x8ReplaceLane:
160 case kArmI16x8SConvertI8x16Low:
161 case kArmI16x8SConvertI8x16High:
165 case kArmI16x8SConvertI32x4:
167 case kArmI16x8AddSaturateS:
168 case kArmI16x8AddHoriz:
170 case kArmI16x8SubSaturateS:
178 case kArmI16x8UConvertI8x16Low:
179 case kArmI16x8UConvertI8x16High:
181 case kArmI16x8UConvertI32x4:
182 case kArmI16x8AddSaturateU:
183 case kArmI16x8SubSaturateU:
189 case kArmI8x16ExtractLane:
190 case kArmI8x16ReplaceLane:
194 case kArmI8x16SConvertI16x8:
196 case kArmI8x16AddSaturateS:
198 case kArmI8x16SubSaturateS:
206 case kArmI8x16UConvertI16x8:
207 case kArmI8x16AddSaturateU:
208 case kArmI8x16SubSaturateU:
221 case kArmS32x4ZipLeft:
222 case kArmS32x4ZipRight:
223 case kArmS32x4UnzipLeft:
224 case kArmS32x4UnzipRight:
225 case kArmS32x4TransposeLeft:
226 case kArmS32x4TransposeRight:
227 case kArmS32x4Shuffle:
228 case kArmS16x8ZipLeft:
229 case kArmS16x8ZipRight:
230 case kArmS16x8UnzipLeft:
231 case kArmS16x8UnzipRight:
232 case kArmS16x8TransposeLeft:
233 case kArmS16x8TransposeRight:
234 case kArmS8x16ZipLeft:
235 case kArmS8x16ZipRight:
236 case kArmS8x16UnzipLeft:
237 case kArmS8x16UnzipRight:
238 case kArmS8x16TransposeLeft:
239 case kArmS8x16TransposeRight:
240 case kArmS8x16Concat:
241 case kArmS8x16Shuffle:
242 case kArmS32x2Reverse:
243 case kArmS16x4Reverse:
244 case kArmS16x2Reverse:
245 case kArmS8x8Reverse:
246 case kArmS8x4Reverse:
247 case kArmS8x2Reverse:
248 case kArmS1x4AnyTrue:
249 case kArmS1x4AllTrue:
250 case kArmS1x8AnyTrue:
251 case kArmS1x8AllTrue:
252 case kArmS1x16AnyTrue:
253 case kArmS1x16AllTrue:
254 return kNoOpcodeFlags;
266 case kArmWord32AtomicPairLoad:
267 return kIsLoadOperation;
279 case kArmWord32AtomicPairStore:
280 case kArmWord32AtomicPairAdd:
281 case kArmWord32AtomicPairSub:
282 case kArmWord32AtomicPairAnd:
283 case kArmWord32AtomicPairOr:
284 case kArmWord32AtomicPairXor:
285 case kArmWord32AtomicPairExchange:
286 case kArmWord32AtomicPairCompareExchange:
287 return kHasSideEffect;
289 #define CASE(Name) case k##Name: 290 COMMON_ARCH_OPCODE_LIST(CASE)
299 int InstructionScheduler::GetInstructionLatency(
const Instruction* instr) {