| Index: src/compiler/typer.cc
|
| diff --git a/src/compiler/typer.cc b/src/compiler/typer.cc
|
| index dafd3c95a128f317d0033d1d0b6aeb2e0441f0a2..dff8b179fa7579ed41a9a879d7cb346dfc6a9c6a 100644
|
| --- a/src/compiler/typer.cc
|
| +++ b/src/compiler/typer.cc
|
| @@ -31,6 +31,7 @@ enum LazyCachedType {
|
| kNumberFunc2,
|
| kImulFunc,
|
| kClz32Func,
|
| + kAtomicsLoadFunc,
|
| kArrayBufferFunc,
|
| #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
|
| k##Type, k##Type##Array, k##Type##ArrayFunc,
|
| @@ -90,6 +91,10 @@ class LazyTypeCache final : public ZoneObject {
|
| Type::Integral32(), zone());
|
| case kClz32Func:
|
| return Type::Function(CreateRange(0, 32), Type::Number(), zone());
|
| + case kAtomicsLoadFunc:
|
| + return Type::Function(
|
| + Type::Union(Type::Number(), Type::Undefined(), zone()),
|
| + Type::Object(zone()), Type::Unsigned32(), zone());
|
| case kArrayBufferFunc:
|
| return Type::Function(Type::Object(zone()), Type::Unsigned32(), zone());
|
| #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
|
| @@ -1814,6 +1819,11 @@ Bounds Typer::Visitor::TypeLoadElement(Node* node) {
|
| }
|
|
|
|
|
| +Bounds Typer::Visitor::TypeLoadElementAtomic(Node* node) {
|
| + return Bounds(ElementAccessOf(node->op()).type);
|
| +}
|
| +
|
| +
|
| Bounds Typer::Visitor::TypeStoreField(Node* node) {
|
| UNREACHABLE();
|
| return Bounds();
|
| @@ -1849,6 +1859,11 @@ Bounds Typer::Visitor::TypeLoad(Node* node) {
|
| }
|
|
|
|
|
| +Bounds Typer::Visitor::TypeLoadAtomic(Node* node) {
|
| + return Bounds::Unbounded(zone());
|
| +}
|
| +
|
| +
|
| Bounds Typer::Visitor::TypeStore(Node* node) {
|
| UNREACHABLE();
|
| return Bounds();
|
| @@ -2332,6 +2347,8 @@ Type* Typer::Visitor::TypeConstant(Handle<Object> value) {
|
| return typer_->cache_->Get(kImulFunc);
|
| case kMathClz32:
|
| return typer_->cache_->Get(kClz32Func);
|
| + case kAtomicsLoad:
|
| + return typer_->cache_->Get(kAtomicsLoadFunc);
|
| default:
|
| break;
|
| }
|
|
|