V8 Project
v8::internal::Trace Class Reference

#include <jsregexp.h>

+ Collaboration diagram for v8::internal::Trace:

Classes

class  DeferredAction
 
class  DeferredCapture
 
class  DeferredClearCaptures
 
class  DeferredIncrementRegister
 
class  DeferredSetRegister
 

Public Types

enum  TriBool { UNKNOWN = -1 , FALSE_VALUE = 0 , TRUE_VALUE = 1 }
 

Public Member Functions

 Trace ()
 
void Flush (RegExpCompiler *compiler, RegExpNode *successor)
 
int cp_offset ()
 
DeferredActionactions ()
 
bool is_trivial ()
 
TriBool at_start ()
 
void set_at_start (bool at_start)
 
Label * backtrack ()
 
Label * loop_label ()
 
RegExpNodestop_node ()
 
int characters_preloaded ()
 
int bound_checked_up_to ()
 
int flush_budget ()
 
QuickCheckDetailsquick_check_performed ()
 
bool mentions_reg (int reg)
 
bool GetStoredPosition (int reg, int *cp_offset)
 
void add_action (DeferredAction *new_action)
 
void set_backtrack (Label *backtrack)
 
void set_stop_node (RegExpNode *node)
 
void set_loop_label (Label *label)
 
void set_characters_preloaded (int count)
 
void set_bound_checked_up_to (int to)
 
void set_flush_budget (int to)
 
void set_quick_check_performed (QuickCheckDetails *d)
 
void InvalidateCurrentCharacter ()
 
void AdvanceCurrentPositionInTrace (int by, RegExpCompiler *compiler)
 

Private Member Functions

int FindAffectedRegisters (OutSet *affected_registers, Zone *zone)
 
void PerformDeferredActions (RegExpMacroAssembler *macro, int max_register, const OutSet &affected_registers, OutSet *registers_to_pop, OutSet *registers_to_clear, Zone *zone)
 
void RestoreAffectedRegisters (RegExpMacroAssembler *macro, int max_register, const OutSet &registers_to_pop, const OutSet &registers_to_clear)
 

Private Attributes

int cp_offset_
 
DeferredActionactions_
 
Label * backtrack_
 
RegExpNodestop_node_
 
Label * loop_label_
 
int characters_preloaded_
 
int bound_checked_up_to_
 
QuickCheckDetails quick_check_performed_
 
int flush_budget_
 
TriBool at_start_
 

Detailed Description

Definition at line 1356 of file jsregexp.h.

Member Enumeration Documentation

◆ TriBool

Enumerator
UNKNOWN 
FALSE_VALUE 
TRUE_VALUE 

Definition at line 1360 of file jsregexp.h.

1360  {
1361  UNKNOWN = -1, FALSE_VALUE = 0, TRUE_VALUE = 1
1362  };

Constructor & Destructor Documentation

◆ Trace()

v8::internal::Trace::Trace ( )
inline

Definition at line 1419 of file jsregexp.h.

1420  : cp_offset_(0),
1421  actions_(NULL),
1422  backtrack_(NULL),
1423  stop_node_(NULL),
1424  loop_label_(NULL),
1427  flush_budget_(100),
1428  at_start_(UNKNOWN) { }
DeferredAction * actions_
Definition: jsregexp.h:1504
RegExpNode * stop_node_
Definition: jsregexp.h:1506
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be NULL

Member Function Documentation

◆ actions()

DeferredAction* v8::internal::Trace::actions ( )
inline

Definition at line 1436 of file jsregexp.h.

1436 { return actions_; }

References actions_.

Referenced by v8::internal::ChoiceNode::Emit(), and v8::internal::ChoiceNode::EmitChoices().

+ Here is the caller graph for this function:

◆ add_action()

void v8::internal::Trace::add_action ( DeferredAction new_action)
inline

Definition at line 1474 of file jsregexp.h.

1474  {
1475  DCHECK(new_action->next_ == NULL);
1476  new_action->next_ = actions_;
1477  actions_ = new_action;
1478  }
#define DCHECK(condition)
Definition: logging.h:205

References actions_, DCHECK, v8::internal::Trace::DeferredAction::next_, and NULL.

