Add Symbol to alias.

This CL adds a Symbol alongside the name in the Alias type. The name
will be removed in a future CL.

Change-Id: I23fa77566cc7a2aead783b64c34c0cc3195df24b
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/35461
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
dan sinclair
2020-12-11 19:35:03 +00:00
committed by Commit Bot service account
parent 6b59bf45aa
commit 4226b6a1d8
27 changed files with 102 additions and 85 deletions

View File

@@ -44,8 +44,8 @@ TEST_F(ExpressionTest, set_result_type) {
TEST_F(ExpressionTest, set_result_type_alias) {
type::I32 i32;
type::Alias a("a", &i32);
type::Alias b("b", &a);
type::Alias a(mod.RegisterSymbol("a"), "a", &i32);
type::Alias b(mod.RegisterSymbol("b"), "b", &a);
Expr e;
e.set_result_type(&b);

View File

@@ -138,7 +138,8 @@ std::string Module::to_str() const {
out << " ";
}
if (auto* alias = ty->As<type::Alias>()) {
out << alias->name() << " -> " << alias->type()->type_name() << std::endl;
out << alias->symbol().to_str() << " -> " << alias->type()->type_name()
<< std::endl;
if (auto* str = alias->type()->As<type::Struct>()) {
str->impl()->to_str(out, indent);
}

View File

@@ -93,7 +93,7 @@ TEST_F(ModuleTest, IsValid_Invalid_GlobalVariable) {
TEST_F(ModuleTest, IsValid_Alias) {
type::F32 f32;
type::Alias alias("alias", &f32);
type::Alias alias(mod.RegisterSymbol("alias"), "alias", &f32);
Module m;
m.AddConstructedType(&alias);
@@ -109,7 +109,7 @@ TEST_F(ModuleTest, IsValid_Null_Alias) {
TEST_F(ModuleTest, IsValid_Struct) {
type::F32 f32;
type::Struct st("name", {});
type::Alias alias("name", &st);
type::Alias alias(mod.RegisterSymbol("name"), "name", &st);
Module m;
m.AddConstructedType(&alias);
@@ -119,7 +119,7 @@ TEST_F(ModuleTest, IsValid_Struct) {
TEST_F(ModuleTest, IsValid_Struct_EmptyName) {
type::F32 f32;
type::Struct st("", {});
type::Alias alias("name", &st);
type::Alias alias(mod.RegisterSymbol("name"), "name", &st);
Module m;
m.AddConstructedType(&alias);

View File

@@ -25,8 +25,8 @@ namespace tint {
namespace ast {
namespace type {
Alias::Alias(const std::string& name, Type* subtype)
: name_(name), subtype_(subtype) {
Alias::Alias(const Symbol& sym, const std::string& name, Type* subtype)
: symbol_(sym), name_(name), subtype_(subtype) {
assert(subtype_);
}
@@ -35,7 +35,7 @@ Alias::Alias(Alias&&) = default;
Alias::~Alias() = default;
std::string Alias::type_name() const {
return "__alias_" + name_ + subtype_->type_name();
return "__alias_" + symbol_.to_str() + subtype_->type_name();
}
uint64_t Alias::MinBufferBindingSize(MemoryLayout mem_layout) const {
@@ -47,7 +47,7 @@ uint64_t Alias::BaseAlignment(MemoryLayout mem_layout) const {
}
Alias* Alias::Clone(CloneContext* ctx) const {
return ctx->mod->create<Alias>(name_, ctx->Clone(subtype_));
return ctx->mod->create<Alias>(symbol_, name_, ctx->Clone(subtype_));
}
} // namespace type

View File

@@ -18,6 +18,7 @@
#include <string>
#include "src/ast/type/type.h"
#include "src/symbol.h"
namespace tint {
namespace ast {
@@ -27,13 +28,17 @@ namespace type {
class Alias : public Castable<Alias, Type> {
public:
/// Constructor
/// @param sym the symbol for the alias
/// @param name the alias name
/// @param subtype the alias'd type
Alias(const std::string& name, Type* subtype);
Alias(const Symbol& sym, const std::string& name, Type* subtype);
/// Move constructor
Alias(Alias&&);
/// Destructor
~Alias() override;
/// @returns the alias symbol
Symbol symbol() const { return symbol_; }
/// @returns the alias name
const std::string& name() const { return name_; }
/// @returns the alias type
@@ -58,6 +63,7 @@ class Alias : public Castable<Alias, Type> {
Alias* Clone(CloneContext* ctx) const override;
private:
Symbol symbol_;
std::string name_;
Type* subtype_ = nullptr;
};

View File

@@ -44,15 +44,16 @@ using AliasTest = TestHelper;
TEST_F(AliasTest, Create) {
U32 u32;
Alias a{"a_type", &u32};
EXPECT_EQ(a.name(), "a_type");
Alias a{mod.RegisterSymbol("a_type"), "a_type", &u32};
EXPECT_EQ(a.symbol(), Symbol(1));
// EXPECT_EQ(a.name(), "a_type");
EXPECT_EQ(a.type(), &u32);
}
TEST_F(AliasTest, Is) {
I32 i32;
Alias at{"a", &i32};
Alias at{mod.RegisterSymbol("a"), "a", &i32};
Type* ty = &at;
EXPECT_FALSE(ty->Is<AccessControl>());
EXPECT_TRUE(ty->Is<Alias>());
@@ -71,14 +72,15 @@ TEST_F(AliasTest, Is) {
TEST_F(AliasTest, TypeName) {
I32 i32;
Alias at{"Particle", &i32};
EXPECT_EQ(at.type_name(), "__alias_Particle__i32");
Alias at{mod.RegisterSymbol("Particle"), "Particle", &i32};
EXPECT_EQ(at.type_name(), "__alias_tint_symbol_1__i32");
}
TEST_F(AliasTest, UnwrapIfNeeded_Alias) {
U32 u32;
Alias a{"a_type", &u32};
EXPECT_EQ(a.name(), "a_type");
Alias a{mod.RegisterSymbol("a_type"), "a_type", &u32};
EXPECT_EQ(a.symbol(), Symbol(1));
// EXPECT_EQ(a.name(), "a_type");
EXPECT_EQ(a.type(), &u32);
EXPECT_EQ(a.UnwrapIfNeeded(), &u32);
EXPECT_EQ(u32.UnwrapIfNeeded(), &u32);
@@ -93,16 +95,17 @@ TEST_F(AliasTest, UnwrapIfNeeded_AccessControl) {
TEST_F(AliasTest, UnwrapIfNeeded_MultiLevel) {
U32 u32;
Alias a{"a_type", &u32};
Alias aa{"aa_type", &a};
EXPECT_EQ(aa.name(), "aa_type");
Alias a{mod.RegisterSymbol("a_type"), "a_type", &u32};
Alias aa{mod.RegisterSymbol("aa_type"), "aa_type", &a};
EXPECT_EQ(aa.symbol(), Symbol(2));
// EXPECT_EQ(aa.name(), "aa_type");
EXPECT_EQ(aa.type(), &a);
EXPECT_EQ(aa.UnwrapIfNeeded(), &u32);
}
TEST_F(AliasTest, UnwrapIfNeeded_MultiLevel_AliasAccessControl) {
U32 u32;
Alias a{"a_type", &u32};
Alias a{mod.RegisterSymbol("a_type"), "a_type", &u32};
AccessControl aa{ast::AccessControl::kReadWrite, &a};
EXPECT_EQ(aa.type(), &a);
EXPECT_EQ(aa.UnwrapIfNeeded(), &u32);
@@ -110,12 +113,13 @@ TEST_F(AliasTest, UnwrapIfNeeded_MultiLevel_AliasAccessControl) {
TEST_F(AliasTest, UnwrapAll_TwiceAliasPointerTwiceAlias) {
U32 u32;
Alias a{"a_type", &u32};
Alias aa{"aa_type", &a};
Alias a{mod.RegisterSymbol("a_type"), "a_type", &u32};
Alias aa{mod.RegisterSymbol("aa_type"), "aa_type", &a};
Pointer paa{&aa, StorageClass::kUniform};
Alias apaa{"paa_type", &paa};
Alias aapaa{"aapaa_type", &apaa};
EXPECT_EQ(aapaa.name(), "aapaa_type");
Alias apaa{mod.RegisterSymbol("paa_type"), "paa_type", &paa};
Alias aapaa{mod.RegisterSymbol("aapaa_type"), "aapaa_type", &apaa};
EXPECT_EQ(aapaa.symbol(), Symbol(4));
// EXPECT_EQ(aapaa.name(), "aapaa_type");
EXPECT_EQ(aapaa.type(), &apaa);
EXPECT_EQ(aapaa.UnwrapAll(), &u32);
EXPECT_EQ(u32.UnwrapAll(), &u32);
@@ -123,23 +127,23 @@ TEST_F(AliasTest, UnwrapAll_TwiceAliasPointerTwiceAlias) {
TEST_F(AliasTest, UnwrapAll_SecondConsecutivePointerBlocksUnrapping) {
U32 u32;
Alias a{"a_type", &u32};
Alias aa{"aa_type", &a};
Alias a{mod.RegisterSymbol("a_type"), "a_type", &u32};
Alias aa{mod.RegisterSymbol("aa_type"), "aa_type", &a};
Pointer paa{&aa, StorageClass::kUniform};
Pointer ppaa{&paa, StorageClass::kUniform};
Alias appaa{"appaa_type", &ppaa};
Alias appaa{mod.RegisterSymbol("appaa_type"), "appaa_type", &ppaa};
EXPECT_EQ(appaa.UnwrapAll(), &paa);
}
TEST_F(AliasTest, UnwrapAll_SecondNonConsecutivePointerBlocksUnrapping) {
U32 u32;
Alias a{"a_type", &u32};
Alias aa{"aa_type", &a};
Alias a{mod.RegisterSymbol("a_type"), "a_type", &u32};
Alias aa{mod.RegisterSymbol("aa_type"), "aa_type", &a};
Pointer paa{&aa, StorageClass::kUniform};
Alias apaa{"apaa_type", &paa};
Alias aapaa{"aapaa_type", &apaa};
Alias apaa{mod.RegisterSymbol("apaa_type"), "apaa_type", &paa};
Alias aapaa{mod.RegisterSymbol("aapaa_type"), "aapaa_type", &apaa};
Pointer paapaa{&aapaa, StorageClass::kUniform};
Alias apaapaa{"apaapaa_type", &paapaa};
Alias apaapaa{mod.RegisterSymbol("apaapaa_type"), "apaapaa_type", &paapaa};
EXPECT_EQ(apaapaa.UnwrapAll(), &paa);
}
@@ -163,7 +167,7 @@ TEST_F(AliasTest, UnwrapAll_PointerAccessControl) {
TEST_F(AliasTest, MinBufferBindingSizeU32) {
U32 u32;
Alias alias{"alias", &u32};
Alias alias{mod.RegisterSymbol("alias"), "alias", &u32};
EXPECT_EQ(4u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
}
@@ -173,7 +177,7 @@ TEST_F(AliasTest, MinBufferBindingSizeArray) {
ArrayDecorationList{
create<StrideDecoration>(4, Source{}),
});
Alias alias{"alias", &array};
Alias alias{mod.RegisterSymbol("alias"), "alias", &array};
EXPECT_EQ(16u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
}
@@ -183,7 +187,7 @@ TEST_F(AliasTest, MinBufferBindingSizeRuntimeArray) {
ArrayDecorationList{
create<StrideDecoration>(4, Source{}),
});
Alias alias{"alias", &array};
Alias alias{mod.RegisterSymbol("alias"), "alias", &array};
EXPECT_EQ(4u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
}
@@ -205,14 +209,14 @@ TEST_F(AliasTest, MinBufferBindingSizeStruct) {
auto* str = create<ast::Struct>(decos, members);
Struct struct_type("struct_type", str);
Alias alias{"alias", &struct_type};
Alias alias{mod.RegisterSymbol("alias"), "alias", &struct_type};
EXPECT_EQ(16u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
EXPECT_EQ(8u, alias.MinBufferBindingSize(MemoryLayout::kStorageBuffer));
}
TEST_F(AliasTest, BaseAlignmentU32) {
U32 u32;
Alias alias{"alias", &u32};
Alias alias{mod.RegisterSymbol("alias"), "alias", &u32};
EXPECT_EQ(4u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
}
@@ -222,7 +226,7 @@ TEST_F(AliasTest, BaseAlignmentArray) {
ArrayDecorationList{
create<StrideDecoration>(4, Source{}),
});
Alias alias{"alias", &array};
Alias alias{mod.RegisterSymbol("alias"), "alias", &array};
EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
}
@@ -232,7 +236,7 @@ TEST_F(AliasTest, BaseAlignmentRuntimeArray) {
ArrayDecorationList{
create<StrideDecoration>(4, Source{}),
});
Alias alias{"alias", &array};
Alias alias{mod.RegisterSymbol("alias"), "alias", &array};
EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
}
@@ -254,7 +258,7 @@ TEST_F(AliasTest, BaseAlignmentStruct) {
auto* str = create<ast::Struct>(decos, members);
Struct struct_type("struct_type", str);
Alias alias{"alias", &struct_type};
Alias alias{mod.RegisterSymbol("alias"), "alias", &struct_type};
EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
EXPECT_EQ(4u, alias.BaseAlignment(MemoryLayout::kStorageBuffer));
}