tint: Fix phony assignments in DemoteToHelper
We just need to skip these.
Bug: tint:1723
Change-Id: I311fe0432ecf1f69936eaf08eb57123a6a738175
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/109340
Auto-Submit: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/transform/demote_to_helper.cc b/src/tint/transform/demote_to_helper.cc
index 2516a76..f6d2388 100644
--- a/src/tint/transform/demote_to_helper.cc
+++ b/src/tint/transform/demote_to_helper.cc
@@ -114,6 +114,11 @@
return;
}
+ // Skip phony assignments.
+ if (assign->lhs->Is<ast::PhonyExpression>()) {
+ return;
+ }
+
// Skip writes to invocation-private address spaces.
auto* ref = sem.Get(assign->lhs)->Type()->As<sem::Reference>();
switch (ref->AddressSpace()) {
diff --git a/src/tint/transform/demote_to_helper_test.cc b/src/tint/transform/demote_to_helper_test.cc
index e493410..59754aa 100644
--- a/src/tint/transform/demote_to_helper_test.cc
+++ b/src/tint/transform/demote_to_helper_test.cc
@@ -1096,5 +1096,36 @@
EXPECT_EQ(expect, str(got));
}
+TEST_F(DemoteToHelperTest, PhonyAssignment) {
+ auto* src = R"(
+@fragment
+fn foo(@location(0) in : f32) {
+ if (in == 0.0) {
+ discard;
+ }
+ _ = in;
+}
+)";
+
+ auto* expect = R"(
+var<private> tint_discarded = false;
+
+@fragment
+fn foo(@location(0) in : f32) {
+ if ((in == 0.0)) {
+ tint_discarded = true;
+ }
+ _ = in;
+ if (tint_discarded) {
+ discard;
+ }
+}
+)";
+
+ auto got = Run<DemoteToHelper>(src);
+
+ EXPECT_EQ(expect, str(got));
+}
+
} // namespace
} // namespace tint::transform