fd959b824e
To make implicit getters/setters frameless in common cases we use graph intrinsics. We do this for boxed as well as unboxed fields. We do this only for simple cases (e.g. not if field guards or possible boxing are involved). It also removes the hand-written assembly intrinsics for the getters, which avoids bugs if boxing-state of field is not the same as boxing-state of setter/getter. Issue https://github.com/dart-lang/sdk/issues/40876 Change-Id: Id3bd7842ead0278fee61d4a21c8661ce18dbccee Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/155900 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Aske Simon Christensen <askesc@google.com> Reviewed-by: Tess Strickland <sstrickl@google.com>
46 lines
1.3 KiB
C++
46 lines
1.3 KiB
C++
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
// Class for intrinsifying functions.
|
|
|
|
#ifndef RUNTIME_VM_COMPILER_INTRINSIFIER_H_
|
|
#define RUNTIME_VM_COMPILER_INTRINSIFIER_H_
|
|
|
|
#if defined(DART_PRECOMPILED_RUNTIME)
|
|
#error "AOT runtime should not use compiler sources (including header files)"
|
|
#endif // defined(DART_PRECOMPILED_RUNTIME)
|
|
|
|
#include "vm/allocation.h"
|
|
#include "vm/compiler/asm_intrinsifier.h"
|
|
#include "vm/compiler/graph_intrinsifier.h"
|
|
#include "vm/compiler/method_recognizer.h"
|
|
|
|
namespace dart {
|
|
|
|
// Forward declarations.
|
|
class FlowGraphCompiler;
|
|
class Function;
|
|
class ParsedFunction;
|
|
|
|
namespace compiler {
|
|
class Assembler;
|
|
class Label;
|
|
|
|
class Intrinsifier : public AllStatic {
|
|
public:
|
|
static bool Intrinsify(const ParsedFunction& parsed_function,
|
|
FlowGraphCompiler* compiler);
|
|
|
|
static void InitializeState();
|
|
|
|
private:
|
|
friend class GraphIntrinsifier; // For CanIntrinsifyFieldAccessor.
|
|
static bool CanIntrinsify(const Function& function);
|
|
static bool CanIntrinsifyFieldAccessor(const Function& function);
|
|
};
|
|
|
|
} // namespace compiler
|
|
} // namespace dart
|
|
|
|
#endif // RUNTIME_VM_COMPILER_INTRINSIFIER_H_
|