Lines Matching defs:gate

33     for (auto gate : gateList) {
34 FindBuilderBegin(gate);
42 for (auto gate : concatGates_) {
43 StatusTransfer(gate);
47 void StringBuilderOptimizer::FindBuilderBegin(GateRef gate)
49 auto op = acc_.GetOpCode(gate);
51 concatGates_.push_back(gate);
52 GateRef left = acc_.GetValueIn(gate, 0);
55 SetStatus(gate, State::BEGIN_STRING_BUILDER, stringBuilderCount_);
56 stringBuilders_.push_back(StringBuilder{gate, static_cast<int>(stringBuilderCount_), false});
60 SetStatus(gate, State::INVALID_OPT);
64 SetStatus(gate, State::UNVISITED);
66 curStringAddId_ = acc_.GetId(gate);
68 SetStatus(gate, State::UNVISITED);
70 SetStatus(gate, State::INVALID_OPT);
73 SetStatus(gate, State::INVALID_OPT);
76 } else if (op == OpCode::VALUE_SELECTOR && PhiInputsAreConcatsOrPhi(gate)) {
77 SetStatus(gate, State::UNVISITED);
79 SetStatus(gate, State::INVALID_OPT);
83 void StringBuilderOptimizer::FindInBuilder(GateRef gate)
86 toVisit_.push_back(gate);
192 void StringBuilderOptimizer::StatusTransfer(GateRef gate)
194 Status status = GetStatus(gate);
197 acc_.SetStringStatus(gate, EcmaString::BEGIN_STRING_ADD);
200 acc_.SetStringStatus(gate, EcmaString::IN_STRING_ADD);
203 acc_.SetStringStatus(gate, EcmaString::CONFIRMED_IN_STRING_ADD);
206 acc_.SetStringStatus(gate, EcmaString::END_STRING_ADD);
209 acc_.SetStringStatus(gate, EcmaString::INVALID_STRING_ADD);
215 bool StringBuilderOptimizer::HasConcatOrPhiUse(GateRef gate)
217 auto uses = acc_.Uses(gate);
231 bool StringBuilderOptimizer::CheckStringAddUses(GateRef gate)
233 ASSERT(acc_.GetOpCode(gate) == OpCode::STRING_ADD || acc_.IsValueSelector(gate));
235 auto uses = acc_.Uses(gate);
243 // if this gate has multiple string-add uses
244 // or this gate has an invalid use
245 // we cannot set current gate to IN_STRING_BUILDER
252 // this gate has a phi use, then check the phi use gate
256 // this gate has the following types of uses is valid
266 bool StringBuilderOptimizer::IsLiteralString(GateRef gate)
268 return acc_.IsConstString(gate) || acc_.GetOpCode(gate) == OpCode::STRING_FROM_SINGLE_CHAR_CODE;
271 bool StringBuilderOptimizer::IsLoopHeader(GateRef gate)
273 return acc_.GetOpCode(acc_.GetState(gate)) == OpCode::LOOP_BEGIN;
276 bool StringBuilderOptimizer::LoopContains(GateRef loopPhi, GateRef gate)
279 while (gate != acc_.GetStateRoot()) {
280 if (gate == loopPhi) {
283 if (acc_.GetStateCount(gate) == 0) {
286 gate = acc_.GetState(gate, 0);