// Copyright 2019 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_COMPILER_DECOMPRESSION_OPTIMIZER_H_ #define V8_COMPILER_DECOMPRESSION_OPTIMIZER_H_ #include "src/compiler/common-operator.h" #include "src/compiler/machine-operator.h" #include "src/compiler/node-marker.h" namespace v8 { namespace internal { namespace compiler { // Forward declare. class Graph; // DecompressionOptimizer purpose is to hide the distinction between 32 bit and // 64 bit tagged values, while being able to use the compressed version of nodes // whenever possible. Its scope is narrowed down to loads of TaggedPointer and // AnyTagged (since TaggedSigned avoids full decompression always), and // HeapConstants. // DecompressionOptimizer will run only when pointer compression is enabled. // The phase needs to be run when Machine are present in the graph, i.e // at the very end of the pipeline. Also, since this phase may change // the load's MachineRepresentation from Tagged to Compressed, it's best // to run it as late as possible in order to keep the phases that know // about Compressed MachineRepresentation to a minimum. // As an example, if we Load a Tagged value only to Store it back again (i.e // Load -> Store nodes, with the Load's value being the Store's value) we don't // need to fully decompress it since the Store will ignore the top bits. class V8_EXPORT_PRIVATE DecompressionOptimizer final { … }; } // namespace compiler } // namespace internal } // namespace v8 #endif // V8_COMPILER_DECOMPRESSION_OPTIMIZER_H_