V8 Project
hydrogen-canonicalize.cc
Go to the documentation of this file.
1 // Copyright 2013 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 
7 
8 namespace v8 {
9 namespace internal {
10 
12  const ZoneList<HBasicBlock*>* blocks(graph()->blocks());
13  // Before removing no-op instructions, save their semantic value.
14  // We must be careful not to set the flag unnecessarily, because GVN
15  // cannot identify two instructions when their flag value differs.
16  for (int i = 0; i < blocks->length(); ++i) {
17  for (HInstructionIterator it(blocks->at(i)); !it.Done(); it.Advance()) {
18  HInstruction* instr = it.Current();
19  if (instr->IsArithmeticBinaryOperation()) {
20  if (instr->representation().IsInteger32()) {
24  }
25  } else if (instr->representation().IsSmi()) {
31  // Avoid redundant minus zero check
33  }
34  }
35  }
36  }
37  }
38 
39  // Perform actual Canonicalization pass.
40  HRedundantPhiEliminationPhase redundant_phi_eliminator(graph());
41  for (int i = 0; i < blocks->length(); ++i) {
42  // Eliminate redundant phis in the block first; changes to their inputs
43  // might have made them redundant, and eliminating them creates more
44  // opportunities for constant folding and strength reduction.
45  redundant_phi_eliminator.ProcessBlock(blocks->at(i));
46  // Now canonicalize each instruction.
47  for (HInstructionIterator it(blocks->at(i)); !it.Done(); it.Advance()) {
48  HInstruction* instr = it.Current();
49  HValue* value = instr->Canonicalize();
50  if (value != instr) instr->DeleteAndReplaceWith(value);
51  }
52  }
53 }
54 
55 } } // namespace v8::internal
HGraph * graph() const
Definition: hydrogen.h:2802
Representation representation() const
bool HasAtLeastOneUseWithFlagAndNoneWithout(Flag f) const
virtual HValue * Canonicalize()
void DeleteAndReplaceWith(HValue *other)
T & at(int i) const
Definition: list.h:69
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20