mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-03 03:35:59 +00:00
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 = [
|
sources = [
|
||||||
"ir/builder_impl.cc",
|
"ir/builder_impl.cc",
|
||||||
"ir/builder_impl.h",
|
"ir/builder_impl.h",
|
||||||
"ir/converter.cc",
|
"ir/from_program.cc",
|
||||||
"ir/converter.h",
|
"ir/from_program.h",
|
||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
":libtint_ast_src",
|
":libtint_ast_src",
|
||||||
|
@ -727,14 +727,14 @@ if(${TINT_BUILD_IR})
|
|||||||
ir/construct.h
|
ir/construct.h
|
||||||
ir/convert.cc
|
ir/convert.cc
|
||||||
ir/convert.h
|
ir/convert.h
|
||||||
ir/converter.cc
|
|
||||||
ir/converter.h
|
|
||||||
ir/debug.cc
|
ir/debug.cc
|
||||||
ir/debug.h
|
ir/debug.h
|
||||||
ir/disassembler.cc
|
ir/disassembler.cc
|
||||||
ir/disassembler.h
|
ir/disassembler.h
|
||||||
ir/discard.cc
|
ir/discard.cc
|
||||||
ir/discard.h
|
ir/discard.h
|
||||||
|
ir/from_program.cc
|
||||||
|
ir/from_program.h
|
||||||
ir/flow_node.cc
|
ir/flow_node.cc
|
||||||
ir/flow_node.h
|
ir/flow_node.h
|
||||||
ir/function.cc
|
ir/function.cc
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#include "tint/tint.h"
|
#include "tint/tint.h"
|
||||||
|
|
||||||
#if TINT_BUILD_IR
|
#if TINT_BUILD_IR
|
||||||
#include "src/tint/ir/converter.h"
|
#include "src/tint/ir/from_program.h"
|
||||||
#include "src/tint/ir/module.h"
|
#include "src/tint/ir/module.h"
|
||||||
#endif // TINT_BUILD_IR
|
#endif // TINT_BUILD_IR
|
||||||
|
|
||||||
@ -378,7 +378,7 @@ int main(int argc, const char** argv) {
|
|||||||
loop_count = options.loop_count;
|
loop_count = options.loop_count;
|
||||||
}
|
}
|
||||||
for (uint32_t i = 0; i < loop_count; ++i) {
|
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) {
|
if (!result) {
|
||||||
std::cerr << "Failed to build IR from program: " << result.Failure() << std::endl;
|
std::cerr << "Failed to build IR from program: " << result.Failure() << std::endl;
|
||||||
}
|
}
|
||||||
|
@ -49,9 +49,9 @@
|
|||||||
#include "tint/tint.h"
|
#include "tint/tint.h"
|
||||||
|
|
||||||
#if TINT_BUILD_IR
|
#if TINT_BUILD_IR
|
||||||
#include "src/tint/ir/converter.h" // nogncheck
|
|
||||||
#include "src/tint/ir/debug.h" // nogncheck
|
#include "src/tint/ir/debug.h" // nogncheck
|
||||||
#include "src/tint/ir/disassembler.h" // nogncheck
|
#include "src/tint/ir/disassembler.h" // nogncheck
|
||||||
|
#include "src/tint/ir/from_program.h" // nogncheck
|
||||||
#include "src/tint/ir/module.h" // nogncheck
|
#include "src/tint/ir/module.h" // nogncheck
|
||||||
#endif // TINT_BUILD_IR
|
#endif // TINT_BUILD_IR
|
||||||
|
|
||||||
@ -1086,7 +1086,7 @@ int main(int argc, const char** argv) {
|
|||||||
|
|
||||||
#if TINT_BUILD_IR
|
#if TINT_BUILD_IR
|
||||||
if (options.dump_ir || options.dump_ir_graph) {
|
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) {
|
if (!result) {
|
||||||
std::cerr << "Failed to build IR from program: " << result.Failure() << std::endl;
|
std::cerr << "Failed to build IR from program: " << result.Failure() << std::endl;
|
||||||
} else {
|
} 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
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// 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/ir/builder_impl.h"
|
||||||
#include "src/tint/program.h"
|
#include "src/tint/program.h"
|
||||||
|
|
||||||
namespace tint::ir {
|
namespace tint::ir {
|
||||||
|
|
||||||
// static
|
utils::Result<Module, std::string> FromProgram(const Program* program) {
|
||||||
Converter::Result Converter::FromProgram(const Program* program) {
|
|
||||||
if (!program->IsValid()) {
|
if (!program->IsValid()) {
|
||||||
return Result{std::string("input program is not valid")};
|
return std::string("input program is not valid");
|
||||||
}
|
}
|
||||||
|
|
||||||
BuilderImpl b(program);
|
BuilderImpl b(program);
|
||||||
@ -31,12 +30,7 @@ Converter::Result Converter::FromProgram(const Program* program) {
|
|||||||
return b.Diagnostics().str();
|
return b.Diagnostics().str();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Result{r.Move()};
|
return r.Move();
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
const Program* Converter::ToProgram() {
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace tint::ir
|
} // namespace tint::ir
|
42
src/tint/ir/from_program.h
Normal file
42
src/tint/ir/from_program.h
Normal 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_
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
#include "src/tint/writer/spirv/generator_impl.h"
|
#include "src/tint/writer/spirv/generator_impl.h"
|
||||||
#if TINT_BUILD_IR
|
#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
|
#include "src/tint/writer/spirv/generator_impl_ir.h" // nogncheck
|
||||||
#endif // TINT_BUILD_IR
|
#endif // TINT_BUILD_IR
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ Result Generate(const Program* program, const Options& options) {
|
|||||||
#if TINT_BUILD_IR
|
#if TINT_BUILD_IR
|
||||||
if (options.use_tint_ir) {
|
if (options.use_tint_ir) {
|
||||||
// Convert the AST program to an IR module.
|
// Convert the AST program to an IR module.
|
||||||
auto ir = ir::Converter::FromProgram(program);
|
auto ir = ir::FromProgram(program);
|
||||||
if (!ir) {
|
if (!ir) {
|
||||||
result.error = "IR converter: " + ir.Failure();
|
result.error = "IR converter: " + ir.Failure();
|
||||||
return result;
|
return result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user