• Home
  • Raw
  • Download

Lines Matching refs:selector

30   explicit Arm64OperandGenerator(InstructionSelector* selector)  in Arm64OperandGenerator()  argument
31 : OperandGenerator(selector) {} in Arm64OperandGenerator()
141 void VisitRR(InstructionSelector* selector, ArchOpcode opcode, Node* node) { in VisitRR() argument
142 Arm64OperandGenerator g(selector); in VisitRR()
143 selector->Emit(opcode, g.DefineAsRegister(node), in VisitRR()
148 void VisitRRR(InstructionSelector* selector, ArchOpcode opcode, Node* node) { in VisitRRR() argument
149 Arm64OperandGenerator g(selector); in VisitRRR()
150 selector->Emit(opcode, g.DefineAsRegister(node), in VisitRRR()
156 void VisitRRO(InstructionSelector* selector, ArchOpcode opcode, Node* node, in VisitRRO() argument
158 Arm64OperandGenerator g(selector); in VisitRRO()
159 selector->Emit(opcode, g.DefineAsRegister(node), in VisitRRO()
165 ExtendingLoadMatcher(Node* node, InstructionSelector* selector) in ExtendingLoadMatcher()
166 : matches_(false), selector_(selector), base_(nullptr), immediate_(0) { in ExtendingLoadMatcher()
213 bool TryMatchExtendingLoad(InstructionSelector* selector, Node* node) { in TryMatchExtendingLoad() argument
214 ExtendingLoadMatcher m(node, selector); in TryMatchExtendingLoad()
218 bool TryEmitExtendingLoad(InstructionSelector* selector, Node* node) { in TryEmitExtendingLoad() argument
219 ExtendingLoadMatcher m(node, selector); in TryEmitExtendingLoad()
220 Arm64OperandGenerator g(selector); in TryEmitExtendingLoad()
229 selector->Emit(opcode, arraysize(outputs), outputs, arraysize(inputs), in TryEmitExtendingLoad()
236 bool TryMatchAnyShift(InstructionSelector* selector, Node* node, in TryMatchAnyShift() argument
238 Arm64OperandGenerator g(selector); in TryMatchAnyShift()
240 if (!selector->CanCover(node, input_node)) return false; in TryMatchAnyShift()
257 if (TryMatchExtendingLoad(selector, input_node)) return false; in TryMatchAnyShift()
273 bool TryMatchAnyExtend(Arm64OperandGenerator* g, InstructionSelector* selector, in TryMatchAnyExtend() argument
277 if (!selector->CanCover(node, right_node)) return false; in TryMatchAnyExtend()
293 if (selector->CanCover(mright.node(), mright.left().node()) && in TryMatchAnyExtend()
311 InstructionSelector* selector, in TryMatchLoadStoreShift() argument
315 if (!selector->CanCover(node, index)) return false; in TryMatchLoadStoreShift()
401 void VisitBinop(InstructionSelector* selector, Node* node, in VisitBinop() argument
404 Arm64OperandGenerator g(selector); in VisitBinop()
426 TryMatchAnyExtend(&g, selector, node, left_node, right_node, in VisitBinop()
430 TryMatchAnyExtend(&g, selector, node, right_node, left_node, in VisitBinop()
434 } else if (TryMatchAnyShift(selector, node, right_node, &opcode, in VisitBinop()
442 } else if (can_commute && TryMatchAnyShift(selector, node, left_node, &opcode, in VisitBinop()
476 selector->EmitDeoptimize(opcode, output_count, outputs, input_count, inputs, in VisitBinop()
480 selector->Emit(opcode, output_count, outputs, input_count, inputs); in VisitBinop()
482 selector->Emit(opcode, output_count, outputs, input_count, inputs); in VisitBinop()
489 void VisitBinop(InstructionSelector* selector, Node* node, ArchOpcode opcode, in VisitBinop() argument
492 VisitBinop<Matcher>(selector, node, opcode, operand_mode, &cont); in VisitBinop()
497 void VisitAddSub(InstructionSelector* selector, Node* node, ArchOpcode opcode, in VisitAddSub() argument
499 Arm64OperandGenerator g(selector); in VisitAddSub()
503 selector->Emit(negate_opcode, g.DefineAsRegister(node), in VisitAddSub()
507 VisitBinop<Matcher>(selector, node, opcode, kArithmeticImm); in VisitAddSub()
529 void EmitLoad(InstructionSelector* selector, Node* node, InstructionCode opcode, in EmitLoad() argument
532 Arm64OperandGenerator g(selector); in EmitLoad()
548 } else if (TryMatchLoadStoreShift(&g, selector, rep, node, index, &inputs[1], in EmitLoad()
558 selector->Emit(opcode, arraysize(outputs), outputs, input_count, inputs); in EmitLoad()
846 static void VisitLogical(InstructionSelector* selector, Node* node, Matcher* m, in VisitLogical() argument
849 Arm64OperandGenerator g(selector); in VisitLogical()
881 selector->Emit(inv_opcode, g.DefineAsRegister(node), in VisitLogical()
894 selector->Emit(inv_opcode, g.DefineAsRegister(node), in VisitLogical()
902 selector->Emit(kArm64Not32, g.DefineAsRegister(node), in VisitLogical()
905 selector->Emit(kArm64Not, g.DefineAsRegister(node), in VisitLogical()
908 VisitBinop<Matcher>(selector, node, opcode, imm_mode); in VisitLogical()
1081 bool TryEmitBitfieldExtract32(InstructionSelector* selector, Node* node) { in TryEmitBitfieldExtract32() argument
1082 Arm64OperandGenerator g(selector); in TryEmitBitfieldExtract32()
1084 if (selector->CanCover(node, m.left().node()) && m.left().IsWord32Shl()) { in TryEmitBitfieldExtract32()
1097 selector->Emit(opcode, g.DefineAsRegister(node), in TryEmitBitfieldExtract32()
1445 void EmitInt32MulWithOverflow(InstructionSelector* selector, Node* node, in EmitInt32MulWithOverflow() argument
1447 Arm64OperandGenerator g(selector); in EmitInt32MulWithOverflow()
1452 selector->Emit(kArm64Smull, result, left, right); in EmitInt32MulWithOverflow()
1457 selector->Emit(opcode, g.NoOutput(), result, result, in EmitInt32MulWithOverflow()
1461 selector->EmitDeoptimize(opcode, 0, nullptr, 2, in, cont->kind(), in EmitInt32MulWithOverflow()
1464 selector->Emit(opcode, g.DefineAsRegister(cont->result()), result, result); in EmitInt32MulWithOverflow()
1467 selector->Emit(opcode, g.NoOutput(), result, result, in EmitInt32MulWithOverflow()
1802 void VisitCompare(InstructionSelector* selector, InstructionCode opcode, in VisitCompare() argument
1805 Arm64OperandGenerator g(selector); in VisitCompare()
1808 selector->Emit(opcode, g.NoOutput(), left, right, in VisitCompare()
1811 selector->EmitDeoptimize(opcode, g.NoOutput(), left, right, cont->kind(), in VisitCompare()
1814 selector->Emit(opcode, g.DefineAsRegister(cont->result()), left, right); in VisitCompare()
1817 selector->Emit(opcode, g.NoOutput(), left, right, in VisitCompare()
1824 void VisitWordCompare(InstructionSelector* selector, Node* node, in VisitWordCompare() argument
1827 Arm64OperandGenerator g(selector); in VisitWordCompare()
1833 VisitCompare(selector, opcode, g.UseRegister(left), g.UseImmediate(right), in VisitWordCompare()
1837 VisitCompare(selector, opcode, g.UseRegister(right), g.UseImmediate(left), in VisitWordCompare()
1840 VisitCompare(selector, opcode, g.UseRegister(left), g.UseRegister(right), in VisitWordCompare()
1898 void MaybeReplaceCmpZeroWithFlagSettingBinop(InstructionSelector* selector, in MaybeReplaceCmpZeroWithFlagSettingBinop() argument
1922 if (selector->CanCover(*node, binop)) { in MaybeReplaceCmpZeroWithFlagSettingBinop()
1929 } else if (selector->IsOnlyUserOfNodeInSameBlock(*node, binop)) { in MaybeReplaceCmpZeroWithFlagSettingBinop()
1973 void EmitBranchOrDeoptimize(InstructionSelector* selector, in EmitBranchOrDeoptimize() argument
1976 Arm64OperandGenerator g(selector); in EmitBranchOrDeoptimize()
1978 selector->Emit(cont->Encode(opcode), g.NoOutput(), value, in EmitBranchOrDeoptimize()
1982 selector->EmitDeoptimize(cont->Encode(opcode), g.NoOutput(), value, in EmitBranchOrDeoptimize()
1989 bool TryEmitCbzOrTbz(InstructionSelector* selector, Node* node, Node* user, in TryEmitCbzOrTbz() argument
2005 Arm64OperandGenerator g(selector); in TryEmitCbzOrTbz()
2008 if (m.IsFloat64ExtractHighWord32() && selector->CanCover(user, node)) { in TryEmitCbzOrTbz()
2013 selector->Emit(kArm64U64MoveFloat64, temp, in TryEmitCbzOrTbz()
2015 selector->Emit(cont->Encode(kArm64TestAndBranch), g.NoOutput(), temp, in TryEmitCbzOrTbz()
2020 selector->Emit(cont->Encode(kArm64TestAndBranch32), g.NoOutput(), in TryEmitCbzOrTbz()
2029 Arm64OperandGenerator g(selector); in TryEmitCbzOrTbz()
2031 EmitBranchOrDeoptimize(selector, kArm64CompareAndBranch32, in TryEmitCbzOrTbz()
2040 void VisitWord32Compare(InstructionSelector* selector, Node* node, in VisitWord32Compare() argument
2046 if (TryEmitCbzOrTbz(selector, m.left().node(), node, cond, cont)) return; in VisitWord32Compare()
2049 if (TryEmitCbzOrTbz(selector, m.right().node(), node, commuted_cond, cont)) in VisitWord32Compare()
2057 MaybeReplaceCmpZeroWithFlagSettingBinop(selector, &node, binop, &opcode, in VisitWord32Compare()
2067 MaybeReplaceCmpZeroWithFlagSettingBinop(selector, &node, binop, &opcode, in VisitWord32Compare()
2079 bool can_cover = selector->CanCover(node, sub); in VisitWord32Compare()
2093 VisitBinop<Int32BinopMatcher>(selector, node, opcode, immediate_mode, cont); in VisitWord32Compare()
2097 void VisitWordTest(InstructionSelector* selector, Node* node, in VisitWordTest() argument
2099 Arm64OperandGenerator g(selector); in VisitWordTest()
2100 VisitCompare(selector, opcode, g.UseRegister(node), g.UseRegister(node), in VisitWordTest()
2105 void VisitWord32Test(InstructionSelector* selector, Node* node, in VisitWord32Test() argument
2107 VisitWordTest(selector, node, kArm64Tst32, cont); in VisitWord32Test()
2111 void VisitWord64Test(InstructionSelector* selector, Node* node, in VisitWord64Test() argument
2113 VisitWordTest(selector, node, kArm64Tst, cont); in VisitWord64Test()
2117 bool TryEmitTestAndBranch(InstructionSelector* selector, Node* node, in TryEmitTestAndBranch() argument
2119 Arm64OperandGenerator g(selector); in TryEmitTestAndBranch()
2125 selector->Emit( in TryEmitTestAndBranch()
2135 void VisitFloat32Compare(InstructionSelector* selector, Node* node, in VisitFloat32Compare() argument
2137 Arm64OperandGenerator g(selector); in VisitFloat32Compare()
2140 VisitCompare(selector, kArm64Float32Cmp, g.UseRegister(m.left().node()), in VisitFloat32Compare()
2144 VisitCompare(selector, kArm64Float32Cmp, g.UseRegister(m.right().node()), in VisitFloat32Compare()
2147 VisitCompare(selector, kArm64Float32Cmp, g.UseRegister(m.left().node()), in VisitFloat32Compare()
2154 void VisitFloat64Compare(InstructionSelector* selector, Node* node, in VisitFloat64Compare() argument
2156 Arm64OperandGenerator g(selector); in VisitFloat64Compare()
2159 VisitCompare(selector, kArm64Float64Cmp, g.UseRegister(m.left().node()), in VisitFloat64Compare()
2163 VisitCompare(selector, kArm64Float64Cmp, g.UseRegister(m.right().node()), in VisitFloat64Compare()
2166 VisitCompare(selector, kArm64Float64Cmp, g.UseRegister(m.left().node()), in VisitFloat64Compare()
2171 void VisitWordCompareZero(InstructionSelector* selector, Node* user, in VisitWordCompareZero() argument
2173 Arm64OperandGenerator g(selector); in VisitWordCompareZero()
2176 selector->CanCover(user, value)) { in VisitWordCompareZero()
2185 if (selector->CanCover(user, value)) { in VisitWordCompareZero()
2189 return VisitWord32Compare(selector, value, cont); in VisitWordCompareZero()
2192 return VisitWord32Compare(selector, value, cont); in VisitWordCompareZero()
2195 return VisitWord32Compare(selector, value, cont); in VisitWordCompareZero()
2198 return VisitWord32Compare(selector, value, cont); in VisitWordCompareZero()
2201 return VisitWord32Compare(selector, value, cont); in VisitWordCompareZero()
2207 if (selector->CanCover(value, left) && in VisitWordCompareZero()
2212 selector, left, cont)) { in VisitWordCompareZero()
2215 return VisitWordCompare(selector, left, kArm64Tst, cont, true, in VisitWordCompareZero()
2220 EmitBranchOrDeoptimize(selector, in VisitWordCompareZero()
2226 return VisitWordCompare(selector, value, kArm64Cmp, cont, false, in VisitWordCompareZero()
2231 return VisitWordCompare(selector, value, kArm64Cmp, cont, false, in VisitWordCompareZero()
2235 return VisitWordCompare(selector, value, kArm64Cmp, cont, false, in VisitWordCompareZero()
2239 return VisitWordCompare(selector, value, kArm64Cmp, cont, false, in VisitWordCompareZero()
2243 return VisitWordCompare(selector, value, kArm64Cmp, cont, false, in VisitWordCompareZero()
2247 return VisitFloat32Compare(selector, value, cont); in VisitWordCompareZero()
2250 return VisitFloat32Compare(selector, value, cont); in VisitWordCompareZero()
2253 return VisitFloat32Compare(selector, value, cont); in VisitWordCompareZero()
2256 return VisitFloat64Compare(selector, value, cont); in VisitWordCompareZero()
2259 return VisitFloat64Compare(selector, value, cont); in VisitWordCompareZero()
2262 return VisitFloat64Compare(selector, value, cont); in VisitWordCompareZero()
2274 if (result == nullptr || selector->IsDefined(result)) { in VisitWordCompareZero()
2279 selector, node, kArm64Add32, kArithmeticImm, cont); in VisitWordCompareZero()
2283 selector, node, kArm64Sub32, kArithmeticImm, cont); in VisitWordCompareZero()
2290 return EmitInt32MulWithOverflow(selector, node, cont); in VisitWordCompareZero()
2293 return VisitBinop<Int64BinopMatcher>(selector, node, kArm64Add, in VisitWordCompareZero()
2297 return VisitBinop<Int64BinopMatcher>(selector, node, kArm64Sub, in VisitWordCompareZero()
2306 return VisitWordCompare(selector, value, kArm64Cmn32, cont, true, in VisitWordCompareZero()
2309 return VisitWord32Compare(selector, value, cont); in VisitWordCompareZero()
2312 selector, value, cont)) { in VisitWordCompareZero()
2315 return VisitWordCompare(selector, value, kArm64Tst32, cont, true, in VisitWordCompareZero()
2319 selector, value, cont)) { in VisitWordCompareZero()
2322 return VisitWordCompare(selector, value, kArm64Tst, cont, true, in VisitWordCompareZero()
2331 selector->Emit(cont->Encode(kArm64CompareAndBranch32), g.NoOutput(), in VisitWordCompareZero()
2335 selector->EmitDeoptimize(cont->Encode(kArm64Tst32), g.NoOutput(), in VisitWordCompareZero()
2340 selector->Emit(cont->Encode(kArm64Tst32), g.NoOutput(), in VisitWordCompareZero()