diff --git a/src/tint/transform/demote_to_helper.cc b/src/tint/transform/demote_to_helper.cc index 2516a7609a..f6d2388540 100644 --- a/src/tint/transform/demote_to_helper.cc +++ b/src/tint/transform/demote_to_helper.cc @@ -114,6 +114,11 @@ Transform::ApplyResult DemoteToHelper::Apply(const Program* src, const DataMap&, return; } + // Skip phony assignments. + if (assign->lhs->Is()) { + return; + } + // Skip writes to invocation-private address spaces. auto* ref = sem.Get(assign->lhs)->Type()->As(); switch (ref->AddressSpace()) { diff --git a/src/tint/transform/demote_to_helper_test.cc b/src/tint/transform/demote_to_helper_test.cc index e49341023c..59754aa589 100644 --- a/src/tint/transform/demote_to_helper_test.cc +++ b/src/tint/transform/demote_to_helper_test.cc @@ -1096,5 +1096,36 @@ fn foo(@location(0) in : f32, @location(1) coord : vec2) -> @location(0) i3 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 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(src); + + EXPECT_EQ(expect, str(got)); +} + } // namespace } // namespace tint::transform