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:
parent
e64b2792e0
commit
895d240fbf
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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_
|
|
@ -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
|
|
@ -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_
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue