From 65ae64d0092aa244807f23406092cf45f190c548 Mon Sep 17 00:00:00 2001 From: James Price Date: Thu, 29 Apr 2021 12:59:14 +0000 Subject: [PATCH] transforms: Add a ProgramBuilder::Sym() helper This creates a new, unnamed symbol. Change-Id: I0ea11e812296c3215ba624a18777d3e7233e2ae4 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/49441 Kokoro: Kokoro Reviewed-by: Ben Clayton Commit-Queue: Ben Clayton Auto-Submit: James Price --- src/program_builder.h | 3 +++ src/transform/calculate_array_length.cc | 6 +++--- src/transform/canonicalize_entry_point_io.cc | 8 ++++---- src/transform/decompose_storage_access.cc | 10 +++++----- src/transform/first_index_offset.cc | 4 ++-- src/transform/hlsl.cc | 2 +- src/transform/renamer.cc | 2 +- src/transform/spirv.cc | 10 +++++----- src/transform/vertex_pulling.cc | 5 ++--- 9 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/program_builder.h b/src/program_builder.h index a156f2d6ef..4a18623c28 100644 --- a/src/program_builder.h +++ b/src/program_builder.h @@ -878,6 +878,9 @@ class ProgramBuilder { // AST helper methods ////////////////////////////////////////////////////////////////////////////// + /// @return a new unnamed symbol + Symbol Sym() { return Symbols().New(); } + /// @param name the symbol string /// @return a Symbol with the given name Symbol Sym(const std::string& name) { return Symbols().Register(name); } diff --git a/src/transform/calculate_array_length.cc b/src/transform/calculate_array_length.cc index e7fd66453c..b4e19c3fab 100644 --- a/src/transform/calculate_array_length.cc +++ b/src/transform/calculate_array_length.cc @@ -80,7 +80,7 @@ Output CalculateArrayLength::Run(const Program* in, const DataMap&) { std::unordered_map buffer_size_intrinsics; auto get_buffer_size_intrinsic = [&](sem::StructType* buffer_type) { return utils::GetOrCreate(buffer_size_intrinsics, buffer_type, [&] { - auto name = ctx.dst->Symbols().New(); + auto name = ctx.dst->Sym(); auto* func = ctx.dst->create( name, ast::VariableList{ @@ -183,7 +183,7 @@ Output CalculateArrayLength::Run(const Program* in, const DataMap&) { // Construct the variable that'll hold the result of // RWByteAddressBuffer.GetDimensions() auto* buffer_size_result = ctx.dst->Decl(ctx.dst->Var( - ctx.dst->Symbols().New(), ctx.dst->ty.u32(), + ctx.dst->Sym(), ctx.dst->ty.u32(), ast::StorageClass::kFunction, ctx.dst->Expr(0u))); // Call storage_buffer.GetDimensions(buffer_size_result) @@ -199,7 +199,7 @@ Output CalculateArrayLength::Run(const Program* in, const DataMap&) { // total_storage_buffer_size - array_offset // array_length = ---------------------------------------- // array_stride - auto name = ctx.dst->Symbols().New(); + auto name = ctx.dst->Sym(); uint32_t array_offset = array_member_sem->Offset(); uint32_t array_stride = array_member_sem->Size(); auto* array_length_var = ctx.dst->Decl(ctx.dst->Const( diff --git a/src/transform/canonicalize_entry_point_io.cc b/src/transform/canonicalize_entry_point_io.cc index 980cc6a2b3..d31b2d05c6 100644 --- a/src/transform/canonicalize_entry_point_io.cc +++ b/src/transform/canonicalize_entry_point_io.cc @@ -99,7 +99,7 @@ Output CanonicalizeEntryPointIO::Run(const Program* in, const DataMap&) { if (!func->params().empty()) { // Collect all parameters and build a list of new struct members. - auto new_struct_param_symbol = ctx.dst->Symbols().New(); + auto new_struct_param_symbol = ctx.dst->Sym(); ast::StructMemberList new_struct_members; for (auto* param : func->params()) { auto param_name = ctx.Clone(param->symbol()); @@ -175,7 +175,7 @@ Output CanonicalizeEntryPointIO::Run(const Program* in, const DataMap&) { StructMemberComparator); // Create the new struct type. - auto in_struct_name = ctx.dst->Symbols().New(); + auto in_struct_name = ctx.dst->Sym(); auto* in_struct = ctx.dst->create(ctx.dst->create( in_struct_name, new_struct_members, ast::DecorationList{})); @@ -221,7 +221,7 @@ Output CanonicalizeEntryPointIO::Run(const Program* in, const DataMap&) { StructMemberComparator); // Create the new struct type. - auto out_struct_name = ctx.dst->Symbols().New(); + auto out_struct_name = ctx.dst->Sym(); auto* out_struct = ctx.dst->create(ctx.dst->create( out_struct_name, new_struct_members, ast::DecorationList{})); @@ -242,7 +242,7 @@ Output CanonicalizeEntryPointIO::Run(const Program* in, const DataMap&) { if (!ret->value()->Is()) { // Create a const to hold the return value expression to avoid // re-evaluating it multiple times. - auto temp = ctx.dst->Symbols().New(); + auto temp = ctx.dst->Sym(); auto* temp_var = ctx.dst->Decl( ctx.dst->Const(temp, ctx.Clone(ret_type), new_ret_value())); ctx.InsertBefore(ret_sem->Block()->statements(), ret, temp_var); diff --git a/src/transform/decompose_storage_access.cc b/src/transform/decompose_storage_access.cc index 16a1924b12..44a768b0d3 100644 --- a/src/transform/decompose_storage_access.cc +++ b/src/transform/decompose_storage_access.cc @@ -425,7 +425,7 @@ struct State { ast::Function* func = nullptr; if (auto* intrinsic = IntrinsicLoadFor(ctx.dst, el_ty)) { func = ctx.dst->create( - ctx.dst->Symbols().New(), params, ctx.Clone(el_ty), nullptr, + ctx.dst->Sym(), params, ctx.Clone(el_ty), nullptr, ast::DecorationList{intrinsic}, ast::DecorationList{}); } else { ast::ExpressionList values; @@ -458,7 +458,7 @@ struct State { } } func = ctx.dst->create( - ctx.dst->Symbols().New(), params, ctx.Clone(el_ty), + ctx.dst->Sym(), params, ctx.Clone(el_ty), ctx.dst->Block( ctx.dst->Return(ctx.dst->create( ctx.Clone(el_ty), values))), @@ -489,7 +489,7 @@ struct State { ast::Function* func = nullptr; if (auto* intrinsic = IntrinsicStoreFor(ctx.dst, el_ty)) { func = ctx.dst->create( - ctx.dst->Symbols().New(), params, ctx.dst->ty.void_(), nullptr, + ctx.dst->Sym(), params, ctx.dst->ty.void_(), nullptr, ast::DecorationList{intrinsic}, ast::DecorationList{}); } else { @@ -531,8 +531,8 @@ struct State { } } func = ctx.dst->create( - ctx.dst->Symbols().New(), params, ctx.dst->ty.void_(), - ctx.dst->Block(body), ast::DecorationList{}, ast::DecorationList{}); + ctx.dst->Sym(), params, ctx.dst->ty.void_(), ctx.dst->Block(body), + ast::DecorationList{}, ast::DecorationList{}); } InsertGlobal(ctx, insert_after, func); diff --git a/src/transform/first_index_offset.cc b/src/transform/first_index_offset.cc index 469a72de61..20e869db62 100644 --- a/src/transform/first_index_offset.cc +++ b/src/transform/first_index_offset.cc @@ -134,11 +134,11 @@ Output FirstIndexOffset::Run(const Program* in, const DataMap& data) { offset += 4; } auto struct_type = - ctx.dst->Structure(ctx.dst->Symbols().New(), std::move(members), + ctx.dst->Structure(ctx.dst->Sym(), std::move(members), {ctx.dst->create()}); // Create a global to hold the uniform buffer - Symbol buffer_name = ctx.dst->Symbols().New(); + Symbol buffer_name = ctx.dst->Sym(); ctx.dst->Global(buffer_name, struct_type, ast::StorageClass::kUniform, nullptr, ast::DecorationList{ diff --git a/src/transform/hlsl.cc b/src/transform/hlsl.cc index 9e091b9a9c..6b4887a59d 100644 --- a/src/transform/hlsl.cc +++ b/src/transform/hlsl.cc @@ -98,7 +98,7 @@ void Hlsl::PromoteInitializersToConstVar(CloneContext& ctx) const { auto* src_ty = src_sem_expr->Type(); if (src_ty->IsAnyOf()) { // Create a new symbol for the constant - auto dst_symbol = ctx.dst->Symbols().New(); + auto dst_symbol = ctx.dst->Sym(); // Clone the type auto* dst_ty = ctx.Clone(src_ty); // Clone the initializer diff --git a/src/transform/renamer.cc b/src/transform/renamer.cc index 9eb2ecbb58..9cd9abdcaf 100644 --- a/src/transform/renamer.cc +++ b/src/transform/renamer.cc @@ -906,7 +906,7 @@ Output Renamer::Run(const Program* in, const DataMap&) { break; } - auto sym_out = ctx.dst->Symbols().New(); + auto sym_out = ctx.dst->Sym(); remappings.emplace(name_in, ctx.dst->Symbols().NameFor(sym_out)); return sym_out; }); diff --git a/src/transform/spirv.cc b/src/transform/spirv.cc index c209c88bbe..47b8aa627e 100644 --- a/src/transform/spirv.cc +++ b/src/transform/spirv.cc @@ -154,7 +154,7 @@ void Spirv::HandleEntryPointIOTypes(CloneContext& ctx) const { if (!func->return_type()->Is()) { ast::StatementList stores; - auto store_value_symbol = ctx.dst->Symbols().New(); + auto store_value_symbol = ctx.dst->Sym(); HoistToOutputVariables( ctx, func, func->return_type(), func->return_type(), func->return_type_decorations(), {}, store_value_symbol, stores); @@ -162,7 +162,7 @@ void Spirv::HandleEntryPointIOTypes(CloneContext& ctx) const { // Create a function that writes a return value to all output variables. auto* store_value = ctx.dst->Param(store_value_symbol, ctx.Clone(func->return_type())); - auto return_func_symbol = ctx.dst->Symbols().New(); + auto return_func_symbol = ctx.dst->Sym(); auto* return_func = ctx.dst->create( return_func_symbol, ast::VariableList{store_value}, ctx.dst->ty.void_(), ctx.dst->create(stores), @@ -262,7 +262,7 @@ Symbol Spirv::HoistToInputVariables( return !deco->IsAnyOf(); }); - auto global_var_symbol = ctx.dst->Symbols().New(); + auto global_var_symbol = ctx.dst->Sym(); auto* global_var = ctx.dst->Var(global_var_symbol, ctx.Clone(declared_ty), ast::StorageClass::kInput, nullptr, new_decorations); @@ -279,7 +279,7 @@ Symbol Spirv::HoistToInputVariables( init_value_names.emplace_back(member_var); } - auto func_var_symbol = ctx.dst->Symbols().New(); + auto func_var_symbol = ctx.dst->Sym(); if (func->body()->empty()) { // The return value should never get used. return func_var_symbol; @@ -315,7 +315,7 @@ void Spirv::HoistToOutputVariables(CloneContext& ctx, return !deco->IsAnyOf(); }); - auto global_var_symbol = ctx.dst->Symbols().New(); + auto global_var_symbol = ctx.dst->Sym(); auto* global_var = ctx.dst->Var(global_var_symbol, ctx.Clone(declared_ty), ast::StorageClass::kOutput, nullptr, new_decorations); diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc index 93f393c8ac..cdcbd4d8e3 100644 --- a/src/transform/vertex_pulling.cc +++ b/src/transform/vertex_pulling.cc @@ -487,11 +487,10 @@ struct State { new_members.push_back( ctx.dst->Member(member_sym, member_type, std::move(member_decos))); } - auto new_struct = - ctx.dst->Structure(ctx.dst->Symbols().New(), new_members); + auto new_struct = ctx.dst->Structure(ctx.dst->Sym(), new_members); // Create a new function parameter with this struct. - auto* new_param = ctx.dst->Param(ctx.dst->Symbols().New(), new_struct); + auto* new_param = ctx.dst->Param(ctx.dst->Sym(), new_struct); new_function_parameters.push_back(new_param); // Copy values from the new parameter to the function-scope variable.