[ir] Convert RenameConflicts to a free function
Bug: tint:1718
Change-Id: I7eda0d7a47101fb34a02f68974f70f1327ed7ca8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/143829
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
index 98c580e..d760e8c 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
@@ -94,14 +94,21 @@
explicit State(ir::Module& m) : mod(m) {}
Program Run() {
+ // Run transforms need to sanitize for WGSL.
+ {
+ auto result = RenameConflicts(&mod);
+ if (!result) {
+ b.Diagnostics().add_error(diag::System::Transform, result.Failure());
+ return Program(std::move(b));
+ }
+ }
+
if (auto res = ir::Validate(mod); !res) {
// IR module failed validation.
b.Diagnostics() = res.Failure();
return Program{resolver::Resolve(b)};
}
- RenameConflicts{}.Run(&mod);
-
if (mod.root_block) {
RootBlock(mod.root_block);
}
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.cc b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.cc
index 8795491..eadae08 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.cc
@@ -22,6 +22,7 @@
#include "src/tint/lang/core/ir/loop.h"
#include "src/tint/lang/core/ir/module.h"
#include "src/tint/lang/core/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/validator.h"
#include "src/tint/lang/core/ir/var.h"
#include "src/tint/lang/core/type/matrix.h"
#include "src/tint/lang/core/type/scalar.h"
@@ -35,12 +36,12 @@
#include "src/tint/utils/rtti/switch.h"
#include "src/tint/utils/text/string.h"
-TINT_INSTANTIATE_TYPEINFO(tint::wgsl::writer::RenameConflicts);
-
namespace tint::wgsl::writer {
+namespace {
+
/// PIMPL state for the transform, for a single function.
-struct RenameConflicts::State {
+struct State {
/// Constructor
/// @param i the IR module
explicit State(ir::Module* i) : ir(i) {}
@@ -272,11 +273,17 @@
}
};
-RenameConflicts::RenameConflicts() = default;
-RenameConflicts::~RenameConflicts() = default;
+} // namespace
-void RenameConflicts::Run(ir::Module* ir) const {
+Result<SuccessType, std::string> RenameConflicts(ir::Module* ir) {
+ auto result = ValidateAndDumpIfNeeded(*ir, "RenameConflicts transform");
+ if (!result) {
+ return result;
+ }
+
State{ir}.Process();
+
+ return Success;
}
} // namespace tint::wgsl::writer
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h
index 918b331..9dc9620 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h
+++ b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h
@@ -15,26 +15,23 @@
#ifndef SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_RENAME_CONFLICTS_H_
#define SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_RENAME_CONFLICTS_H_
-#include "src/tint/lang/core/ir/transform/transform.h"
+#include <string>
+
+#include "src/tint/utils/result/result.h"
+
+// Forward declarations.
+namespace tint::ir {
+class Module;
+}
namespace tint::wgsl::writer {
/// RenameConflicts is a transform that renames declarations which prevent identifiers from
/// resolving to the correct declaration, and those with identical identifiers declared in the same
/// scope.
-class RenameConflicts final : public Castable<RenameConflicts, ir::transform::Transform> {
- public:
- /// Constructor
- RenameConflicts();
- /// Destructor
- ~RenameConflicts() override;
-
- /// @copydoc ir::transform::Transform::Run
- void Run(ir::Module* module) const override;
-
- private:
- struct State;
-};
+/// @param module the module to transform
+/// @returns an error string on failure
+Result<SuccessType, std::string> RenameConflicts(ir::Module* module);
} // namespace tint::wgsl::writer
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc
index 95279ae..cd09164 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc
@@ -42,7 +42,8 @@
}
// Run the transforms.
- RenameConflicts{}.Run(&mod);
+ auto result = RenameConflicts(&mod);
+ EXPECT_TRUE(result) << result.Failure();
// Validate the output IR.
auto res = ir::Validate(mod);