tint/ir: Replace Converter with FromProgram() free function

ToProgram() will most likely be conditionally compiled as a separate .h
and .cc file. With just one static method, ir::Converter doesn't make a
lot of sense to be a class. Just replace with a free-function.

Bug: tint:1902
Change-Id: I305bf9cb73082a94848ec5b94129feabdb9b6fe9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/131620
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
Ben Clayton 2023-05-05 09:51:22 +00:00 committed by Dawn LUCI CQ
parent e64b2792e0
commit 895d240fbf
8 changed files with 56 additions and 74 deletions

View File

@ -1122,8 +1122,8 @@ libtint_source_set("libtint_ir_builder_src") {
sources = [
"ir/builder_impl.cc",
"ir/builder_impl.h",
"ir/converter.cc",
"ir/converter.h",
"ir/from_program.cc",
"ir/from_program.h",
]
deps = [
":libtint_ast_src",

View File

@ -727,14 +727,14 @@ if(${TINT_BUILD_IR})
ir/construct.h
ir/convert.cc
ir/convert.h
ir/converter.cc
ir/converter.h
ir/debug.cc
ir/debug.h
ir/disassembler.cc
ir/disassembler.h
ir/discard.cc
ir/discard.h
ir/from_program.cc
ir/from_program.h
ir/flow_node.cc
ir/flow_node.h
ir/function.cc

View File

@ -19,7 +19,7 @@
#include "tint/tint.h"
#if TINT_BUILD_IR
#include "src/tint/ir/converter.h"
#include "src/tint/ir/from_program.h"
#include "src/tint/ir/module.h"
#endif // TINT_BUILD_IR
@ -378,7 +378,7 @@ int main(int argc, const char** argv) {
loop_count = options.loop_count;
}
for (uint32_t i = 0; i < loop_count; ++i) {
auto result = tint::ir::Converter::FromProgram(program.get());
auto result = tint::ir::FromProgram(program.get());
if (!result) {
std::cerr << "Failed to build IR from program: " << result.Failure() << std::endl;
}

View File

@ -49,9 +49,9 @@
#include "tint/tint.h"
#if TINT_BUILD_IR
#include "src/tint/ir/converter.h" // nogncheck
#include "src/tint/ir/debug.h" // nogncheck
#include "src/tint/ir/disassembler.h" // nogncheck
#include "src/tint/ir/from_program.h" // nogncheck
#include "src/tint/ir/module.h" // nogncheck
#endif // TINT_BUILD_IR
@ -1086,7 +1086,7 @@ int main(int argc, const char** argv) {
#if TINT_BUILD_IR
if (options.dump_ir || options.dump_ir_graph) {
auto result = tint::ir::Converter::FromProgram(program.get());
auto result = tint::ir::FromProgram(program.get());
if (!result) {
std::cerr << "Failed to build IR from program: " << result.Failure() << std::endl;
} else {

View File

@ -1,54 +0,0 @@
// Copyright 2023 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef SRC_TINT_IR_CONVERTER_H_
#define SRC_TINT_IR_CONVERTER_H_
#include <string>
#include "src/tint/ir/module.h"
#include "src/tint/utils/result.h"
// Forward Declarations
namespace tint {
class Program;
} // namespace tint
namespace tint::ir {
/// Class for converting into and out of IR.
class Converter {
public:
/// The result type for the FromProgram method.
using Result = utils::Result<Module, std::string>;
/// Builds an ir::Module from the given Program
/// @param program the Program to use.
/// @returns the `utiils::Result` of generating the IR. The result will contain the `ir::Module`
/// on success, otherwise the `std::string` error.
///
/// @note this assumes the program |IsValid|, and has had const-eval done so
/// any abstract values have been calculated and converted into the relevant
/// concrete types.
static Result FromProgram(const Program* program);
/// Converts the module back to a Program
/// @returns the resulting program, or nullptr on error
/// (Note, this will probably turn into a utils::Result, just stubbing for now)
static const Program* ToProgram();
};
} // namespace tint::ir
#endif // SRC_TINT_IR_CONVERTER_H_

View File

@ -12,17 +12,16 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#include "src/tint/ir/converter.h"
#include "src/tint/ir/from_program.h"
#include "src/tint/ir/builder_impl.h"
#include "src/tint/program.h"
namespace tint::ir {
// static
Converter::Result Converter::FromProgram(const Program* program) {
utils::Result<Module, std::string> FromProgram(const Program* program) {
if (!program->IsValid()) {
return Result{std::string("input program is not valid")};
return std::string("input program is not valid");
}
BuilderImpl b(program);
@ -31,12 +30,7 @@ Converter::Result Converter::FromProgram(const Program* program) {
return b.Diagnostics().str();
}
return Result{r.Move()};
}
// static
const Program* Converter::ToProgram() {
return nullptr;
return r.Move();
}
} // namespace tint::ir

View File

@ -0,0 +1,42 @@
// Copyright 2023 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef SRC_TINT_IR_FROM_PROGRAM_H_
#define SRC_TINT_IR_FROM_PROGRAM_H_
#include <string>
#include "src/tint/ir/module.h"
#include "src/tint/utils/result.h"
// Forward Declarations
namespace tint {
class Program;
} // namespace tint
namespace tint::ir {
/// Builds an ir::Module from the given Program
/// @param program the Program to use.
/// @returns the `utiils::Result` of generating the IR. The result will contain the `ir::Module` on
/// success, otherwise the `std::string` error.
///
/// @note this assumes the `program.IsValid()`, and has had const-eval done so
/// any abstract values have been calculated and converted into the relevant
/// concrete types.
utils::Result<Module, std::string> FromProgram(const Program* program);
} // namespace tint::ir
#endif // SRC_TINT_IR_FROM_PROGRAM_H_

View File

@ -18,7 +18,7 @@
#include "src/tint/writer/spirv/generator_impl.h"
#if TINT_BUILD_IR
#include "src/tint/ir/converter.h" // nogncheck
#include "src/tint/ir/from_program.h" // nogncheck
#include "src/tint/writer/spirv/generator_impl_ir.h" // nogncheck
#endif // TINT_BUILD_IR
@ -41,7 +41,7 @@ Result Generate(const Program* program, const Options& options) {
#if TINT_BUILD_IR
if (options.use_tint_ir) {
// Convert the AST program to an IR module.
auto ir = ir::Converter::FromProgram(program);
auto ir = ir::FromProgram(program);
if (!ir) {
result.error = "IR converter: " + ir.Failure();
return result;