Referenced by v8::internal::ActionNode::Emit().

+ Here is the caller graph for this function:

◆ AdvanceCurrentPositionInTrace()

void v8::internal::Trace::AdvanceCurrentPositionInTrace ( int  by,
RegExpCompiler compiler 
)

Definition at line 3374 of file jsregexp.cc.

3374  {
3375  DCHECK(by > 0);
3376  // We don't have an instruction for shifting the current character register
3377  // down or for using a shifted value for anything so lets just forget that
3378  // we preloaded any characters into it.
3380  // Adjust the offsets of the quick check performed information. This
3381  // information is used to find out what we already determined about the
3382  // characters by means of mask and compare.
3383  quick_check_performed_.Advance(by, compiler->one_byte());
3384  cp_offset_ += by;
3386  compiler->SetRegExpTooBig();
3387  cp_offset_ = 0;
3388  }
3390 }
void Advance(int by, bool one_byte)
Definition: jsregexp.cc:2691
QuickCheckDetails quick_check_performed_
Definition: jsregexp.h:1510
static LifetimePosition Max(LifetimePosition a, LifetimePosition b)

References v8::internal::QuickCheckDetails::Advance(), bound_checked_up_to_, characters_preloaded_, cp_offset_, DCHECK, v8::internal::RegExpMacroAssembler::kMaxCPOffset, v8::internal::Max(), v8::internal::RegExpCompiler::one_byte(), quick_check_performed_, and v8::internal::RegExpCompiler::SetRegExpTooBig().

Referenced by v8::internal::TextNode::Emit().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ at_start()

TriBool v8::internal::Trace::at_start ( )
inline

Definition at line 1456 of file jsregexp.h.

1456 { return at_start_; }

References at_start_.

Referenced by v8::internal::AssertionNode::Emit(), v8::internal::AssertionNode::EmitBoundaryCheck(), v8::internal::RegExpNode::EmitQuickCheck(), set_at_start(), and v8::internal::ChoiceNode::SetUpPreLoad().

+ Here is the caller graph for this function:

◆ backtrack()

◆ bound_checked_up_to()

int v8::internal::Trace::bound_checked_up_to ( )
inline

Definition at line 1464 of file jsregexp.h.

1464 { return bound_checked_up_to_; }

References bound_checked_up_to_.

Referenced by v8::internal::TextNode::Emit().

+ Here is the caller graph for this function:

◆ characters_preloaded()

int v8::internal::Trace::characters_preloaded ( )
inline

Definition at line 1463 of file jsregexp.h.

1463 { return characters_preloaded_; }

References characters_preloaded_.

Referenced by v8::internal::TextNode::Emit(), v8::internal::AssertionNode::EmitBoundaryCheck(), v8::internal::RegExpNode::EmitQuickCheck(), and v8::internal::ChoiceNode::SetUpPreLoad().

+ Here is the caller graph for this function:

◆ cp_offset()

◆ FindAffectedRegisters()

int v8::internal::Trace::FindAffectedRegisters ( OutSet affected_registers,
Zone zone 
)
private

Definition at line 1182 of file jsregexp.cc.

1183  {
1184  int max_register = RegExpCompiler::kNoRegister;
1185  for (DeferredAction* action = actions_;
1186  action != NULL;
1187  action = action->next()) {
1188  if (action->action_type() == ActionNode::CLEAR_CAPTURES) {
1189  Interval range = static_cast<DeferredClearCaptures*>(action)->range();
1190  for (int i = range.from(); i <= range.to(); i++)
1191  affected_registers->Set(i, zone);
1192  if (range.to() > max_register) max_register = range.to();
1193  } else {
1194  affected_registers->Set(action->reg(), zone);
1195  if (action->reg() > max_register) max_register = action->reg();
1196  }
1197  }
1198  return max_register;
1199 }
static const int kNoRegister
Definition: jsregexp.cc:1038

References actions_, v8::internal::ActionNode::CLEAR_CAPTURES, v8::internal::Interval::from(), v8::internal::RegExpCompiler::kNoRegister, NULL, v8::internal::OutSet::Set(), and v8::internal::Interval::to().

Referenced by Flush().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Flush()

