1 // Copyright 2014 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_UNITTESTS_COMPILER_NODE_TEST_UTILS_H_ 6 #define V8_UNITTESTS_COMPILER_NODE_TEST_UTILS_H_ 7 8 #include "src/compiler/machine-operator.h" 9 #include "src/compiler/type-hints.h" 10 #include "src/machine-type.h" 11 #include "testing/gmock/include/gmock/gmock.h" 12 13 namespace v8 { 14 namespace internal { 15 16 // Forward declarations. 17 class ExternalReference; 18 template <typename T> 19 class Handle; 20 class HeapObject; 21 class Type; 22 enum TypeofMode : int; 23 24 namespace compiler { 25 26 // Forward declarations. 27 class BufferAccess; 28 class CallDescriptor; 29 class ContextAccess; 30 struct ElementAccess; 31 struct FieldAccess; 32 class Node; 33 34 35 using ::testing::Matcher; 36 37 38 Matcher<Node*> IsDead(); 39 Matcher<Node*> IsEnd(const Matcher<Node*>& control0_matcher); 40 Matcher<Node*> IsEnd(const Matcher<Node*>& control0_matcher, 41 const Matcher<Node*>& control1_matcher); 42 Matcher<Node*> IsEnd(const Matcher<Node*>& control0_matcher, 43 const Matcher<Node*>& control1_matcher, 44 const Matcher<Node*>& control2_matcher); 45 Matcher<Node*> IsBranch(const Matcher<Node*>& value_matcher, 46 const Matcher<Node*>& control_matcher); 47 Matcher<Node*> IsMerge(const Matcher<Node*>& control0_matcher, 48 const Matcher<Node*>& control1_matcher); 49 Matcher<Node*> IsMerge(const Matcher<Node*>& control0_matcher, 50 const Matcher<Node*>& control1_matcher, 51 const Matcher<Node*>& control2_matcher); 52 Matcher<Node*> IsLoop(const Matcher<Node*>& control0_matcher, 53 const Matcher<Node*>& control1_matcher); 54 Matcher<Node*> IsLoop(const Matcher<Node*>& control0_matcher, 55 const Matcher<Node*>& control1_matcher, 56 const Matcher<Node*>& control2_matcher); 57 Matcher<Node*> IsIfTrue(const Matcher<Node*>& control_matcher); 58 Matcher<Node*> IsIfFalse(const Matcher<Node*>& control_matcher); 59 Matcher<Node*> IsIfSuccess(const Matcher<Node*>& control_matcher); 60 Matcher<Node*> IsSwitch(const Matcher<Node*>& value_matcher, 61 const Matcher<Node*>& control_matcher); 62 Matcher<Node*> IsIfValue(const Matcher<int32_t>& value_matcher, 63 const Matcher<Node*>& control_matcher); 64 Matcher<Node*> IsIfDefault(const Matcher<Node*>& control_matcher); 65 Matcher<Node*> IsBeginRegion(const Matcher<Node*>& effect_matcher); 66 Matcher<Node*> IsFinishRegion(const Matcher<Node*>& value_matcher, 67 const Matcher<Node*>& effect_matcher); 68 Matcher<Node*> IsReturn(const Matcher<Node*>& value_matcher, 69 const Matcher<Node*>& effect_matcher, 70 const Matcher<Node*>& control_matcher); 71 Matcher<Node*> IsReturn2(const Matcher<Node*>& value_matcher, 72 const Matcher<Node*>& value2_matcher, 73 const Matcher<Node*>& effect_matcher, 74 const Matcher<Node*>& control_matcher); 75 Matcher<Node*> IsTerminate(const Matcher<Node*>& effect_matcher, 76 const Matcher<Node*>& control_matcher); 77 Matcher<Node*> IsExternalConstant( 78 const Matcher<ExternalReference>& value_matcher); 79 Matcher<Node*> IsHeapConstant(Handle<HeapObject> value); 80 Matcher<Node*> IsFloat32Constant(const Matcher<float>& value_matcher); 81 Matcher<Node*> IsFloat64Constant(const Matcher<double>& value_matcher); 82 Matcher<Node*> IsInt32Constant(const Matcher<int32_t>& value_matcher); 83 Matcher<Node*> IsInt64Constant(const Matcher<int64_t>& value_matcher); 84 Matcher<Node*> IsNumberConstant(const Matcher<double>& value_matcher); 85 Matcher<Node*> IsSelect(const Matcher<MachineRepresentation>& type_matcher, 86 const Matcher<Node*>& value0_matcher, 87 const Matcher<Node*>& value1_matcher, 88 const Matcher<Node*>& value2_matcher); 89 Matcher<Node*> IsPhi(const Matcher<MachineRepresentation>& type_matcher, 90 const Matcher<Node*>& value0_matcher, 91 const Matcher<Node*>& value1_matcher, 92 const Matcher<Node*>& merge_matcher); 93 Matcher<Node*> IsPhi(const Matcher<MachineRepresentation>& type_matcher, 94 const Matcher<Node*>& value0_matcher, 95 const Matcher<Node*>& value1_matcher, 96 const Matcher<Node*>& value2_matcher, 97 const Matcher<Node*>& merge_matcher); 98 Matcher<Node*> IsEffectPhi(const Matcher<Node*>& effect0_matcher, 99 const Matcher<Node*>& effect1_matcher, 100 const Matcher<Node*>& merge_matcher); 101 Matcher<Node*> IsProjection(const Matcher<size_t>& index_matcher, 102 const Matcher<Node*>& base_matcher); 103 Matcher<Node*> IsCall(const Matcher<const CallDescriptor*>& descriptor_matcher, 104 const Matcher<Node*>& value0_matcher, 105 const Matcher<Node*>& effect_matcher, 106 const Matcher<Node*>& control_matcher); 107 Matcher<Node*> IsCall(const Matcher<const CallDescriptor*>& descriptor_matcher, 108 const Matcher<Node*>& value0_matcher, 109 const Matcher<Node*>& value1_matcher, 110 const Matcher<Node*>& effect_matcher, 111 const Matcher<Node*>& control_matcher); 112 Matcher<Node*> IsCall(const Matcher<const CallDescriptor*>& descriptor_matcher, 113 const Matcher<Node*>& value0_matcher, 114 const Matcher<Node*>& value1_matcher, 115 const Matcher<Node*>& value2_matcher, 116 const Matcher<Node*>& effect_matcher, 117 const Matcher<Node*>& control_matcher); 118 Matcher<Node*> IsCall(const Matcher<const CallDescriptor*>& descriptor_matcher, 119 const Matcher<Node*>& value0_matcher, 120 const Matcher<Node*>& value1_matcher, 121 const Matcher<Node*>& value2_matcher, 122 const Matcher<Node*>& value3_matcher, 123 const Matcher<Node*>& effect_matcher, 124 const Matcher<Node*>& control_matcher); 125 Matcher<Node*> IsCall(const Matcher<const CallDescriptor*>& descriptor_matcher, 126 const Matcher<Node*>& value0_matcher, 127 const Matcher<Node*>& value1_matcher, 128 const Matcher<Node*>& value2_matcher, 129 const Matcher<Node*>& value3_matcher, 130 const Matcher<Node*>& value4_matcher, 131 const Matcher<Node*>& effect_matcher, 132 const Matcher<Node*>& control_matcher); 133 Matcher<Node*> IsCall(const Matcher<const CallDescriptor*>& descriptor_matcher, 134 const Matcher<Node*>& value0_matcher, 135 const Matcher<Node*>& value1_matcher, 136 const Matcher<Node*>& value2_matcher, 137 const Matcher<Node*>& value3_matcher, 138 const Matcher<Node*>& value4_matcher, 139 const Matcher<Node*>& value5_matcher, 140 const Matcher<Node*>& effect_matcher, 141 const Matcher<Node*>& control_matcher); 142 Matcher<Node*> IsCall( 143 const Matcher<const CallDescriptor*>& descriptor_matcher, 144 const Matcher<Node*>& value0_matcher, const Matcher<Node*>& value1_matcher, 145 const Matcher<Node*>& value2_matcher, const Matcher<Node*>& value3_matcher, 146 const Matcher<Node*>& value4_matcher, const Matcher<Node*>& value5_matcher, 147 const Matcher<Node*>& value6_matcher, const Matcher<Node*>& effect_matcher, 148 const Matcher<Node*>& control_matcher); 149 Matcher<Node*> IsTailCall( 150 const Matcher<CallDescriptor const*>& descriptor_matcher, 151 const Matcher<Node*>& value0_matcher, const Matcher<Node*>& value1_matcher, 152 const Matcher<Node*>& effect_matcher, 153 const Matcher<Node*>& control_matcher); 154 Matcher<Node*> IsTailCall( 155 const Matcher<CallDescriptor const*>& descriptor_matcher, 156 const Matcher<Node*>& value0_matcher, const Matcher<Node*>& value1_matcher, 157 const Matcher<Node*>& value2_matcher, const Matcher<Node*>& effect_matcher, 158 const Matcher<Node*>& control_matcher); 159 Matcher<Node*> IsTailCall( 160 const Matcher<CallDescriptor const*>& descriptor_matcher, 161 const Matcher<Node*>& value0_matcher, const Matcher<Node*>& value1_matcher, 162 const Matcher<Node*>& value2_matcher, const Matcher<Node*>& value3_matcher, 163 const Matcher<Node*>& effect_matcher, 164 const Matcher<Node*>& control_matcher); 165 Matcher<Node*> IsTailCall( 166 const Matcher<CallDescriptor const*>& descriptor_matcher, 167 const Matcher<Node*>& value0_matcher, const Matcher<Node*>& value1_matcher, 168 const Matcher<Node*>& value2_matcher, const Matcher<Node*>& value3_matcher, 169 const Matcher<Node*>& value4_matcher, const Matcher<Node*>& effect_matcher, 170 const Matcher<Node*>& control_matcher); 171 Matcher<Node*> IsTailCall( 172 const Matcher<CallDescriptor const*>& descriptor_matcher, 173 const Matcher<Node*>& value0_matcher, const Matcher<Node*>& value1_matcher, 174 const Matcher<Node*>& value2_matcher, const Matcher<Node*>& value3_matcher, 175 const Matcher<Node*>& value4_matcher, const Matcher<Node*>& value5_matcher, 176 const Matcher<Node*>& effect_matcher, 177 const Matcher<Node*>& control_matcher); 178 Matcher<Node*> IsTailCall( 179 const Matcher<CallDescriptor const*>& descriptor_matcher, 180 const Matcher<Node*>& value0_matcher, const Matcher<Node*>& value1_matcher, 181 const Matcher<Node*>& value2_matcher, const Matcher<Node*>& value3_matcher, 182 const Matcher<Node*>& value4_matcher, const Matcher<Node*>& value5_matcher, 183 const Matcher<Node*>& value6_matcher, const Matcher<Node*>& effect_matcher, 184 const Matcher<Node*>& control_matcher); 185 Matcher<Node*> IsTailCall( 186 const Matcher<CallDescriptor const*>& descriptor_matcher, 187 const Matcher<Node*>& value0_matcher, const Matcher<Node*>& value1_matcher, 188 const Matcher<Node*>& value2_matcher, const Matcher<Node*>& value3_matcher, 189 const Matcher<Node*>& value4_matcher, const Matcher<Node*>& value5_matcher, 190 const Matcher<Node*>& value6_matcher, const Matcher<Node*>& value7_matcher, 191 const Matcher<Node*>& effect_matcher, 192 const Matcher<Node*>& control_matcher); 193 194 195 Matcher<Node*> IsBooleanNot(const Matcher<Node*>& value_matcher); 196 Matcher<Node*> IsReferenceEqual(const Matcher<Type*>& type_matcher, 197 const Matcher<Node*>& lhs_matcher, 198 const Matcher<Node*>& rhs_matcher); 199 Matcher<Node*> IsNumberEqual(const Matcher<Node*>& lhs_matcher, 200 const Matcher<Node*>& rhs_matcher); 201 Matcher<Node*> IsNumberLessThan(const Matcher<Node*>& lhs_matcher, 202 const Matcher<Node*>& rhs_matcher); 203 Matcher<Node*> IsNumberAdd(const Matcher<Node*>& lhs_matcher, 204 const Matcher<Node*>& rhs_matcher); 205 Matcher<Node*> IsSpeculativeNumberAdd( 206 const Matcher<BinaryOperationHints::Hint>& hint_matcher, 207 const Matcher<Node*>& lhs_matcher, const Matcher<Node*>& rhs_matcher, 208 const Matcher<Node*>& effect_matcher, 209 const Matcher<Node*>& control_matcher); 210 Matcher<Node*> IsSpeculativeNumberSubtract( 211 const Matcher<BinaryOperationHints::Hint>& hint_matcher, 212 const Matcher<Node*>& lhs_matcher, const Matcher<Node*>& rhs_matcher, 213 const Matcher<Node*>& effect_matcher, 214 const Matcher<Node*>& control_matcher); 215 Matcher<Node*> IsNumberSubtract(const Matcher<Node*>& lhs_matcher, 216 const Matcher<Node*>& rhs_matcher); 217 Matcher<Node*> IsNumberMultiply(const Matcher<Node*>& lhs_matcher, 218 const Matcher<Node*>& rhs_matcher); 219 Matcher<Node*> IsNumberShiftLeft(const Matcher<Node*>& lhs_matcher, 220 const Matcher<Node*>& rhs_matcher); 221 Matcher<Node*> IsNumberShiftRight(const Matcher<Node*>& lhs_matcher, 222 const Matcher<Node*>& rhs_matcher); 223 Matcher<Node*> IsNumberShiftRightLogical(const Matcher<Node*>& lhs_matcher, 224 const Matcher<Node*>& rhs_matcher); 225 Matcher<Node*> IsNumberImul(const Matcher<Node*>& lhs_matcher, 226 const Matcher<Node*>& rhs_matcher); 227 Matcher<Node*> IsNumberAbs(const Matcher<Node*>& value_matcher); 228 Matcher<Node*> IsNumberAtan(const Matcher<Node*>& value_matcher); 229 Matcher<Node*> IsNumberAtan2(const Matcher<Node*>& lhs_matcher, 230 const Matcher<Node*>& rhs_matcher); 231 Matcher<Node*> IsNumberAtanh(const Matcher<Node*>& value_matcher); 232 Matcher<Node*> IsNumberCeil(const Matcher<Node*>& value_matcher); 233 Matcher<Node*> IsNumberClz32(const Matcher<Node*>& value_matcher); 234 Matcher<Node*> IsNumberCos(const Matcher<Node*>& value_matcher); 235 Matcher<Node*> IsNumberExp(const Matcher<Node*>& value_matcher); 236 Matcher<Node*> IsNumberExpm1(const Matcher<Node*>& value_matcher); 237 Matcher<Node*> IsNumberFloor(const Matcher<Node*>& value_matcher); 238 Matcher<Node*> IsNumberFround(const Matcher<Node*>& value_matcher); 239 Matcher<Node*> IsNumberLog(const Matcher<Node*>& value_matcher); 240 Matcher<Node*> IsNumberLog1p(const Matcher<Node*>& value_matcher); 241 Matcher<Node*> IsNumberLog2(const Matcher<Node*>& value_matcher); 242 Matcher<Node*> IsNumberLog10(const Matcher<Node*>& value_matcher); 243 Matcher<Node*> IsNumberRound(const Matcher<Node*>& value_matcher); 244 Matcher<Node*> IsNumberCbrt(const Matcher<Node*>& value_matcher); 245 Matcher<Node*> IsNumberSin(const Matcher<Node*>& value_matcher); 246 Matcher<Node*> IsNumberSqrt(const Matcher<Node*>& value_matcher); 247 Matcher<Node*> IsNumberTan(const Matcher<Node*>& value_matcher); 248 Matcher<Node*> IsNumberTrunc(const Matcher<Node*>& value_matcher); 249 Matcher<Node*> IsStringFromCharCode(const Matcher<Node*>& value_matcher); 250 Matcher<Node*> IsAllocate(const Matcher<Node*>& size_matcher, 251 const Matcher<Node*>& effect_matcher, 252 const Matcher<Node*>& control_matcher); 253 Matcher<Node*> IsLoadField(const Matcher<FieldAccess>& access_matcher, 254 const Matcher<Node*>& base_matcher, 255 const Matcher<Node*>& effect_matcher, 256 const Matcher<Node*>& control_matcher); 257 Matcher<Node*> IsStoreField(const Matcher<FieldAccess>& access_matcher, 258 const Matcher<Node*>& base_matcher, 259 const Matcher<Node*>& value_matcher, 260 const Matcher<Node*>& effect_matcher, 261 const Matcher<Node*>& control_matcher); 262 Matcher<Node*> IsLoadBuffer(const Matcher<BufferAccess>& access_matcher, 263 const Matcher<Node*>& buffer_matcher, 264 const Matcher<Node*>& offset_matcher, 265 const Matcher<Node*>& length_matcher, 266 const Matcher<Node*>& effect_matcher, 267 const Matcher<Node*>& control_matcher); 268 Matcher<Node*> IsStoreBuffer(const Matcher<BufferAccess>& access_matcher, 269 const Matcher<Node*>& buffer_matcher, 270 const Matcher<Node*>& offset_matcher, 271 const Matcher<Node*>& length_matcher, 272 const Matcher<Node*>& value_matcher, 273 const Matcher<Node*>& effect_matcher, 274 const Matcher<Node*>& control_matcher); 275 Matcher<Node*> IsLoadElement(const Matcher<ElementAccess>& access_matcher, 276 const Matcher<Node*>& base_matcher, 277 const Matcher<Node*>& index_matcher, 278 const Matcher<Node*>& control_matcher, 279 const Matcher<Node*>& effect_matcher); 280 Matcher<Node*> IsStoreElement(const Matcher<ElementAccess>& access_matcher, 281 const Matcher<Node*>& base_matcher, 282 const Matcher<Node*>& index_matcher, 283 const Matcher<Node*>& value_matcher, 284 const Matcher<Node*>& effect_matcher, 285 const Matcher<Node*>& control_matcher); 286 Matcher<Node*> IsObjectIsReceiver(const Matcher<Node*>& value_matcher); 287 Matcher<Node*> IsObjectIsSmi(const Matcher<Node*>& value_matcher); 288 289 Matcher<Node*> IsLoad(const Matcher<LoadRepresentation>& rep_matcher, 290 const Matcher<Node*>& base_matcher, 291 const Matcher<Node*>& index_matcher, 292 const Matcher<Node*>& effect_matcher, 293 const Matcher<Node*>& control_matcher); 294 Matcher<Node*> IsStore(const Matcher<StoreRepresentation>& rep_matcher, 295 const Matcher<Node*>& base_matcher, 296 const Matcher<Node*>& index_matcher, 297 const Matcher<Node*>& value_matcher, 298 const Matcher<Node*>& effect_matcher, 299 const Matcher<Node*>& control_matcher); 300 Matcher<Node*> IsStackSlot(const Matcher<MachineRepresentation>& rep_matcher); 301 Matcher<Node*> IsWord32And(const Matcher<Node*>& lhs_matcher, 302 const Matcher<Node*>& rhs_matcher); 303 Matcher<Node*> IsWord32Or(const Matcher<Node*>& lhs_matcher, 304 const Matcher<Node*>& rhs_matcher); 305 Matcher<Node*> IsWord32Xor(const Matcher<Node*>& lhs_matcher, 306 const Matcher<Node*>& rhs_matcher); 307 Matcher<Node*> IsWord32Sar(const Matcher<Node*>& lhs_matcher, 308 const Matcher<Node*>& rhs_matcher); 309 Matcher<Node*> IsWord32Shl(const Matcher<Node*>& lhs_matcher, 310 const Matcher<Node*>& rhs_matcher); 311 Matcher<Node*> IsWord32Shr(const Matcher<Node*>& lhs_matcher, 312 const Matcher<Node*>& rhs_matcher); 313 Matcher<Node*> IsWord32Ror(const Matcher<Node*>& lhs_matcher, 314 const Matcher<Node*>& rhs_matcher); 315 Matcher<Node*> IsWord32Equal(const Matcher<Node*>& lhs_matcher, 316 const Matcher<Node*>& rhs_matcher); 317 Matcher<Node*> IsWord32Clz(const Matcher<Node*>& value_matcher); 318 Matcher<Node*> IsWord32Ctz(const Matcher<Node*>& value_matcher); 319 Matcher<Node*> IsWord32Popcnt(const Matcher<Node*>& value_matcher); 320 Matcher<Node*> IsWord64And(const Matcher<Node*>& lhs_matcher, 321 const Matcher<Node*>& rhs_matcher); 322 Matcher<Node*> IsWord64Or(const Matcher<Node*>& lhs_matcher, 323 const Matcher<Node*>& rhs_matcher); 324 Matcher<Node*> IsWord64Shl(const Matcher<Node*>& lhs_matcher, 325 const Matcher<Node*>& rhs_matcher); 326 Matcher<Node*> IsWord64Sar(const Matcher<Node*>& lhs_matcher, 327 const Matcher<Node*>& rhs_matcher); 328 Matcher<Node*> IsWord64Equal(const Matcher<Node*>& lhs_matcher, 329 const Matcher<Node*>& rhs_matcher); 330 Matcher<Node*> IsInt32AddWithOverflow(const Matcher<Node*>& lhs_matcher, 331 const Matcher<Node*>& rhs_matcher); 332 Matcher<Node*> IsInt32Add(const Matcher<Node*>& lhs_matcher, 333 const Matcher<Node*>& rhs_matcher); 334 Matcher<Node*> IsInt32Sub(const Matcher<Node*>& lhs_matcher, 335 const Matcher<Node*>& rhs_matcher); 336 Matcher<Node*> IsInt32Mul(const Matcher<Node*>& lhs_matcher, 337 const Matcher<Node*>& rhs_matcher); 338 Matcher<Node*> IsInt32MulHigh(const Matcher<Node*>& lhs_matcher, 339 const Matcher<Node*>& rhs_matcher); 340 Matcher<Node*> IsInt32LessThan(const Matcher<Node*>& lhs_matcher, 341 const Matcher<Node*>& rhs_matcher); 342 Matcher<Node*> IsUint32LessThan(const Matcher<Node*>& lhs_matcher, 343 const Matcher<Node*>& rhs_matcher); 344 Matcher<Node*> IsUint32LessThanOrEqual(const Matcher<Node*>& lhs_matcher, 345 const Matcher<Node*>& rhs_matcher); 346 Matcher<Node*> IsInt64Add(const Matcher<Node*>& lhs_matcher, 347 const Matcher<Node*>& rhs_matcher); 348 Matcher<Node*> IsInt64Sub(const Matcher<Node*>& lhs_matcher, 349 const Matcher<Node*>& rhs_matcher); 350 Matcher<Node*> IsJSAdd(const Matcher<Node*>& lhs_matcher, 351 const Matcher<Node*>& rhs_matcher); 352 Matcher<Node*> IsTruncateFloat64ToWord32(const Matcher<Node*>& input_matcher); 353 Matcher<Node*> IsChangeFloat64ToInt32(const Matcher<Node*>& input_matcher); 354 Matcher<Node*> IsChangeFloat64ToUint32(const Matcher<Node*>& input_matcher); 355 Matcher<Node*> IsChangeInt32ToFloat64(const Matcher<Node*>& input_matcher); 356 Matcher<Node*> IsChangeInt32ToInt64(const Matcher<Node*>& input_matcher); 357 Matcher<Node*> IsChangeUint32ToFloat64(const Matcher<Node*>& input_matcher); 358 Matcher<Node*> IsChangeUint32ToUint64(const Matcher<Node*>& input_matcher); 359 Matcher<Node*> IsTruncateFloat64ToFloat32(const Matcher<Node*>& input_matcher); 360 Matcher<Node*> IsTruncateInt64ToInt32(const Matcher<Node*>& input_matcher); 361 Matcher<Node*> IsFloat32Max(const Matcher<Node*>& lhs_matcher, 362 const Matcher<Node*>& rhs_matcher); 363 Matcher<Node*> IsFloat32Min(const Matcher<Node*>& lhs_matcher, 364 const Matcher<Node*>& rhs_matcher); 365 Matcher<Node*> IsFloat32Abs(const Matcher<Node*>& input_matcher); 366 Matcher<Node*> IsFloat32Equal(const Matcher<Node*>& lhs_matcher, 367 const Matcher<Node*>& rhs_matcher); 368 Matcher<Node*> IsFloat32LessThan(const Matcher<Node*>& lhs_matcher, 369 const Matcher<Node*>& rhs_matcher); 370 Matcher<Node*> IsFloat32LessThanOrEqual(const Matcher<Node*>& lhs_matcher, 371 const Matcher<Node*>& rhs_matcher); 372 Matcher<Node*> IsFloat64Max(const Matcher<Node*>& lhs_matcher, 373 const Matcher<Node*>& rhs_matcher); 374 Matcher<Node*> IsFloat64Min(const Matcher<Node*>& lhs_matcher, 375 const Matcher<Node*>& rhs_matcher); 376 Matcher<Node*> IsFloat64Sub(const Matcher<Node*>& lhs_matcher, 377 const Matcher<Node*>& rhs_matcher); 378 Matcher<Node*> IsFloat64Abs(const Matcher<Node*>& input_matcher); 379 Matcher<Node*> IsFloat64Sqrt(const Matcher<Node*>& input_matcher); 380 Matcher<Node*> IsFloat64RoundDown(const Matcher<Node*>& input_matcher); 381 Matcher<Node*> IsFloat64RoundTruncate(const Matcher<Node*>& input_matcher); 382 Matcher<Node*> IsFloat64RoundTiesAway(const Matcher<Node*>& input_matcher); 383 Matcher<Node*> IsFloat64ExtractLowWord32(const Matcher<Node*>& input_matcher); 384 Matcher<Node*> IsFloat64ExtractHighWord32(const Matcher<Node*>& input_matcher); 385 Matcher<Node*> IsFloat64InsertLowWord32(const Matcher<Node*>& lhs_matcher, 386 const Matcher<Node*>& rhs_matcher); 387 Matcher<Node*> IsFloat64InsertHighWord32(const Matcher<Node*>& lhs_matcher, 388 const Matcher<Node*>& rhs_matcher); 389 Matcher<Node*> IsToNumber(const Matcher<Node*>& base_matcher, 390 const Matcher<Node*>& context_matcher, 391 const Matcher<Node*>& effect_matcher, 392 const Matcher<Node*>& control_matcher); 393 Matcher<Node*> IsLoadContext(const Matcher<ContextAccess>& access_matcher, 394 const Matcher<Node*>& context_matcher); 395 Matcher<Node*> IsNumberToInt32(const Matcher<Node*>& input_matcher); 396 Matcher<Node*> IsNumberToUint32(const Matcher<Node*>& input_matcher); 397 Matcher<Node*> IsParameter(const Matcher<int> index_matcher); 398 Matcher<Node*> IsLoadFramePointer(); 399 Matcher<Node*> IsLoadParentFramePointer(); 400 Matcher<Node*> IsPlainPrimitiveToNumber(const Matcher<Node*>& input_matcher); 401 402 Matcher<Node*> IsInt32PairAdd(const Matcher<Node*>& a_matcher, 403 const Matcher<Node*>& b_matcher, 404 const Matcher<Node*>& c_matcher, 405 const Matcher<Node*>& d_matcher); 406 Matcher<Node*> IsInt32PairSub(const Matcher<Node*>& a_matcher, 407 const Matcher<Node*>& b_matcher, 408 const Matcher<Node*>& c_matcher, 409 const Matcher<Node*>& d_matcher); 410 Matcher<Node*> IsInt32PairMul(const Matcher<Node*>& a_matcher, 411 const Matcher<Node*>& b_matcher, 412 const Matcher<Node*>& c_matcher, 413 const Matcher<Node*>& d_matcher); 414 415 Matcher<Node*> IsWord32PairShl(const Matcher<Node*>& lhs_matcher, 416 const Matcher<Node*>& mid_matcher, 417 const Matcher<Node*>& rhs_matcher); 418 Matcher<Node*> IsWord32PairShr(const Matcher<Node*>& lhs_matcher, 419 const Matcher<Node*>& mid_matcher, 420 const Matcher<Node*>& rhs_matcher); 421 422 Matcher<Node*> IsWord32PairSar(const Matcher<Node*>& lhs_matcher, 423 const Matcher<Node*>& mid_matcher, 424 const Matcher<Node*>& rhs_matcher); 425 426 Matcher<Node*> IsStackSlot(); 427 Matcher<Node*> IsTypeGuard(const Matcher<Type*>& type_matcher, 428 const Matcher<Node*>& value_matcher, 429 const Matcher<Node*>& control_matcher); 430 431 } // namespace compiler 432 } // namespace internal 433 } // namespace v8 434 435 #endif // V8_UNITTESTS_COMPILER_NODE_TEST_UTILS_H_ 436