summaryrefslogtreecommitdiff
path: root/chromium/v8/src/compiler/simplified-operator.h
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-08-24 12:15:48 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-08-28 13:30:04 +0000
commitb014812705fc80bff0a5c120dfcef88f349816dc (patch)
tree25a2e2d9fa285f1add86aa333389a839f81a39ae /chromium/v8/src/compiler/simplified-operator.h
parent9f4560b1027ae06fdb497023cdcaf91b8511fa74 (diff)
downloadqtwebengine-chromium-b014812705fc80bff0a5c120dfcef88f349816dc.tar.gz
BASELINE: Update Chromium to 68.0.3440.125
Change-Id: I23f19369e01f688e496f5bf179abb521ad73874f Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/v8/src/compiler/simplified-operator.h')
-rw-r--r--chromium/v8/src/compiler/simplified-operator.h55
1 files changed, 35 insertions, 20 deletions
diff --git a/chromium/v8/src/compiler/simplified-operator.h b/chromium/v8/src/compiler/simplified-operator.h
index 300bdc85989..62e7f73bfab 100644
--- a/chromium/v8/src/compiler/simplified-operator.h
+++ b/chromium/v8/src/compiler/simplified-operator.h
@@ -23,6 +23,7 @@ namespace v8 {
namespace internal {
// Forward declarations.
+enum class AbortReason;
class Zone;
namespace compiler {
@@ -37,6 +38,10 @@ size_t hash_value(BaseTaggedness);
std::ostream& operator<<(std::ostream&, BaseTaggedness);
+size_t hash_value(LoadSensitivity);
+
+std::ostream& operator<<(std::ostream&, LoadSensitivity);
+
// An access descriptor for loads/stores of fixed structures like field
// accesses of heap objects. Accesses from either tagged or untagged base
// pointers are supported; untagging is done automatically during lowering.
@@ -45,27 +50,31 @@ struct FieldAccess {
int offset; // offset of the field, without tag.
MaybeHandle<Name> name; // debugging only.
MaybeHandle<Map> map; // map of the field value (if known).
- Type* type; // type of the field.
+ Type type; // type of the field.
MachineType machine_type; // machine type of the field.
WriteBarrierKind write_barrier_kind; // write barrier hint.
+ LoadSensitivity load_sensitivity; // load safety for poisoning.
FieldAccess()
: base_is_tagged(kTaggedBase),
offset(0),
type(Type::None()),
machine_type(MachineType::None()),
- write_barrier_kind(kFullWriteBarrier) {}
+ write_barrier_kind(kFullWriteBarrier),
+ load_sensitivity(LoadSensitivity::kUnsafe) {}
FieldAccess(BaseTaggedness base_is_tagged, int offset, MaybeHandle<Name> name,
- MaybeHandle<Map> map, Type* type, MachineType machine_type,
- WriteBarrierKind write_barrier_kind)
+ MaybeHandle<Map> map, Type type, MachineType machine_type,
+ WriteBarrierKind write_barrier_kind,
+ LoadSensitivity load_sensitivity = LoadSensitivity::kUnsafe)
: base_is_tagged(base_is_tagged),
offset(offset),
name(name),
map(map),
type(type),
machine_type(machine_type),
- write_barrier_kind(write_barrier_kind) {}
+ write_barrier_kind(write_barrier_kind),
+ load_sensitivity(load_sensitivity) {}
int tag() const { return base_is_tagged == kTaggedBase ? kHeapObjectTag : 0; }
};
@@ -90,24 +99,28 @@ void Operator1<FieldAccess>::PrintParameter(std::ostream& os,
struct ElementAccess {
BaseTaggedness base_is_tagged; // specifies if the base pointer is tagged.
int header_size; // size of the header, without tag.
- Type* type; // type of the element.
+ Type type; // type of the element.
MachineType machine_type; // machine type of the element.
WriteBarrierKind write_barrier_kind; // write barrier hint.
+ LoadSensitivity load_sensitivity; // load safety for poisoning.
ElementAccess()
: base_is_tagged(kTaggedBase),
header_size(0),
type(Type::None()),
machine_type(MachineType::None()),
- write_barrier_kind(kFullWriteBarrier) {}
+ write_barrier_kind(kFullWriteBarrier),
+ load_sensitivity(LoadSensitivity::kUnsafe) {}
- ElementAccess(BaseTaggedness base_is_tagged, int header_size, Type* type,
- MachineType machine_type, WriteBarrierKind write_barrier_kind)
+ ElementAccess(BaseTaggedness base_is_tagged, int header_size, Type type,
+ MachineType machine_type, WriteBarrierKind write_barrier_kind,
+ LoadSensitivity load_sensitivity = LoadSensitivity::kUnsafe)
: base_is_tagged(base_is_tagged),
header_size(header_size),
type(type),
machine_type(machine_type),
- write_barrier_kind(write_barrier_kind) {}
+ write_barrier_kind(write_barrier_kind),
+ load_sensitivity(load_sensitivity) {}
int tag() const { return base_is_tagged == kTaggedBase ? kHeapObjectTag : 0; }
};
@@ -370,7 +383,7 @@ Handle<Map> DoubleMapParameterOf(const Operator* op) V8_WARN_UNUSED_RESULT;
Handle<Map> FastMapParameterOf(const Operator* op) V8_WARN_UNUSED_RESULT;
// Parameters for TransitionAndStoreNonNumberElement.
-Type* ValueTypeParameterOf(const Operator* op) V8_WARN_UNUSED_RESULT;
+Type ValueTypeParameterOf(const Operator* op) V8_WARN_UNUSED_RESULT;
// A hint for speculative number operations.
enum class NumberOperationHint : uint8_t {
@@ -415,14 +428,14 @@ bool IsRestLengthOf(const Operator* op) V8_WARN_UNUSED_RESULT;
class AllocateParameters {
public:
- AllocateParameters(Type* type, PretenureFlag pretenure)
+ AllocateParameters(Type type, PretenureFlag pretenure)
: type_(type), pretenure_(pretenure) {}
- Type* type() const { return type_; }
+ Type type() const { return type_; }
PretenureFlag pretenure() const { return pretenure_; }
private:
- Type* type_;
+ Type type_;
PretenureFlag pretenure_;
};
@@ -436,7 +449,7 @@ bool operator==(AllocateParameters const&, AllocateParameters const&);
PretenureFlag PretenureFlagOf(const Operator* op) V8_WARN_UNUSED_RESULT;
-Type* AllocateTypeOf(const Operator* op) V8_WARN_UNUSED_RESULT;
+Type AllocateTypeOf(const Operator* op) V8_WARN_UNUSED_RESULT;
UnicodeEncoding UnicodeEncodingOf(const Operator*) V8_WARN_UNUSED_RESULT;
@@ -597,7 +610,7 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final
const Operator* TruncateTaggedToBit();
const Operator* TruncateTaggedPointerToBit();
- const Operator* MaskIndexWithBound();
+ const Operator* PoisonIndex();
const Operator* CompareMaps(ZoneHandleSet<Map>);
const Operator* MapGuard(ZoneHandleSet<Map> maps);
@@ -650,6 +663,7 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final
const Operator* ObjectIsDetectableCallable();
const Operator* ObjectIsMinusZero();
const Operator* ObjectIsNaN();
+ const Operator* NumberIsNaN();
const Operator* ObjectIsNonCallable();
const Operator* ObjectIsNumber();
const Operator* ObjectIsReceiver();
@@ -692,9 +706,8 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final
// transition-elements-kind object, from-map, to-map
const Operator* TransitionElementsKind(ElementsTransition transition);
- const Operator* Allocate(Type* type, PretenureFlag pretenure = NOT_TENURED);
- const Operator* AllocateRaw(Type* type,
- PretenureFlag pretenure = NOT_TENURED);
+ const Operator* Allocate(Type type, PretenureFlag pretenure = NOT_TENURED);
+ const Operator* AllocateRaw(Type type, PretenureFlag pretenure = NOT_TENURED);
const Operator* LoadFieldByIndex();
const Operator* LoadField(FieldAccess const&);
@@ -717,7 +730,7 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final
// store-element [base + index], object value, only with fast arrays.
const Operator* TransitionAndStoreNonNumberElement(Handle<Map> fast_map,
- Type* value_type);
+ Type value_type);
// load-typed-element buffer, [base + external + index]
const Operator* LoadTypedElement(ExternalArrayType const&);
@@ -728,6 +741,8 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final
// Abort (for terminating execution on internal error).
const Operator* RuntimeAbort(AbortReason reason);
+ const Operator* DateNow();
+
private:
Zone* zone() const { return zone_; }