Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(626)

Unified Diff: runtime/vm/intermediate_language.h

Issue 10915200: Optimistically inline Math.sqrt as unboxed sqrtsd instruction. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/intermediate_language.h
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 2146042f275711d7113748f7d75e7573052a982d..231b58eb8c1d19476707a053bbd1684c37ca612e 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -239,6 +239,7 @@ class EmbeddedArray<T, 0> {
M(Constant) \
M(CheckEitherNonSmi) \
M(UnboxedDoubleBinaryOp) \
+ M(MathSqrt) \
M(UnboxDouble) \
M(BoxDouble) \
M(CheckArrayBound) \
@@ -436,6 +437,7 @@ FOR_EACH_INSTRUCTION(INSTRUCTION_TYPE_CHECK)
// Classes that set deopt_id_.
friend class UnboxDoubleInstr;
friend class UnboxedDoubleBinaryOpInstr;
+ friend class MathSqrtInstr;
friend class CheckClassInstr;
friend class CheckSmiInstr;
friend class CheckArrayBoundInstr;
@@ -1984,8 +1986,7 @@ class StaticCallInstr : public TemplateDefinition<0> {
: token_pos_(token_pos),
function_(function),
argument_names_(argument_names),
- arguments_(arguments),
- recognized_(MethodRecognizer::kUnknown) {
+ arguments_(arguments) {
ASSERT(function.IsZoneHandle());
ASSERT(argument_names.IsZoneHandle());
}
@@ -2003,9 +2004,6 @@ class StaticCallInstr : public TemplateDefinition<0> {
return (*arguments_)[index];
}
- MethodRecognizer::Kind recognized() const { return recognized_; }
- void set_recognized(MethodRecognizer::Kind kind) { recognized_ = kind; }
-
virtual void PrintOperandsTo(BufferFormatter* f) const;
virtual bool CanDeoptimize() const { return true; }
@@ -2016,7 +2014,6 @@ class StaticCallInstr : public TemplateDefinition<0> {
const Function& function_;
const Array& argument_names_;
ZoneGrowableArray<PushArgumentInstr*>* arguments_;
- MethodRecognizer::Kind recognized_;
DISALLOW_COPY_AND_ASSIGN(StaticCallInstr);
};
@@ -2854,6 +2851,51 @@ class UnboxDoubleInstr : public TemplateDefinition<1> {
};
+class MathSqrtInstr : public TemplateDefinition<1> {
+ public:
+ MathSqrtInstr(Value* value, StaticCallInstr* instance_call) {
+ ASSERT(value != NULL);
+ inputs_[0] = value;
+ deopt_id_ = instance_call->deopt_id();
+ }
+
+ Value* value() const { return inputs_[0]; }
+
+ virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+ virtual bool CanDeoptimize() const { return false; }
+ virtual bool HasSideEffect() const { return false; }
+
+ virtual bool AttributesEqual(Definition* other) const {
+ return true;
+ }
+
+ // The output is not an instance but when it is boxed it becomes double.
+ virtual intptr_t ResultCid() const { return kDoubleCid; }
+
+ virtual Representation representation() const {
+ return kUnboxedDouble;
+ }
+
+ virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+ ASSERT(idx == 0);
+ return kUnboxedDouble;
+ }
+
+ virtual intptr_t DeoptimizationTarget() const {
+ // Direct access since this instuction cannot deoptimize, and the deopt-id
+ // was inherited from another instuction that could deoptimize.
+ return deopt_id_;
+ }
+
+ DECLARE_INSTRUCTION(MathSqrt)
+ virtual RawAbstractType* CompileType() const;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MathSqrtInstr);
+};
+
+
class UnboxedDoubleBinaryOpInstr : public TemplateDefinition<2> {
public:
UnboxedDoubleBinaryOpInstr(Token::Kind op_kind,

Powered by Google App Engine
This is Rietveld 408576698