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()) {
24 case kS390_ShiftLeft32:
25 case kS390_ShiftLeft64:
26 case kS390_ShiftLeftPair:
27 case kS390_ShiftRight32:
28 case kS390_ShiftRight64:
29 case kS390_ShiftRightPair:
30 case kS390_ShiftRightArith32:
31 case kS390_ShiftRightArith64:
32 case kS390_ShiftRightArithPair:
33 case kS390_RotRight32:
34 case kS390_RotRight64:
37 case kS390_RotLeftAndClear64:
38 case kS390_RotLeftAndClearLeft64:
39 case kS390_RotLeftAndClearRight64:
53 case kS390_Mul32WithOverflow:
56 case kS390_MulHighU32:
75 case kS390_FloorFloat:
77 case kS390_TruncateFloat:
79 case kS390_SqrtDouble:
80 case kS390_FloorDouble:
81 case kS390_CeilDouble:
82 case kS390_TruncateDouble:
83 case kS390_RoundDouble:
99 case kS390_SignExtendWord8ToInt32:
100 case kS390_SignExtendWord16ToInt32:
101 case kS390_SignExtendWord8ToInt64:
102 case kS390_SignExtendWord16ToInt64:
103 case kS390_SignExtendWord32ToInt64:
104 case kS390_Uint32ToUint64:
105 case kS390_Int64ToInt32:
106 case kS390_Int64ToFloat32:
107 case kS390_Int64ToDouble:
108 case kS390_Uint64ToFloat32:
109 case kS390_Uint64ToDouble:
110 case kS390_Int32ToFloat32:
111 case kS390_Int32ToDouble:
112 case kS390_Uint32ToFloat32:
113 case kS390_Uint32ToDouble:
114 case kS390_Float32ToInt32:
115 case kS390_Float32ToUint32:
116 case kS390_Float32ToUint64:
117 case kS390_Float32ToDouble:
118 case kS390_Float64SilenceNaN:
119 case kS390_DoubleToInt32:
120 case kS390_DoubleToUint32:
121 case kS390_Float32ToInt64:
122 case kS390_DoubleToInt64:
123 case kS390_DoubleToUint64:
124 case kS390_DoubleToFloat32:
125 case kS390_DoubleExtractLowWord32:
126 case kS390_DoubleExtractHighWord32:
127 case kS390_DoubleInsertLowWord32:
128 case kS390_DoubleInsertHighWord32:
129 case kS390_DoubleConstruct:
130 case kS390_BitcastInt32ToFloat32:
131 case kS390_BitcastFloat32ToInt32:
132 case kS390_BitcastInt64ToDouble:
133 case kS390_BitcastDoubleToInt64:
134 case kS390_LoadReverse16RR:
135 case kS390_LoadReverse32RR:
136 case kS390_LoadReverse64RR:
137 case kS390_LoadAndTestWord32:
138 case kS390_LoadAndTestWord64:
139 case kS390_LoadAndTestFloat32:
140 case kS390_LoadAndTestFloat64:
141 return kNoOpcodeFlags;
143 case kS390_LoadWordS8:
144 case kS390_LoadWordU8:
145 case kS390_LoadWordS16:
146 case kS390_LoadWordU16:
147 case kS390_LoadWordS32:
148 case kS390_LoadWordU32:
149 case kS390_LoadWord64:
150 case kS390_LoadFloat32:
151 case kS390_LoadDouble:
152 case kS390_LoadReverse16:
153 case kS390_LoadReverse32:
154 case kS390_LoadReverse64:
155 return kIsLoadOperation;
157 case kS390_StoreWord8:
158 case kS390_StoreWord16:
159 case kS390_StoreWord32:
160 case kS390_StoreWord64:
161 case kS390_StoreReverse16:
162 case kS390_StoreReverse32:
163 case kS390_StoreReverse64:
164 case kS390_StoreFloat32:
165 case kS390_StoreDouble:
167 case kS390_PushFrame:
168 case kS390_StoreToStackSlot:
169 case kS390_StackClaim:
170 return kHasSideEffect;
172 case kS390_Word64AtomicExchangeUint8:
173 case kS390_Word64AtomicExchangeUint16:
174 case kS390_Word64AtomicExchangeUint32:
175 case kS390_Word64AtomicExchangeUint64:
176 case kS390_Word64AtomicCompareExchangeUint8:
177 case kS390_Word64AtomicCompareExchangeUint16:
178 case kS390_Word64AtomicCompareExchangeUint32:
179 case kS390_Word64AtomicCompareExchangeUint64:
180 case kS390_Word64AtomicAddUint8:
181 case kS390_Word64AtomicAddUint16:
182 case kS390_Word64AtomicAddUint32:
183 case kS390_Word64AtomicAddUint64:
184 case kS390_Word64AtomicSubUint8:
185 case kS390_Word64AtomicSubUint16:
186 case kS390_Word64AtomicSubUint32:
187 case kS390_Word64AtomicSubUint64:
188 case kS390_Word64AtomicAndUint8:
189 case kS390_Word64AtomicAndUint16:
190 case kS390_Word64AtomicAndUint32:
191 case kS390_Word64AtomicAndUint64:
192 case kS390_Word64AtomicOrUint8:
193 case kS390_Word64AtomicOrUint16:
194 case kS390_Word64AtomicOrUint32:
195 case kS390_Word64AtomicOrUint64:
196 case kS390_Word64AtomicXorUint8:
197 case kS390_Word64AtomicXorUint16:
198 case kS390_Word64AtomicXorUint32:
199 case kS390_Word64AtomicXorUint64:
200 return kHasSideEffect;
202 #define CASE(Name) case k##Name: 203 COMMON_ARCH_OPCODE_LIST(CASE)
212 int InstructionScheduler::GetInstructionLatency(
const Instruction* instr) {