void v8::internal::Trace::Flush ( RegExpCompiler compiler,
RegExpNode successor 
)

Definition at line 1353 of file jsregexp.cc.

1353  {
1354  RegExpMacroAssembler* assembler = compiler->macro_assembler();
1355 
1356  DCHECK(!is_trivial());
1357 
1358  if (actions_ == NULL && backtrack() == NULL) {
1359  // Here we just have some deferred cp advances to fix and we are back to
1360  // a normal situation. We may also have to forget some information gained
1361  // through a quick check that was already performed.
1362  if (cp_offset_ != 0) assembler->AdvanceCurrentPosition(cp_offset_);
1363  // Create a new trivial state and generate the node with that.
1364  Trace new_state;
1365  successor->Emit(compiler, &new_state);
1366  return;
1367  }
1368 
1369  // Generate deferred actions here along with code to undo them again.
1370  OutSet affected_registers;
1371 
1372  if (backtrack() != NULL) {
1373  // Here we have a concrete backtrack location. These are set up by choice
1374  // nodes and so they indicate that we have a deferred save of the current
1375  // position which we may need to emit here.
1376  assembler->PushCurrentPosition();
1377  }
1378 
1379  int max_register = FindAffectedRegisters(&affected_registers,
1380  compiler->zone());
1381  OutSet registers_to_pop;
1382  OutSet registers_to_clear;
1383  PerformDeferredActions(assembler,
1384  max_register,
1385  affected_registers,
1386  &registers_to_pop,
1387  &registers_to_clear,
1388  compiler->zone());
1389  if (cp_offset_ != 0) {
1390  assembler->AdvanceCurrentPosition(cp_offset_);
1391  }
1392 
1393  // Create a new trivial state and generate the node with that.
1394  Label undo;
1395  assembler->PushBacktrack(&undo);
1396  Trace new_state;
1397  successor->Emit(compiler, &new_state);
1398 
1399  // On backtrack we need to restore state.
1400  assembler->Bind(&undo);
1401  RestoreAffectedRegisters(assembler,
1402  max_register,
1403  registers_to_pop,
1404  registers_to_clear);
1405  if (backtrack() == NULL) {
1406  assembler->Backtrack();
1407  } else {
1408  assembler->PopCurrentPosition();
1409  assembler->GoTo(backtrack());
1410  }
1411 }
int FindAffectedRegisters(OutSet *affected_registers, Zone *zone)
Definition: jsregexp.cc:1182
void RestoreAffectedRegisters(RegExpMacroAssembler *macro, int max_register, const OutSet &registers_to_pop, const OutSet &registers_to_clear)
Definition: jsregexp.cc:1202
void PerformDeferredActions(RegExpMacroAssembler *macro, int max_register, const OutSet &affected_registers, OutSet *registers_to_pop, OutSet *registers_to_clear, Zone *zone)
Definition: jsregexp.cc:1220
Label * backtrack()
Definition: jsregexp.h:1460

References actions_, v8::internal::RegExpMacroAssembler::AdvanceCurrentPosition(), backtrack(), v8::internal::RegExpMacroAssembler::Backtrack(), v8::internal::RegExpMacroAssembler::Bind(), cp_offset_, DCHECK, v8::internal::RegExpNode::Emit(), FindAffectedRegisters(), v8::internal::RegExpMacroAssembler::GoTo(), is_trivial(), v8::internal::RegExpCompiler::macro_assembler(), NULL, PerformDeferredActions(), v8::internal::RegExpMacroAssembler::PopCurrentPosition(), v8::internal::RegExpMacroAssembler::PushBacktrack(), v8::internal::RegExpMacroAssembler::PushCurrentPosition(), RestoreAffectedRegisters(), and v8::internal::RegExpCompiler::zone().

Referenced by v8::internal::ActionNode::Emit(), v8::internal::BackReferenceNode::Emit(), v8::internal::EndNode::Emit(), v8::internal::ChoiceNode::Emit(), v8::internal::LoopChoiceNode::Emit(), and v8::internal::RegExpNode::LimitVersions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ flush_budget()

int v8::internal::Trace::flush_budget ( )
inline

Definition at line 1465 of file jsregexp.h.

