17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file. 47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#ifndef V8_COMPILER_SIMPLIFIED_LOWERING_H_ 67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#define V8_COMPILER_SIMPLIFIED_LOWERING_H_ 77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/js-graph.h" 97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/machine-operator.h" 107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/node.h" 117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/simplified-operator.h" 127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace v8 { 147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace internal { 157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace compiler { 167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 175fc1eed70f85bd1e9d0833742945798d6ef49cf0machenbach@chromium.orgclass SimplifiedLowering { 187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org public: 196313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org explicit SimplifiedLowering(JSGraph* jsgraph) : jsgraph_(jsgraph) {} 207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org virtual ~SimplifiedLowering() {} 217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 22f50a8b46df04c10a7644112ce4cc73443ec4d281machenbach@chromium.org void LowerAllNodes(); 23f50a8b46df04c10a7644112ce4cc73443ec4d281machenbach@chromium.org 245c0fd9bca25be110d9fb3e332075726b10c8b169machenbach@chromium.org // TODO(titzer): These are exposed for direct testing. Use a friend class. 25f50a8b46df04c10a7644112ce4cc73443ec4d281machenbach@chromium.org void DoLoadField(Node* node); 26f50a8b46df04c10a7644112ce4cc73443ec4d281machenbach@chromium.org void DoStoreField(Node* node); 27f50a8b46df04c10a7644112ce4cc73443ec4d281machenbach@chromium.org void DoLoadElement(Node* node); 28f50a8b46df04c10a7644112ce4cc73443ec4d281machenbach@chromium.org void DoStoreElement(Node* node); 2921d700eedcdd6570eff22ece724b63a5eefe78cbmachenbach@chromium.org void DoStringAdd(Node* node); 3021d700eedcdd6570eff22ece724b63a5eefe78cbmachenbach@chromium.org void DoStringEqual(Node* node); 319aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org void DoStringLessThan(Node* node); 329aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org void DoStringLessThanOrEqual(Node* node); 335c0fd9bca25be110d9fb3e332075726b10c8b169machenbach@chromium.org 347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org private: 357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSGraph* jsgraph_; 367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 375c0fd9bca25be110d9fb3e332075726b10c8b169machenbach@chromium.org Node* SmiTag(Node* node); 385c0fd9bca25be110d9fb3e332075726b10c8b169machenbach@chromium.org Node* IsTagged(Node* node); 395c0fd9bca25be110d9fb3e332075726b10c8b169machenbach@chromium.org Node* Untag(Node* node); 405c0fd9bca25be110d9fb3e332075726b10c8b169machenbach@chromium.org Node* OffsetMinusTagConstant(int32_t offset); 417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* ComputeIndex(const ElementAccess& access, Node* index); 429aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org Node* StringComparison(Node* node, bool requires_ordering); 437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 44f50a8b46df04c10a7644112ce4cc73443ec4d281machenbach@chromium.org friend class RepresentationSelector; 45f50a8b46df04c10a7644112ce4cc73443ec4d281machenbach@chromium.org 467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Zone* zone() { return jsgraph_->zone(); } 477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSGraph* jsgraph() { return jsgraph_; } 487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph* graph() { return jsgraph()->graph(); } 497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder* common() { return jsgraph()->common(); } 50d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org MachineOperatorBuilder* machine() { return jsgraph()->machine(); } 517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}; 527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace compiler 547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace internal 557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace v8 567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif // V8_COMPILER_SIMPLIFIED_LOWERING_H_ 58