[ir][msl] Run existing transforms which are required.
Run the currently existing transforms which are used by the MSL backend.
Bug: tint:1967
Change-Id: I2c13de1f1fb08659d340774f695a760c54d97b5d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/162941
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Auto-Submit: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/lang/msl/writer/BUILD.bazel b/src/tint/lang/msl/writer/BUILD.bazel
index f57979e..2242175 100644
--- a/src/tint/lang/msl/writer/BUILD.bazel
+++ b/src/tint/lang/msl/writer/BUILD.bazel
@@ -53,7 +53,6 @@
"//src/tint/lang/core/constant",
"//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
- "//src/tint/lang/msl/writer/raise",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
"//src/tint/lang/wgsl/program",
@@ -78,6 +77,7 @@
"//src/tint/lang/msl/writer/ast_printer",
"//src/tint/lang/msl/writer/common",
"//src/tint/lang/msl/writer/printer",
+ "//src/tint/lang/msl/writer/raise",
],
"//conditions:default": [],
}) + select({
diff --git a/src/tint/lang/msl/writer/BUILD.cmake b/src/tint/lang/msl/writer/BUILD.cmake
index 243f93b..e4d4395 100644
--- a/src/tint/lang/msl/writer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/BUILD.cmake
@@ -61,7 +61,6 @@
tint_lang_core_constant
tint_lang_core_ir
tint_lang_core_type
- tint_lang_msl_writer_raise
tint_lang_wgsl
tint_lang_wgsl_ast
tint_lang_wgsl_program
@@ -88,6 +87,7 @@
tint_lang_msl_writer_ast_printer
tint_lang_msl_writer_common
tint_lang_msl_writer_printer
+ tint_lang_msl_writer_raise
)
endif(TINT_BUILD_MSL_WRITER)
diff --git a/src/tint/lang/msl/writer/BUILD.gn b/src/tint/lang/msl/writer/BUILD.gn
index 2b379e5c..f15a5dc 100644
--- a/src/tint/lang/msl/writer/BUILD.gn
+++ b/src/tint/lang/msl/writer/BUILD.gn
@@ -56,7 +56,6 @@
"${tint_src_dir}/lang/core/constant",
"${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
- "${tint_src_dir}/lang/msl/writer/raise",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
"${tint_src_dir}/lang/wgsl/program",
@@ -83,6 +82,7 @@
"${tint_src_dir}/lang/msl/writer/ast_printer",
"${tint_src_dir}/lang/msl/writer/common",
"${tint_src_dir}/lang/msl/writer/printer",
+ "${tint_src_dir}/lang/msl/writer/raise",
]
}
diff --git a/src/tint/lang/msl/writer/printer/BUILD.bazel b/src/tint/lang/msl/writer/printer/BUILD.bazel
index fbb8bfc..7de0377 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.bazel
+++ b/src/tint/lang/msl/writer/printer/BUILD.bazel
@@ -91,12 +91,12 @@
],
deps = [
"//src/tint/api/common",
+ "//src/tint/api/options",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
"//src/tint/lang/core/intrinsic",
"//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
- "//src/tint/lang/msl/writer/raise",
"//src/tint/utils/containers",
"//src/tint/utils/diagnostic",
"//src/tint/utils/ice",
@@ -113,7 +113,9 @@
"@gtest",
] + select({
":tint_build_msl_writer": [
+ "//src/tint/lang/msl/writer/common",
"//src/tint/lang/msl/writer/printer",
+ "//src/tint/lang/msl/writer/raise",
],
"//conditions:default": [],
}),
diff --git a/src/tint/lang/msl/writer/printer/BUILD.cmake b/src/tint/lang/msl/writer/printer/BUILD.cmake
index bb0db69..37d0fcb 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/printer/BUILD.cmake
@@ -96,12 +96,12 @@
tint_target_add_dependencies(tint_lang_msl_writer_printer_test test
tint_api_common
+ tint_api_options
tint_lang_core
tint_lang_core_constant
tint_lang_core_intrinsic
tint_lang_core_ir
tint_lang_core_type
- tint_lang_msl_writer_raise
tint_utils_containers
tint_utils_diagnostic
tint_utils_ice
@@ -123,7 +123,9 @@
if(TINT_BUILD_MSL_WRITER)
tint_target_add_dependencies(tint_lang_msl_writer_printer_test test
+ tint_lang_msl_writer_common
tint_lang_msl_writer_printer
+ tint_lang_msl_writer_raise
)
endif(TINT_BUILD_MSL_WRITER)
diff --git a/src/tint/lang/msl/writer/printer/BUILD.gn b/src/tint/lang/msl/writer/printer/BUILD.gn
index bcadb87..ce460cc 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.gn
+++ b/src/tint/lang/msl/writer/printer/BUILD.gn
@@ -93,12 +93,12 @@
deps = [
"${tint_src_dir}:gmock_and_gtest",
"${tint_src_dir}/api/common",
+ "${tint_src_dir}/api/options",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
"${tint_src_dir}/lang/core/intrinsic",
"${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
- "${tint_src_dir}/lang/msl/writer/raise",
"${tint_src_dir}/utils/containers",
"${tint_src_dir}/utils/diagnostic",
"${tint_src_dir}/utils/ice",
@@ -115,7 +115,11 @@
]
if (tint_build_msl_writer) {
- deps += [ "${tint_src_dir}/lang/msl/writer/printer" ]
+ deps += [
+ "${tint_src_dir}/lang/msl/writer/common",
+ "${tint_src_dir}/lang/msl/writer/printer",
+ "${tint_src_dir}/lang/msl/writer/raise",
+ ]
}
}
}
diff --git a/src/tint/lang/msl/writer/printer/binary_test.cc b/src/tint/lang/msl/writer/printer/binary_test.cc
index 8f87403..acc59b1 100644
--- a/src/tint/lang/msl/writer/printer/binary_test.cc
+++ b/src/tint/lang/msl/writer/printer/binary_test.cc
@@ -76,13 +76,95 @@
testing::Values(BinaryData{"(left + right)", core::ir::BinaryOp::kAdd},
BinaryData{"(left - right)", core::ir::BinaryOp::kSubtract},
BinaryData{"(left * right)", core::ir::BinaryOp::kMultiply},
- BinaryData{"(left / right)", core::ir::BinaryOp::kDivide},
- BinaryData{"(left % right)", core::ir::BinaryOp::kModulo},
BinaryData{"(left & right)", core::ir::BinaryOp::kAnd},
BinaryData{"(left | right)", core::ir::BinaryOp::kOr},
- BinaryData{"(left ^ right)", core::ir::BinaryOp::kXor},
- BinaryData{"(left << right)", core::ir::BinaryOp::kShiftLeft},
- BinaryData{"(left >> right)", core::ir::BinaryOp::kShiftRight}));
+ BinaryData{"(left ^ right)", core::ir::BinaryOp::kXor}));
+
+TEST_F(MslPrinterTest, BinaryDivU32) {
+ auto* func = b.Function("foo", ty.void_());
+ b.Append(func->Block(), [&] {
+ auto* l = b.Let("left", b.Constant(1_u));
+ auto* r = b.Let("right", b.Constant(2_u));
+ auto* bin = b.Binary(core::ir::BinaryOp::kDivide, ty.u32(), l, r);
+ b.Let("val", bin);
+ b.Return(func);
+ });
+
+ ASSERT_TRUE(Generate()) << err_ << output_;
+ EXPECT_EQ(output_, MetalHeader() + R"(
+void foo() {
+ uint const left = 1u;
+ uint const right = 2u;
+ uint const val = tint_div_u32(left, right);
+}
+uint tint_div_u32(uint lhs, uint rhs) {
+ return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
+)");
+}
+
+TEST_F(MslPrinterTest, BinaryModU32) {
+ auto* func = b.Function("foo", ty.void_());
+ b.Append(func->Block(), [&] {
+ auto* l = b.Let("left", b.Constant(1_u));
+ auto* r = b.Let("right", b.Constant(2_u));
+ auto* bin = b.Binary(core::ir::BinaryOp::kModulo, ty.u32(), l, r);
+ b.Let("val", bin);
+ b.Return(func);
+ });
+
+ ASSERT_TRUE(Generate()) << err_ << output_;
+ EXPECT_EQ(output_, MetalHeader() + R"(
+void foo() {
+ uint const left = 1u;
+ uint const right = 2u;
+ uint const val = tint_mod_u32(left, right);
+}
+uint tint_mod_u32(uint lhs, uint rhs) {
+ return (lhs - ((lhs / select(rhs, 1u, (rhs == 0u))) * select(rhs, 1u, (rhs == 0u))));
+}
+)");
+}
+
+TEST_F(MslPrinterTest, BinaryShiftLeft) {
+ auto* func = b.Function("foo", ty.void_());
+ b.Append(func->Block(), [&] {
+ auto* l = b.Let("left", b.Constant(1_u));
+ auto* r = b.Let("right", b.Constant(2_u));
+ auto* bin = b.Binary(core::ir::BinaryOp::kShiftLeft, ty.u32(), l, r);
+ b.Let("val", bin);
+ b.Return(func);
+ });
+
+ ASSERT_TRUE(Generate()) << err_ << output_;
+ EXPECT_EQ(output_, MetalHeader() + R"(
+void foo() {
+ uint const left = 1u;
+ uint const right = 2u;
+ uint const val = (left << (right & 31u));
+}
+)");
+}
+
+TEST_F(MslPrinterTest, BinaryShiftRight) {
+ auto* func = b.Function("foo", ty.void_());
+ b.Append(func->Block(), [&] {
+ auto* l = b.Let("left", b.Constant(1_u));
+ auto* r = b.Let("right", b.Constant(2_u));
+ auto* bin = b.Binary(core::ir::BinaryOp::kShiftRight, ty.u32(), l, r);
+ b.Let("val", bin);
+ b.Return(func);
+ });
+
+ ASSERT_TRUE(Generate()) << err_ << output_;
+ EXPECT_EQ(output_, MetalHeader() + R"(
+void foo() {
+ uint const left = 1u;
+ uint const right = 2u;
+ uint const val = (left >> (right & 31u));
+}
+)");
+}
using MslPrinterBinaryBoolTest = MslPrinterTestWithParam<BinaryData>;
TEST_P(MslPrinterBinaryBoolTest, Emit) {
diff --git a/src/tint/lang/msl/writer/printer/discard_test.cc b/src/tint/lang/msl/writer/printer/discard_test.cc
index e85ad57..64451a3 100644
--- a/src/tint/lang/msl/writer/printer/discard_test.cc
+++ b/src/tint/lang/msl/writer/printer/discard_test.cc
@@ -43,10 +43,24 @@
b.Return(func);
});
+ auto* ep = b.Function("main", ty.void_());
+ ep->SetStage(core::ir::Function::PipelineStage::kFragment);
+ b.Append(ep->Block(), [&] {
+ b.Call(func);
+ b.Return(ep);
+ });
+
ASSERT_TRUE(Generate()) << err_ << output_;
EXPECT_EQ(output_, MetalHeader() + R"(
+thread bool continue_execution = true;
void foo() {
if (true) {
+ continue_execution = false;
+ }
+}
+fragment void main() {
+ foo();
+ if (!(continue_execution)) {
discard_fragment();
}
}
diff --git a/src/tint/lang/msl/writer/printer/helper_test.h b/src/tint/lang/msl/writer/printer/helper_test.h
index f77774b..bf14aa6 100644
--- a/src/tint/lang/msl/writer/printer/helper_test.h
+++ b/src/tint/lang/msl/writer/printer/helper_test.h
@@ -80,7 +80,7 @@
/// Run the writer on the IR module and validate the result.
/// @returns true if generation and validation succeeded
bool Generate() {
- if (auto raised = raise::Raise(mod); !raised) {
+ if (auto raised = raise::Raise(mod, {}); !raised) {
err_ = raised.Failure().reason.str();
return false;
}
diff --git a/src/tint/lang/msl/writer/printer/printer.cc b/src/tint/lang/msl/writer/printer/printer.cc
index 2440bcd..1c2f33f 100644
--- a/src/tint/lang/msl/writer/printer/printer.cc
+++ b/src/tint/lang/msl/writer/printer/printer.cc
@@ -59,6 +59,7 @@
#include "src/tint/lang/core/ir/store_vector_element.h"
#include "src/tint/lang/core/ir/switch.h"
#include "src/tint/lang/core/ir/swizzle.h"
+#include "src/tint/lang/core/ir/terminate_invocation.h"
#include "src/tint/lang/core/ir/unreachable.h"
#include "src/tint/lang/core/ir/user_call.h"
#include "src/tint/lang/core/ir/validator.h"
@@ -326,7 +327,7 @@
[&](core::ir::Return* r) { EmitReturn(r); }, //
[&](core::ir::Unreachable*) { EmitUnreachable(); }, //
[&](core::ir::Var* v) { EmitVar(v); }, //
- [&](core::ir::Discard*) { EmitDiscard(); }, //
+ [&](core::ir::TerminateInvocation*) { EmitDiscard(); }, //
[&](core::ir::Store* s) { EmitStore(s); }, //
[&](core::ir::Continue*) { EmitContinue(); }, //
[&](core::ir::NextIteration*) { /* do nothing */ }, //
diff --git a/src/tint/lang/msl/writer/raise/BUILD.bazel b/src/tint/lang/msl/writer/raise/BUILD.bazel
index ab458ab..a192956 100644
--- a/src/tint/lang/msl/writer/raise/BUILD.bazel
+++ b/src/tint/lang/msl/writer/raise/BUILD.bazel
@@ -45,18 +45,32 @@
"raise.h",
],
deps = [
+ "//src/tint/api/common",
+ "//src/tint/api/options",
+ "//src/tint/lang/core/ir/transform",
"//src/tint/utils/containers",
"//src/tint/utils/diagnostic",
"//src/tint/utils/ice",
"//src/tint/utils/macros",
"//src/tint/utils/math",
"//src/tint/utils/memory",
+ "//src/tint/utils/reflection",
"//src/tint/utils/result",
"//src/tint/utils/rtti",
"//src/tint/utils/text",
"//src/tint/utils/traits",
- ],
+ ] + select({
+ ":tint_build_msl_writer": [
+ "//src/tint/lang/msl/writer/common",
+ ],
+ "//conditions:default": [],
+ }),
copts = COPTS,
visibility = ["//visibility:public"],
)
+alias(
+ name = "tint_build_msl_writer",
+ actual = "//src/tint:tint_build_msl_writer_true",
+)
+
diff --git a/src/tint/lang/msl/writer/raise/BUILD.cfg b/src/tint/lang/msl/writer/raise/BUILD.cfg
new file mode 100644
index 0000000..70e4a45
--- /dev/null
+++ b/src/tint/lang/msl/writer/raise/BUILD.cfg
@@ -0,0 +1,4 @@
+{
+ "condition": "tint_build_msl_writer"
+}
+
diff --git a/src/tint/lang/msl/writer/raise/BUILD.cmake b/src/tint/lang/msl/writer/raise/BUILD.cmake
index cb64e93..0e41a3c 100644
--- a/src/tint/lang/msl/writer/raise/BUILD.cmake
+++ b/src/tint/lang/msl/writer/raise/BUILD.cmake
@@ -34,9 +34,11 @@
# Do not modify this file directly
################################################################################
+if(TINT_BUILD_MSL_WRITER)
################################################################################
# Target: tint_lang_msl_writer_raise
# Kind: lib
+# Condition: TINT_BUILD_MSL_WRITER
################################################################################
tint_add_target(tint_lang_msl_writer_raise lib
lang/msl/writer/raise/raise.cc
@@ -44,14 +46,26 @@
)
tint_target_add_dependencies(tint_lang_msl_writer_raise lib
+ tint_api_common
+ tint_api_options
+ tint_lang_core_ir_transform
tint_utils_containers
tint_utils_diagnostic
tint_utils_ice
tint_utils_macros
tint_utils_math
tint_utils_memory
+ tint_utils_reflection
tint_utils_result
tint_utils_rtti
tint_utils_text
tint_utils_traits
)
+
+if(TINT_BUILD_MSL_WRITER)
+ tint_target_add_dependencies(tint_lang_msl_writer_raise lib
+ tint_lang_msl_writer_common
+ )
+endif(TINT_BUILD_MSL_WRITER)
+
+endif(TINT_BUILD_MSL_WRITER)
\ No newline at end of file
diff --git a/src/tint/lang/msl/writer/raise/BUILD.gn b/src/tint/lang/msl/writer/raise/BUILD.gn
index bd20a51..74cc477 100644
--- a/src/tint/lang/msl/writer/raise/BUILD.gn
+++ b/src/tint/lang/msl/writer/raise/BUILD.gn
@@ -37,22 +37,31 @@
import("../../../../../../scripts/tint_overrides_with_defaults.gni")
import("${tint_src_dir}/tint.gni")
+if (tint_build_msl_writer) {
+ libtint_source_set("raise") {
+ sources = [
+ "raise.cc",
+ "raise.h",
+ ]
+ deps = [
+ "${tint_src_dir}/api/common",
+ "${tint_src_dir}/api/options",
+ "${tint_src_dir}/lang/core/ir/transform",
+ "${tint_src_dir}/utils/containers",
+ "${tint_src_dir}/utils/diagnostic",
+ "${tint_src_dir}/utils/ice",
+ "${tint_src_dir}/utils/macros",
+ "${tint_src_dir}/utils/math",
+ "${tint_src_dir}/utils/memory",
+ "${tint_src_dir}/utils/reflection",
+ "${tint_src_dir}/utils/result",
+ "${tint_src_dir}/utils/rtti",
+ "${tint_src_dir}/utils/text",
+ "${tint_src_dir}/utils/traits",
+ ]
-libtint_source_set("raise") {
- sources = [
- "raise.cc",
- "raise.h",
- ]
- deps = [
- "${tint_src_dir}/utils/containers",
- "${tint_src_dir}/utils/diagnostic",
- "${tint_src_dir}/utils/ice",
- "${tint_src_dir}/utils/macros",
- "${tint_src_dir}/utils/math",
- "${tint_src_dir}/utils/memory",
- "${tint_src_dir}/utils/result",
- "${tint_src_dir}/utils/rtti",
- "${tint_src_dir}/utils/text",
- "${tint_src_dir}/utils/traits",
- ]
+ if (tint_build_msl_writer) {
+ deps += [ "${tint_src_dir}/lang/msl/writer/common" ]
+ }
+ }
}
diff --git a/src/tint/lang/msl/writer/raise/raise.cc b/src/tint/lang/msl/writer/raise/raise.cc
index 6a7cd81..2f817a6 100644
--- a/src/tint/lang/msl/writer/raise/raise.cc
+++ b/src/tint/lang/msl/writer/raise/raise.cc
@@ -29,18 +29,80 @@
#include <utility>
-namespace tint::msl::raise {
+#include "src/tint/lang/core/ir/transform/binary_polyfill.h"
+#include "src/tint/lang/core/ir/transform/binding_remapper.h"
+#include "src/tint/lang/core/ir/transform/builtin_polyfill.h"
+#include "src/tint/lang/core/ir/transform/conversion_polyfill.h"
+#include "src/tint/lang/core/ir/transform/demote_to_helper.h"
+#include "src/tint/lang/core/ir/transform/multiplanar_external_texture.h"
+#include "src/tint/lang/core/ir/transform/preserve_padding.h"
+#include "src/tint/lang/core/ir/transform/robustness.h"
+#include "src/tint/lang/core/ir/transform/vectorize_scalar_matrix_constructors.h"
+#include "src/tint/lang/core/ir/transform/zero_init_workgroup_memory.h"
+#include "src/tint/lang/msl/writer/common/option_helpers.h"
-Result<SuccessType> Raise(core::ir::Module&) {
- // #define RUN_TRANSFORM(name)
- // do {
- // auto result = core::ir::transform::name(module);
- // if (!result) {
- // return result;
- // }
- // } while (false)
+namespace tint::msl::writer::raise {
+
+Result<SuccessType> Raise(core::ir::Module& module, const Options& options) {
+#define RUN_TRANSFORM(name, ...) \
+ do { \
+ auto result = name(__VA_ARGS__); \
+ if (!result) { \
+ return result; \
+ } \
+ } while (false)
+
+ ExternalTextureOptions external_texture_options{};
+ RemapperData remapper_data{};
+ PopulateRemapperAndMultiplanarOptions(options, remapper_data, external_texture_options);
+ RUN_TRANSFORM(core::ir::transform::BindingRemapper, module, remapper_data);
+
+ {
+ core::ir::transform::BinaryPolyfillConfig binary_polyfills{};
+ binary_polyfills.int_div_mod = true;
+ binary_polyfills.bitshift_modulo = true; // crbug.com/tint/1543
+ RUN_TRANSFORM(core::ir::transform::BinaryPolyfill, module, binary_polyfills);
+ }
+
+ {
+ core::ir::transform::BuiltinPolyfillConfig core_polyfills{};
+ core_polyfills.clamp_int = true;
+ core_polyfills.extract_bits = core::ir::transform::BuiltinPolyfillLevel::kClampOrRangeCheck;
+ core_polyfills.first_leading_bit = true;
+ core_polyfills.first_trailing_bit = true;
+ core_polyfills.insert_bits = core::ir::transform::BuiltinPolyfillLevel::kClampOrRangeCheck;
+ core_polyfills.texture_sample_base_clamp_to_edge_2d_f32 = true;
+ RUN_TRANSFORM(core::ir::transform::BuiltinPolyfill, module, core_polyfills);
+ }
+ // polyfills.sign_int = true;
+
+ {
+ core::ir::transform::ConversionPolyfillConfig conversion_polyfills;
+ conversion_polyfills.ftoi = true;
+ RUN_TRANSFORM(core::ir::transform::ConversionPolyfill, module, conversion_polyfills);
+ }
+
+ if (!options.disable_robustness) {
+ core::ir::transform::RobustnessConfig config{};
+ RUN_TRANSFORM(core::ir::transform::Robustness, module, config);
+ }
+
+ RUN_TRANSFORM(core::ir::transform::MultiplanarExternalTexture, module,
+ external_texture_options);
+
+ if (!options.disable_workgroup_init) {
+ RUN_TRANSFORM(core::ir::transform::ZeroInitWorkgroupMemory, module);
+ }
+
+ // PreservePadding must come before DirectVariableAccess.
+ RUN_TRANSFORM(core::ir::transform::PreservePadding, module);
+
+ RUN_TRANSFORM(core::ir::transform::VectorizeScalarMatrixConstructors, module);
+
+ // DemoteToHelper must come before any transform that introduces non-core instructions.
+ RUN_TRANSFORM(core::ir::transform::DemoteToHelper, module);
return Success;
}
-} // namespace tint::msl::raise
+} // namespace tint::msl::writer::raise
diff --git a/src/tint/lang/msl/writer/raise/raise.h b/src/tint/lang/msl/writer/raise/raise.h
index 979d713..256925d 100644
--- a/src/tint/lang/msl/writer/raise/raise.h
+++ b/src/tint/lang/msl/writer/raise/raise.h
@@ -30,6 +30,7 @@
#include <string>
+#include "src/tint/lang/msl/writer/common/options.h"
#include "src/tint/utils/diagnostic/diagnostic.h"
#include "src/tint/utils/result/result.h"
@@ -38,13 +39,14 @@
class Module;
} // namespace tint::core::ir
-namespace tint::msl::raise {
+namespace tint::msl::writer::raise {
/// Raise a core IR module to the MSL dialect of the IR.
-/// @param mod the core IR module to raise to MSL dialect
+/// @param module the core IR module to raise to MSL dialect
+/// @param options the printer options
/// @returns success or failure
-Result<SuccessType> Raise(core::ir::Module& mod);
+Result<SuccessType> Raise(core::ir::Module& module, const Options& options);
-} // namespace tint::msl::raise
+} // namespace tint::msl::writer::raise
#endif // SRC_TINT_LANG_MSL_WRITER_RAISE_RAISE_H_
diff --git a/src/tint/lang/msl/writer/writer.cc b/src/tint/lang/msl/writer/writer.cc
index 54bf13b..bc1a5e0 100644
--- a/src/tint/lang/msl/writer/writer.cc
+++ b/src/tint/lang/msl/writer/writer.cc
@@ -53,7 +53,7 @@
Output output;
// Raise from core-dialect to MSL-dialect.
- if (auto res = raise::Raise(ir); !res) {
+ if (auto res = raise::Raise(ir, options); !res) {
return res.Failure();
}
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.ir.msl
index 144b0eb..96b4b6f 100644
--- a/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -4,5 +4,5 @@
kernel void f() {
int const a = 1;
uint const b = 2u;
- int const r = (a << b);
+ int const r = (a << (b & 31u));
}
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.ir.msl
index 0e51a63..ce78acb 100644
--- a/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -4,5 +4,5 @@
kernel void f() {
uint const a = 1u;
uint const b = 2u;
- uint const r = (a << b);
+ uint const r = (a << (b & 31u));
}
diff --git a/test/tint/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.ir.msl
index 73b1379..d9345f3 100644
--- a/test/tint/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.ir.msl
@@ -4,5 +4,5 @@
kernel void f() {
int3 const a = int3(1, 2, 3);
uint3 const b = uint3(4u, 5u, 6u);
- int3 const r = (a << b);
+ int3 const r = (a << (b & uint3(31u)));
}
diff --git a/test/tint/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.ir.msl
index 5cd797a..6ebad69 100644
--- a/test/tint/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.ir.msl
@@ -4,5 +4,5 @@
kernel void f() {
uint3 const a = uint3(1u, 2u, 3u);
uint3 const b = uint3(4u, 5u, 6u);
- uint3 const r = (a << b);
+ uint3 const r = (a << (b & uint3(31u)));
}
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.ir.msl
index e7b1f46..b5af548 100644
--- a/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -4,5 +4,5 @@
kernel void f() {
int const a = 1;
uint const b = 2u;
- int const r = (a >> b);
+ int const r = (a >> (b & 31u));
}
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.ir.msl
index 27bdf8a..accf6ef 100644
--- a/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -4,5 +4,5 @@
kernel void f() {
uint const a = 1u;
uint const b = 2u;
- uint const r = (a >> b);
+ uint const r = (a >> (b & 31u));
}
diff --git a/test/tint/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.ir.msl
index 7e1de7a..0b04d2f 100644
--- a/test/tint/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.ir.msl
@@ -4,5 +4,5 @@
kernel void f() {
int3 const a = int3(1, 2, 3);
uint3 const b = uint3(4u, 5u, 6u);
- int3 const r = (a >> b);
+ int3 const r = (a >> (b & uint3(31u)));
}
diff --git a/test/tint/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.ir.msl
index fa984d3..19c6d13 100644
--- a/test/tint/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.ir.msl
@@ -4,5 +4,5 @@
kernel void f() {
uint3 const a = uint3(1u, 2u, 3u);
uint3 const b = uint3(4u, 5u, 6u);
- uint3 const r = (a >> b);
+ uint3 const r = (a >> (b & uint3(31u)));
}