1465 { return flush_budget_; }

References flush_budget_.

Referenced by v8::internal::ChoiceNode::Emit(), and v8::internal::ChoiceNode::EmitChoices().

+ Here is the caller graph for this function:

◆ GetStoredPosition()

bool v8::internal::Trace::GetStoredPosition ( int  reg,
int cp_offset 
)

Definition at line 1164 of file jsregexp.cc.

1164  {
1165  DCHECK_EQ(0, *cp_offset);
1166  for (DeferredAction* action = actions_;
1167  action != NULL;
1168  action = action->next()) {
1169  if (action->Mentions(reg)) {
1170  if (action->action_type() == ActionNode::STORE_POSITION) {
1171  *cp_offset = static_cast<DeferredCapture*>(action)->cp_offset();
1172  return true;
1173  } else {
1174  return false;
1175  }
1176  }
1177  }
1178  return false;
1179 }
#define DCHECK_EQ(v1, v2)
Definition: logging.h:206

References actions_, cp_offset(), DCHECK_EQ, NULL, and v8::internal::ActionNode::STORE_POSITION.

Referenced by v8::internal::ActionNode::Emit().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ InvalidateCurrentCharacter()

void v8::internal::Trace::InvalidateCurrentCharacter ( )

Definition at line 3369 of file jsregexp.cc.

3369  {
3371 }

References characters_preloaded_.

Referenced by v8::internal::AssertionNode::BacktrackIfPrevious(), v8::internal::ChoiceNode::EmitChoices(), and v8::internal::EmitHat().

+ Here is the caller graph for this function:

◆ is_trivial()

bool v8::internal::Trace::is_trivial ( )
inline

Definition at line 1447 of file jsregexp.h.

1447  {
1448  return backtrack_ == NULL &&
1449  actions_ == NULL &&
1450  cp_offset_ == 0 &&
1451  characters_preloaded_ == 0 &&
1452  bound_checked_up_to_ == 0 &&
1454  at_start_ == UNKNOWN;
1455  }

References actions_, at_start_, backtrack_, bound_checked_up_to_, v8::internal::QuickCheckDetails::characters(), characters_preloaded_, cp_offset_, NULL, quick_check_performed_, and UNKNOWN.

Referenced by v8::internal::ActionNode::Emit(), v8::internal::BackReferenceNode::Emit(), v8::internal::EndNode::Emit(), v8::internal::LoopChoiceNode::Emit(), v8::internal::ChoiceNode::EmitOptimizedUnanchoredSearch(), Flush(), and v8::internal::RegExpNode::LimitVersions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ loop_label()

Label* v8::internal::Trace::loop_label ( )
inline

Definition at line 1461 of file jsregexp.h.

1461 { return loop_label_; }

References loop_label_.

Referenced by v8::internal::LoopChoiceNode::Emit().

+ Here is the caller graph for this function:

◆ mentions_reg()

bool v8::internal::Trace::mentions_reg ( int  reg)

Definition at line 1153 of file jsregexp.cc.

1153  {
1154  for (DeferredAction* action = actions_;
1155  action != NULL;
1156  action = action->next()) {
1157  if (action->Mentions(reg))
1158  return true;
1159  }
1160  return false;
1161 }

References actions_, and NULL.

Referenced by v8::internal::ChoiceNode::AssertGuardsMentionRegisters(), and v8::internal::ChoiceNode::GenerateGuard().

+ Here is the caller graph for this function:

◆ PerformDeferredActions()

void v8::internal::Trace::PerformDeferredActions ( RegExpMacroAssembler macro,
int  max_register,
const OutSet affected_registers,
OutSet registers_to_pop,
OutSet registers_to_clear,
Zone zone 
)
private

Definition at line 1220 of file jsregexp.cc.

1225  {
1226  // The "+1" is to avoid a push_limit of zero if stack_limit_slack() is 1.
1227  const int push_limit = (assembler->stack_limit_slack() + 1) / 2;
1228 
1229  // Count pushes performed to force a stack limit check occasionally.
1230  int pushes = 0;
1231 
1232  for (int reg = 0; reg <= max_register; reg++) {
1233  if (!affected_registers.Get(reg)) {
1234  continue;
1235  }
1236 
1237  // The chronologically first deferred action in the trace
1238  // is used to infer the action needed to restore a register
1239  // to its previous state (or not, if it's safe to ignore it).
1240  enum DeferredActionUndoType { IGNORE, RESTORE, CLEAR };
1241  DeferredActionUndoType undo_action = IGNORE;
1242 
1243  int value = 0;
1244  bool absolute = false;
1245  bool clear = false;
1246  int store_position = -1;
1247  // This is a little tricky because we are scanning the actions in reverse
1248  // historical order (newest first).
1249  for (DeferredAction* action = actions_;
1250  action != NULL;
1251  action = action->next()) {
1252  if (action->Mentions(reg)) {
1253  switch (action->action_type()) {
1254  case ActionNode::SET_REGISTER: {
1255  Trace::DeferredSetRegister* psr =
1256  static_cast<Trace::DeferredSetRegister*>(action);
1257  if (!absolute) {
1258  value += psr->value();
1259  absolute = true;
1260  }
1261  // SET_REGISTER is currently only used for newly introduced loop
1262  // counters. They can have a significant previous value if they
1263  // occour in a loop. TODO(lrn): Propagate this information, so
1264  // we can set undo_action to IGNORE if we know there is no value to
1265  // restore.
1266  undo_action = RESTORE;
1267  DCHECK_EQ(store_position, -1);
1268  DCHECK(!clear);
1269  break;
1270  }
1272  if (!absolute) {
1273  value++;
1274  }
1275  DCHECK_EQ(store_position, -1);
1276  DCHECK(!clear);
1277  undo_action = RESTORE;
1278  break;
1280  Trace::DeferredCapture* pc =
1281  static_cast<Trace::DeferredCapture*>(action);
1282  if (!clear && store_position == -1) {
1283  store_position = pc->cp_offset();
1284  }
1285 
1286  // For captures we know that stores and clears alternate.
1287  // Other register, are never cleared, and if the occur
1288  // inside a loop, they might be assigned more than once.
1289  if (reg <= 1) {
1290  // Registers zero and one, aka "capture zero", is
1291  // always set correctly if we succeed. There is no
1292  // need to undo a setting on backtrack, because we
1293  // will set it again or fail.
1294  undo_action = IGNORE;
1295  } else {
1296  undo_action = pc->is_capture() ? CLEAR : RESTORE;
1297  }
1298  DCHECK(!absolute);
1299  DCHECK_EQ(value, 0);
1300  break;
1301  }
1303  // Since we're scanning in reverse order, if we've already
1304  // set the position we have to ignore historically earlier
1305  // clearing operations.
1306  if (store_position == -1) {
1307  clear = true;
1308  }
1309  undo_action = RESTORE;
1310  DCHECK(!absolute);
1311  DCHECK_EQ(value, 0);
1312  break;
1313  }
1314  default:
1315  UNREACHABLE();
1316  break;
1317  }
1318  }
1319  }
1320  // Prepare for the undo-action (e.g., push if it's going to be popped).
1321  if (undo_action == RESTORE) {
1322  pushes++;
1325  if (pushes == push_limit) {
1327  pushes = 0;
1328  }
1329 
1330  assembler->PushRegister(reg, stack_check);
1331  registers_to_pop->Set(reg, zone);
1332  } else if (undo_action == CLEAR) {
1333  registers_to_clear->Set(reg, zone);
1334  }
1335  // Perform the chronologically last action (or accumulated increment)
1336  // for the register.
1337  if (store_position != -1) {
1338  assembler->WriteCurrentPositionToRegister(reg, store_position);
1339  } else if (clear) {
1340  assembler->ClearRegisters(reg, reg);
1341  } else if (absolute) {
1342  assembler->SetRegister(reg, value);
1343  } else if (value != 0) {
1344  assembler->AdvanceRegister(reg, value);
1345  }
1346  }
1347 }
#define UNREACHABLE()
Definition: logging.h:30
const Register pc

References actions_, v8::internal::RegExpMacroAssembler::AdvanceRegister(), v8::internal::ActionNode::CLEAR_CAPTURES, v8::internal::RegExpMacroAssembler::ClearRegisters(), DCHECK, DCHECK_EQ, v8::internal::OutSet::Get(), v8::internal::ActionNode::INCREMENT_REGISTER, v8::internal::RegExpMacroAssembler::kCheckStackLimit, v8::internal::RegExpMacroAssembler::kNoStackLimitCheck, NULL, v8::internal::pc, v8::internal::RegExpMacroAssembler::PushRegister(), v8::internal::OutSet::Set(), v8::internal::ActionNode::SET_REGISTER, v8::internal::RegExpMacroAssembler::SetRegister(), v8::internal::RegExpMacroAssembler::stack_limit_slack(), v8::internal::ActionNode::STORE_POSITION, UNREACHABLE, v8::internal::Trace::DeferredSetRegister::value(), and v8::internal::RegExpMacroAssembler::WriteCurrentPositionToRegister().

Referenced by Flush().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ quick_check_performed()

QuickCheckDetails* v8::internal::Trace::quick_check_performed ( )
inline

Definition at line 1466 of file jsregexp.h.

1466 { return &quick_check_performed_; }

References quick_check_performed_.

Referenced by v8::internal::ChoiceNode::EmitChoices(), and v8::internal::TextNode::TextEmitPass().

+ Here is the caller graph for this function:

◆ RestoreAffectedRegisters()

void v8::internal::Trace::RestoreAffectedRegisters ( RegExpMacroAssembler macro,
int  max_register,
const OutSet registers_to_pop,
const OutSet registers_to_clear 
)
private

Definition at line 1202 of file jsregexp.cc.

1205  {
1206  for (int reg = max_register; reg >= 0; reg--) {
1207  if (registers_to_pop.Get(reg)) {
1208  assembler->PopRegister(reg);
1209  } else if (registers_to_clear.Get(reg)) {
1210  int clear_to = reg;
1211  while (reg > 0 && registers_to_clear.Get(reg - 1)) {
1212  reg--;
1213  }
1214  assembler->ClearRegisters(reg, clear_to);
1215  }
1216  }
1217 }

References v8::internal::RegExpMacroAssembler::ClearRegisters(), v8::internal::OutSet::Get(), and v8::internal::RegExpMacroAssembler::PopRegister().

Referenced by Flush().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_at_start()

void v8::internal::Trace::set_at_start ( bool  at_start)
inline

Definition at line 1457 of file jsregexp.h.

1457  {
1459  }
TriBool at_start()
Definition: jsregexp.h:1456

References at_start(), at_start_, FALSE_VALUE, and TRUE_VALUE.

Referenced by v8::internal::TextNode::Emit(), v8::internal::AssertionNode::Emit(), v8::internal::ChoiceNode::EmitChoices(), v8::internal::ChoiceNode::EmitGreedyLoop(), v8::internal::ChoiceNode::EmitOutOfLineContinuation(), and v8::internal::GreedyLoopState::GreedyLoopState().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_backtrack()

void v8::internal::Trace::set_backtrack ( Label *  backtrack)
inline

Definition at line 1479 of file jsregexp.h.

1479 { backtrack_ = backtrack; }

References backtrack(), and backtrack_.

Referenced by v8::internal::ActionNode::Emit(), v8::internal::ChoiceNode::EmitChoices(), v8::internal::ChoiceNode::EmitGreedyLoop(), v8::internal::ChoiceNode::EmitOutOfLineContinuation(), and v8::internal::GreedyLoopState::GreedyLoopState().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_bound_checked_up_to()

void v8::internal::Trace::set_bound_checked_up_to ( int  to)
inline

Definition at line 1483 of file jsregexp.h.

1483 { bound_checked_up_to_ = to; }
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be expose gc extension under the specified name show built in functions in stack traces use random jit cookie to mask large constants minimum length for automatic enable preparsing CPU profiler sampling interval in microseconds trace out of bounds accesses to external arrays default size of stack region v8 is allowed to maximum length of function source code printed in a stack trace min size of a semi the new space consists of two semi spaces print one trace line following each garbage collection do not print trace line after scavenger collection print cumulative GC statistics in only print modified registers Trace simulator debug messages Implied by trace sim abort randomize hashes to avoid predictable hash Fixed seed to use to hash property Print the time it takes to deserialize the snapshot A filename with extra code to be included in the A file to write the raw snapshot bytes to(mksnapshot only)") DEFINE_STRING(raw_context_file

References bound_checked_up_to_, and to().

Referenced by v8::internal::ChoiceNode::EmitChoices().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_characters_preloaded()

void v8::internal::Trace::set_characters_preloaded ( int  count)
inline

Definition at line 1482 of file jsregexp.h.

1482 { characters_preloaded_ = count; }

References characters_preloaded_.

Referenced by v8::internal::ChoiceNode::EmitChoices(), and v8::internal::ChoiceNode::EmitOutOfLineContinuation().

+ Here is the caller graph for this function:

◆ set_flush_budget()

void v8::internal::Trace::set_flush_budget ( int  to)
inline

Definition at line 1484 of file jsregexp.h.

1484 { flush_budget_ = to; }

References flush_budget_, and to().

Referenced by v8::internal::ChoiceNode::Emit(), and v8::internal::ChoiceNode::EmitChoices().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_loop_label()

void v8::internal::Trace::set_loop_label ( Label *  label)
inline

Definition at line 1481 of file jsregexp.h.

1481 { loop_label_ = label; }

References loop_label_.

Referenced by v8::internal::ChoiceNode::EmitGreedyLoop().

+ Here is the caller graph for this function:

◆ set_quick_check_performed()

void v8::internal::Trace::set_quick_check_performed ( QuickCheckDetails d)
inline

Definition at line 1485 of file jsregexp.h.

1485  {
1487  }

References quick_check_performed_.

Referenced by v8::internal::ChoiceNode::EmitChoices(), and v8::internal::ChoiceNode::EmitOutOfLineContinuation().

+ Here is the caller graph for this function:

◆ set_stop_node()

void v8::internal::Trace::set_stop_node ( RegExpNode node)
inline

Definition at line 1480 of file jsregexp.h.

1480 { stop_node_ = node; }

References stop_node_.

Referenced by v8::internal::ChoiceNode::EmitGreedyLoop().

+ Here is the caller graph for this function:

◆ stop_node()

RegExpNode* v8::internal::Trace::stop_node ( )
inline

Definition at line 1462 of file jsregexp.h.

1462 { return stop_node_; }

References stop_node_.

Referenced by v8::internal::LoopChoiceNode::Emit(), v8::internal::ChoiceNode::EmitGreedyLoop(), and v8::internal::RegExpNode::LimitVersions().

+ Here is the caller graph for this function:

Member Data Documentation

◆ actions_

DeferredAction* v8::internal::Trace::actions_
private

◆ at_start_

TriBool v8::internal::Trace::at_start_
private

Definition at line 1512 of file jsregexp.h.

Referenced by at_start(), is_trivial(), and set_at_start().

◆ backtrack_

Label* v8::internal::Trace::backtrack_
private

Definition at line 1505 of file jsregexp.h.

Referenced by backtrack(), is_trivial(), and set_backtrack().

◆ bound_checked_up_to_

int v8::internal::Trace::bound_checked_up_to_
private

◆ characters_preloaded_

int v8::internal::Trace::characters_preloaded_
private

◆ cp_offset_

int v8::internal::Trace::cp_offset_
private

Definition at line 1503 of file jsregexp.h.

Referenced by AdvanceCurrentPositionInTrace(), cp_offset(), Flush(), and is_trivial().

◆ flush_budget_

int v8::internal::Trace::flush_budget_
private

Definition at line 1511 of file jsregexp.h.

Referenced by flush_budget(), and set_flush_budget().

◆ loop_label_

Label* v8::internal::Trace::loop_label_
private

Definition at line 1507 of file jsregexp.h.

Referenced by loop_label(), and set_loop_label().

◆ quick_check_performed_

QuickCheckDetails v8::internal::Trace::quick_check_performed_
private

◆ stop_node_

RegExpNode* v8::internal::Trace::stop_node_
private

Definition at line 1506 of file jsregexp.h.

Referenced by set_stop_node(), and stop_node().


The documentation for this class was generated from the following files: