tint: remove LoopToForLoop and FoldTrivialSingleUseLets transforms for HLSL and GLSL

Change-Id: I18c807b2449dc2842cb9dbfaeba98dae640d2355
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/102621
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
diff --git a/include/tint/tint.h b/include/tint/tint.h
index a6ab6ca..c7f8a8c 100644
--- a/include/tint/tint.h
+++ b/include/tint/tint.h
@@ -25,7 +25,6 @@
 #include "src/tint/sem/type_manager.h"
 #include "src/tint/transform/binding_remapper.h"
 #include "src/tint/transform/first_index_offset.h"
-#include "src/tint/transform/fold_trivial_single_use_lets.h"
 #include "src/tint/transform/manager.h"
 #include "src/tint/transform/multiplanar_external_texture.h"
 #include "src/tint/transform/renamer.h"
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 6f2d21d..7fcc8c1 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -498,14 +498,10 @@
     "transform/expand_compound_assignment.h",
     "transform/first_index_offset.cc",
     "transform/first_index_offset.h",
-    "transform/fold_trivial_single_use_lets.cc",
-    "transform/fold_trivial_single_use_lets.h",
     "transform/for_loop_to_loop.cc",
     "transform/for_loop_to_loop.h",
     "transform/localize_struct_array_assignment.cc",
     "transform/localize_struct_array_assignment.h",
-    "transform/loop_to_for_loop.cc",
-    "transform/loop_to_for_loop.h",
     "transform/manager.cc",
     "transform/manager.h",
     "transform/module_scope_var_to_entry_point_param.cc",
@@ -1202,10 +1198,8 @@
       "transform/disable_uniformity_analysis_test.cc",
       "transform/expand_compound_assignment_test.cc",
       "transform/first_index_offset_test.cc",
-      "transform/fold_trivial_single_use_lets_test.cc",
       "transform/for_loop_to_loop_test.cc",
       "transform/localize_struct_array_assignment_test.cc",
-      "transform/loop_to_for_loop_test.cc",
       "transform/module_scope_var_to_entry_point_param_test.cc",
       "transform/multiplanar_external_texture_test.cc",
       "transform/num_workgroups_from_uniform_test.cc",
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index 545ff86..bcb4d4d 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -410,14 +410,10 @@
   transform/expand_compound_assignment.h
   transform/first_index_offset.cc
   transform/first_index_offset.h
-  transform/fold_trivial_single_use_lets.cc
-  transform/fold_trivial_single_use_lets.h
   transform/for_loop_to_loop.cc
   transform/for_loop_to_loop.h
   transform/localize_struct_array_assignment.cc
   transform/localize_struct_array_assignment.h
-  transform/loop_to_for_loop.cc
-  transform/loop_to_for_loop.h
   transform/manager.cc
   transform/manager.h
   transform/module_scope_var_to_entry_point_param.cc
@@ -1117,11 +1113,9 @@
       transform/disable_uniformity_analysis_test.cc
       transform/expand_compound_assignment_test.cc
       transform/first_index_offset_test.cc
-      transform/fold_trivial_single_use_lets_test.cc
       transform/for_loop_to_loop_test.cc
       transform/expand_compound_assignment.cc
       transform/localize_struct_array_assignment_test.cc
-      transform/loop_to_for_loop_test.cc
       transform/module_scope_var_to_entry_point_param_test.cc
       transform/multiplanar_external_texture_test.cc
       transform/num_workgroups_from_uniform_test.cc
diff --git a/src/tint/cmd/main.cc b/src/tint/cmd/main.cc
index 6f12348..7927869 100644
--- a/src/tint/cmd/main.cc
+++ b/src/tint/cmd/main.cc
@@ -1025,11 +1025,6 @@
              m.Add<tint::transform::FirstIndexOffset>();
              return true;
          }},
-        {"fold_trivial_single_use_lets",
-         [](tint::inspector::Inspector&, tint::transform::Manager& m, tint::transform::DataMap&) {
-             m.Add<tint::transform::FoldTrivialSingleUseLets>();
-             return true;
-         }},
         {"renamer",
          [](tint::inspector::Inspector&, tint::transform::Manager& m, tint::transform::DataMap&) {
              m.Add<tint::transform::Renamer>();
diff --git a/src/tint/transform/fold_trivial_single_use_lets.cc b/src/tint/transform/fold_trivial_single_use_lets.cc
deleted file mode 100644
index 4d6a2a5..0000000
--- a/src/tint/transform/fold_trivial_single_use_lets.cc
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2021 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.
-
-#include "src/tint/transform/fold_trivial_single_use_lets.h"
-
-#include "src/tint/program_builder.h"
-#include "src/tint/sem/block_statement.h"
-#include "src/tint/sem/function.h"
-#include "src/tint/sem/materialize.h"
-#include "src/tint/sem/statement.h"
-#include "src/tint/sem/variable.h"
-#include "src/tint/utils/scoped_assignment.h"
-
-TINT_INSTANTIATE_TYPEINFO(tint::transform::FoldTrivialSingleUseLets);
-
-namespace tint::transform {
-namespace {
-
-/// @returns a @p stmt cast to a ast::VariableDeclStatement iff the statement is a let declaration,
-/// with an initializer that's an identifier or literal expression.
-const ast::VariableDeclStatement* AsTrivialLetDecl(const ast::Statement* stmt) {
-    auto* var_decl = stmt->As<ast::VariableDeclStatement>();
-    if (!var_decl) {
-        return nullptr;
-    }
-    auto* let = var_decl->variable->As<ast::Let>();
-    if (!let) {
-        return nullptr;
-    }
-    auto* ctor = let->constructor;
-    if (!IsAnyOf<ast::IdentifierExpression, ast::LiteralExpression>(ctor)) {
-        return nullptr;
-    }
-    return var_decl;
-}
-
-}  // namespace
-
-FoldTrivialSingleUseLets::FoldTrivialSingleUseLets() = default;
-
-FoldTrivialSingleUseLets::~FoldTrivialSingleUseLets() = default;
-
-void FoldTrivialSingleUseLets::Run(CloneContext& ctx, const DataMap&, DataMap&) const {
-    for (auto* node : ctx.src->ASTNodes().Objects()) {
-        // For each statement in each block of the entire program...
-        if (auto* block = node->As<ast::BlockStatement>()) {
-            auto& stmts = block->statements;
-            for (size_t stmt_idx = 0; stmt_idx < stmts.Length(); stmt_idx++) {
-                auto* stmt = stmts[stmt_idx];
-                // Is the statement a trivial let declaration with a single user?
-                if (auto* let_decl = AsTrivialLetDecl(stmt)) {
-                    auto* let = let_decl->variable;
-                    auto* sem_let = ctx.src->Sem().Get(let);
-                    auto& users = sem_let->Users();
-                    if (users.size() != 1) {
-                        continue;  // Does not have a single user.
-                    }
-
-                    auto* user = users[0];
-                    auto* user_stmt = user->Stmt()->Declaration();
-
-                    // Scan forward to find the statement of use. If there's a statement between the
-                    // declaration and the use, then we cannot safely fold.
-                    for (size_t i = stmt_idx; i < stmts.Length(); i++) {
-                        if (user_stmt == stmts[i]) {
-                            auto* user_expr = user->Declaration();
-                            ctx.Remove(stmts, let_decl);
-                            auto* initializer = ctx.Clone(let->constructor);
-                            if (auto* materialize =
-                                    sem_let->Constructor()->As<sem::Materialize>()) {
-                                // The let initializer was an abstract numeric that was implicitly
-                                // materialized to a concrete type. As we're inlining the
-                                // initializer into the use, we need to make this cast explicit,
-                                // otherwise we'll have a different type for the substitution.
-                                auto* concrete_ty = CreateASTTypeFor(ctx, materialize->Type());
-                                initializer = ctx.dst->Construct(concrete_ty, initializer);
-                            }
-                            ctx.Replace(user_expr, initializer);
-                        }
-                        if (!AsTrivialLetDecl(stmts[i])) {
-                            // Stop if we hit a statement that isn't the single use of the
-                            // let, and isn't a let itself.
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    ctx.Clone();
-}
-
-}  // namespace tint::transform
diff --git a/src/tint/transform/fold_trivial_single_use_lets.h b/src/tint/transform/fold_trivial_single_use_lets.h
deleted file mode 100644
index 4036f02..0000000
--- a/src/tint/transform/fold_trivial_single_use_lets.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2021 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_TRANSFORM_FOLD_TRIVIAL_SINGLE_USE_LETS_H_
-#define SRC_TINT_TRANSFORM_FOLD_TRIVIAL_SINGLE_USE_LETS_H_
-
-#include <string>
-#include <unordered_map>
-
-#include "src/tint/transform/transform.h"
-
-namespace tint::transform {
-
-/// FoldTrivialSingleUseLets is an optimizer for folding away trivial `let`
-/// statements into their single place of use. This transform is intended to
-/// clean up the SSA `let`s produced by the SPIR-V reader.
-/// `let`s can only be folded if:
-/// * There is a single usage of the `let` value.
-/// * The `let` is constructed with a ScalarConstructorExpression, or with an
-///   IdentifierExpression.
-/// * There are only other foldable `let`s between the `let` declaration and its
-///   single usage.
-/// These rules prevent any hoisting of the let that may affect execution
-/// behaviour.
-class FoldTrivialSingleUseLets final : public Castable<FoldTrivialSingleUseLets, Transform> {
-  public:
-    /// Constructor
-    FoldTrivialSingleUseLets();
-
-    /// Destructor
-    ~FoldTrivialSingleUseLets() override;
-
-  protected:
-    /// Runs the transform using the CloneContext built for transforming a
-    /// program. Run() is responsible for calling Clone() on the CloneContext.
-    /// @param ctx the CloneContext primed with the input program and
-    /// ProgramBuilder
-    /// @param inputs optional extra transform-specific input data
-    /// @param outputs optional extra transform-specific output data
-    void Run(CloneContext& ctx, const DataMap& inputs, DataMap& outputs) const override;
-};
-
-}  // namespace tint::transform
-
-#endif  // SRC_TINT_TRANSFORM_FOLD_TRIVIAL_SINGLE_USE_LETS_H_
diff --git a/src/tint/transform/fold_trivial_single_use_lets_test.cc b/src/tint/transform/fold_trivial_single_use_lets_test.cc
deleted file mode 100644
index 80e9841..0000000
--- a/src/tint/transform/fold_trivial_single_use_lets_test.cc
+++ /dev/null
@@ -1,247 +0,0 @@
-// Copyright 2021 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.
-
-#include "src/tint/transform/fold_trivial_single_use_lets.h"
-
-#include "src/tint/transform/test_helper.h"
-
-namespace tint::transform {
-namespace {
-
-using FoldTrivialSingleUseLetsTest = TransformTest;
-
-TEST_F(FoldTrivialSingleUseLetsTest, EmptyModule) {
-    auto* src = "";
-    auto* expect = "";
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, Single_Concrete) {
-    auto* src = R"(
-fn f() {
-  let x = 1i;
-  _ = x;
-}
-)";
-
-    auto* expect = R"(
-fn f() {
-  _ = 1i;
-}
-)";
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, Single_Abstract) {
-    auto* src = R"(
-fn f() {
-  let x = 1;
-  _ = x;
-}
-)";
-
-    auto* expect = R"(
-fn f() {
-  _ = i32(1);
-}
-)";
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, Multiple_Concrete) {
-    auto* src = R"(
-fn f() {
-  let x = 1u;
-  let y = 2u;
-  let z = 3u;
-  _ = x + y + z;
-}
-)";
-
-    auto* expect = R"(
-fn f() {
-  _ = ((1u + 2u) + 3u);
-}
-)";
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, Multiple_Abstract) {
-    auto* src = R"(
-fn f() {
-  let x = 1;
-  let y = 2;
-  let z = 3;
-  _ = x + y + z;
-}
-)";
-
-    auto* expect = R"(
-fn f() {
-  _ = ((i32(1) + i32(2)) + i32(3));
-}
-)";
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, Chained_Concrete) {
-    auto* src = R"(
-fn f() {
-  let x = 1i;
-  let y = x;
-  let z = y;
-  _ = z;
-}
-)";
-
-    auto* expect = R"(
-fn f() {
-  _ = 1i;
-}
-)";
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, Chained_Abstract) {
-    auto* src = R"(
-fn f() {
-  let x = 1;
-  let y = x;
-  let z = y;
-  _ = z;
-}
-)";
-
-    auto* expect = R"(
-fn f() {
-  _ = i32(1);
-}
-)";
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, NoFold_NonTrivialLet) {
-    auto* src = R"(
-fn function_with_possible_side_effect() -> i32 {
-  return 1;
-}
-
-fn f() {
-  let x = 1;
-  let y = function_with_possible_side_effect();
-  _ = (x + y);
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, NoFold_NonTrivialLet_OutOfOrder) {
-    auto* src = R"(
-fn f() {
-  let x = 1;
-  let y = function_with_possible_side_effect();
-  _ = (x + y);
-}
-
-fn function_with_possible_side_effect() -> i32 {
-  return 1;
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, NoFold_UseInSubBlock) {
-    auto* src = R"(
-fn f() {
-  let x = 1;
-  {
-    _ = x;
-  }
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, NoFold_MultipleUses) {
-    auto* src = R"(
-fn f() {
-  let x = 1;
-  _ = (x + x);
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(FoldTrivialSingleUseLetsTest, NoFold_Shadowing) {
-    auto* src = R"(
-fn f() {
-  var y = 1;
-  let x = y;
-  {
-    let y = false;
-    _ = (x + x);
-  }
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<FoldTrivialSingleUseLets>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-}  // namespace
-}  // namespace tint::transform
diff --git a/src/tint/transform/loop_to_for_loop.cc b/src/tint/transform/loop_to_for_loop.cc
deleted file mode 100644
index 00bf5ec..0000000
--- a/src/tint/transform/loop_to_for_loop.cc
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2021 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.
-
-#include "src/tint/transform/loop_to_for_loop.h"
-
-#include "src/tint/ast/break_statement.h"
-#include "src/tint/ast/for_loop_statement.h"
-#include "src/tint/program_builder.h"
-#include "src/tint/sem/block_statement.h"
-#include "src/tint/sem/function.h"
-#include "src/tint/sem/statement.h"
-#include "src/tint/sem/variable.h"
-#include "src/tint/utils/scoped_assignment.h"
-
-TINT_INSTANTIATE_TYPEINFO(tint::transform::LoopToForLoop);
-
-namespace tint::transform {
-namespace {
-
-bool IsBlockWithSingleBreak(const ast::BlockStatement* block) {
-    if (block->statements.Length() != 1) {
-        return false;
-    }
-    return block->statements[0]->Is<ast::BreakStatement>();
-}
-
-bool IsVarUsedByStmt(const sem::Info& sem, const ast::Variable* var, const ast::Statement* stmt) {
-    auto* var_sem = sem.Get(var);
-    for (auto* user : var_sem->Users()) {
-        if (auto* s = user->Stmt()) {
-            if (s->Declaration() == stmt) {
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
-}  // namespace
-
-LoopToForLoop::LoopToForLoop() = default;
-
-LoopToForLoop::~LoopToForLoop() = default;
-
-bool LoopToForLoop::ShouldRun(const Program* program, const DataMap&) const {
-    for (auto* node : program->ASTNodes().Objects()) {
-        if (node->Is<ast::LoopStatement>()) {
-            return true;
-        }
-    }
-    return false;
-}
-
-void LoopToForLoop::Run(CloneContext& ctx, const DataMap&, DataMap&) const {
-    ctx.ReplaceAll([&](const ast::LoopStatement* loop) -> const ast::Statement* {
-        // For loop condition is taken from the first statement in the loop.
-        // This requires an if-statement with either:
-        //  * A true block with no else statements, and the true block contains a
-        //    single 'break' statement.
-        //  * An empty true block with a single, no-condition else statement
-        //    containing a single 'break' statement.
-        // Examples:
-        //   loop {  if (condition) { break; } ... }
-        //   loop {  if (condition) {} else { break; } ... }
-        auto& stmts = loop->body->statements;
-        if (stmts.IsEmpty()) {
-            return nullptr;
-        }
-        auto* if_stmt = stmts[0]->As<ast::IfStatement>();
-        if (!if_stmt) {
-            return nullptr;
-        }
-        auto* else_stmt = tint::As<ast::BlockStatement>(if_stmt->else_statement);
-
-        bool negate_condition = false;
-        if (IsBlockWithSingleBreak(if_stmt->body) && if_stmt->else_statement == nullptr) {
-            negate_condition = true;
-        } else if (if_stmt->body->Empty() && else_stmt && IsBlockWithSingleBreak(else_stmt)) {
-            negate_condition = false;
-        } else {
-            return nullptr;
-        }
-
-        // The continuing block must be empty or contain a single, assignment or
-        // function call statement.
-        const ast::Statement* continuing = nullptr;
-        if (auto* loop_cont = loop->continuing) {
-            if (loop_cont->statements.Length() != 1) {
-                return nullptr;
-            }
-
-            continuing = loop_cont->statements[0];
-            if (!continuing->IsAnyOf<ast::AssignmentStatement, ast::CallStatement>()) {
-                return nullptr;
-            }
-
-            // And the continuing statement must not use any of the variables declared
-            // in the loop body.
-            for (auto* stmt : loop->body->statements) {
-                if (auto* var_decl = stmt->As<ast::VariableDeclStatement>()) {
-                    if (IsVarUsedByStmt(ctx.src->Sem(), var_decl->variable, continuing)) {
-                        return nullptr;
-                    }
-                }
-            }
-
-            continuing = ctx.Clone(continuing);
-        }
-
-        auto* condition = ctx.Clone(if_stmt->condition);
-        if (negate_condition) {
-            condition = ctx.dst->create<ast::UnaryOpExpression>(ast::UnaryOp::kNot, condition);
-        }
-
-        ast::Statement* initializer = nullptr;
-
-        ctx.Remove(loop->body->statements, if_stmt);
-        auto* body = ctx.Clone(loop->body);
-        return ctx.dst->create<ast::ForLoopStatement>(initializer, condition, continuing, body);
-    });
-
-    ctx.Clone();
-}
-
-}  // namespace tint::transform
diff --git a/src/tint/transform/loop_to_for_loop.h b/src/tint/transform/loop_to_for_loop.h
deleted file mode 100644
index 0e948c8..0000000
--- a/src/tint/transform/loop_to_for_loop.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2021 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_TRANSFORM_LOOP_TO_FOR_LOOP_H_
-#define SRC_TINT_TRANSFORM_LOOP_TO_FOR_LOOP_H_
-
-#include "src/tint/transform/transform.h"
-
-namespace tint::transform {
-
-/// LoopToForLoop is a Transform that attempts to convert WGSL `loop {}`
-/// statements into a for-loop statement.
-class LoopToForLoop final : public Castable<LoopToForLoop, Transform> {
-  public:
-    /// Constructor
-    LoopToForLoop();
-
-    /// Destructor
-    ~LoopToForLoop() override;
-
-    /// @param program the program to inspect
-    /// @param data optional extra transform-specific input data
-    /// @returns true if this transform should be run for the given program
-    bool ShouldRun(const Program* program, const DataMap& data = {}) const override;
-
-  protected:
-    /// Runs the transform using the CloneContext built for transforming a
-    /// program. Run() is responsible for calling Clone() on the CloneContext.
-    /// @param ctx the CloneContext primed with the input program and
-    /// ProgramBuilder
-    /// @param inputs optional extra transform-specific input data
-    /// @param outputs optional extra transform-specific output data
-    void Run(CloneContext& ctx, const DataMap& inputs, DataMap& outputs) const override;
-};
-
-}  // namespace tint::transform
-
-#endif  // SRC_TINT_TRANSFORM_LOOP_TO_FOR_LOOP_H_
diff --git a/src/tint/transform/loop_to_for_loop_test.cc b/src/tint/transform/loop_to_for_loop_test.cc
deleted file mode 100644
index 24e0e15..0000000
--- a/src/tint/transform/loop_to_for_loop_test.cc
+++ /dev/null
@@ -1,358 +0,0 @@
-// Copyright 2021 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.
-
-#include "src/tint/transform/loop_to_for_loop.h"
-
-#include "src/tint/transform/test_helper.h"
-
-namespace tint::transform {
-namespace {
-
-using LoopToForLoopTest = TransformTest;
-
-TEST_F(LoopToForLoopTest, ShouldRunEmptyModule) {
-    auto* src = R"()";
-
-    EXPECT_FALSE(ShouldRun<LoopToForLoop>(src));
-}
-
-TEST_F(LoopToForLoopTest, ShouldRunHasForLoop) {
-    auto* src = R"(
-fn f() {
-  loop {
-    break;
-  }
-}
-)";
-
-    EXPECT_TRUE(ShouldRun<LoopToForLoop>(src));
-}
-
-TEST_F(LoopToForLoopTest, EmptyModule) {
-    auto* src = "";
-    auto* expect = "";
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, IfBreak) {
-    auto* src = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  loop {
-    if (i > 15) {
-      break;
-    }
-
-    _ = 123;
-
-    continuing {
-      i = i + 1;
-    }
-  }
-}
-)";
-
-    auto* expect = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  for(; !((i > 15)); i = (i + 1)) {
-    _ = 123;
-  }
-}
-)";
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, IfElseBreak) {
-    auto* src = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  loop {
-    if (i < 15) {
-    } else {
-      break;
-    }
-
-    _ = 123;
-
-    continuing {
-      i = i + 1;
-    }
-  }
-}
-)";
-
-    auto* expect = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  for(; (i < 15); i = (i + 1)) {
-    _ = 123;
-  }
-}
-)";
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, Nested) {
-    auto* src = R"(
-let N = 16u;
-
-fn f() {
-  var i : u32 = 0u;
-  loop {
-    if (i >= N) {
-      break;
-    }
-    {
-      var j : u32 = 0u;
-      loop {
-        if (j >= N) {
-          break;
-        }
-
-        _ = i;
-        _ = j;
-
-        continuing {
-          j = (j + 1u);
-        }
-      }
-    }
-
-    continuing {
-      i = (i + 1u);
-    }
-  }
-}
-)";
-
-    auto* expect = R"(
-const N = 16u;
-
-fn f() {
-  var i : u32 = 0u;
-  for(; !((i >= N)); i = (i + 1u)) {
-    {
-      var j : u32 = 0u;
-      for(; !((j >= N)); j = (j + 1u)) {
-        _ = i;
-        _ = j;
-      }
-    }
-  }
-}
-)";
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, NoTransform_IfMultipleStmts) {
-    auto* src = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  loop {
-    if ((i < 15)) {
-      _ = i;
-      break;
-    }
-    _ = 123;
-
-    continuing {
-      i = (i + 1);
-    }
-  }
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, NoTransform_IfElseMultipleStmts) {
-    auto* src = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  loop {
-    if ((i < 15)) {
-    } else {
-      _ = i;
-      break;
-    }
-    _ = 123;
-
-    continuing {
-      i = (i + 1);
-    }
-  }
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, NoTransform_ContinuingIsCompound) {
-    auto* src = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  loop {
-    if ((i < 15)) {
-      break;
-    }
-    _ = 123;
-
-    continuing {
-      if (false) {
-      }
-    }
-  }
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, NoTransform_ContinuingMultipleStmts) {
-    auto* src = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  loop {
-    if ((i < 15)) {
-      break;
-    }
-    _ = 123;
-
-    continuing {
-      i = (i + 1);
-      _ = i;
-    }
-  }
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, NoTransform_ContinuingUsesVarDeclInLoopBody) {
-    auto* src = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  loop {
-    if ((i < 15)) {
-      break;
-    }
-    var j : i32;
-
-    continuing {
-      i = (i + j);
-    }
-  }
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, NoTransform_IfBreakWithElse) {
-    auto* src = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  loop {
-    if ((i > 15)) {
-      break;
-    } else {
-    }
-    _ = 123;
-
-    continuing {
-      i = (i + 1);
-    }
-  }
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(LoopToForLoopTest, NoTransform_IfBreakWithElseIf) {
-    auto* src = R"(
-fn f() {
-  var i : i32;
-  i = 0;
-  loop {
-    if ((i > 15)) {
-      break;
-    } else if (true) {
-    }
-    _ = 123;
-
-    continuing {
-      i = (i + 1);
-    }
-  }
-}
-)";
-
-    auto* expect = src;
-
-    auto got = Run<LoopToForLoop>(src);
-
-    EXPECT_EQ(expect, str(got));
-}
-
-}  // namespace
-}  // namespace tint::transform
diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index d051981..e332495 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -55,8 +55,6 @@
 #include "src/tint/transform/decompose_memory_access.h"
 #include "src/tint/transform/disable_uniformity_analysis.h"
 #include "src/tint/transform/expand_compound_assignment.h"
-#include "src/tint/transform/fold_trivial_single_use_lets.h"
-#include "src/tint/transform/loop_to_for_loop.h"
 #include "src/tint/transform/manager.h"
 #include "src/tint/transform/pad_structs.h"
 #include "src/tint/transform/promote_initializers_to_let.h"
@@ -208,11 +206,6 @@
                                          /* preserve_unicode */ false);
     manager.Add<transform::Unshadow>();
 
-    // Attempt to convert `loop`s into for-loops. This is to try and massage the
-    // output into something that will not cause FXC to choke or misbehave.
-    manager.Add<transform::FoldTrivialSingleUseLets>();
-    manager.Add<transform::LoopToForLoop>();
-
     if (!options.disable_workgroup_init) {
         // ZeroInitWorkgroupMemory must come before CanonicalizeEntryPointIO as
         // ZeroInitWorkgroupMemory may inject new builtin parameters.
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index 4678065..3186955 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -55,9 +55,7 @@
 #include "src/tint/transform/decompose_memory_access.h"
 #include "src/tint/transform/disable_uniformity_analysis.h"
 #include "src/tint/transform/expand_compound_assignment.h"
-#include "src/tint/transform/fold_trivial_single_use_lets.h"
 #include "src/tint/transform/localize_struct_array_assignment.h"
-#include "src/tint/transform/loop_to_for_loop.h"
 #include "src/tint/transform/manager.h"
 #include "src/tint/transform/num_workgroups_from_uniform.h"
 #include "src/tint/transform/promote_initializers_to_let.h"
@@ -206,11 +204,6 @@
     manager.Add<transform::SimplifyPointers>();
     manager.Add<transform::LocalizeStructArrayAssignment>();
 
-    // Attempt to convert `loop`s into for-loops. This is to try and massage the
-    // output into something that will not cause FXC to choke or misbehave.
-    manager.Add<transform::FoldTrivialSingleUseLets>();
-    manager.Add<transform::LoopToForLoop>();
-
     if (!options.disable_workgroup_init) {
         // ZeroInitWorkgroupMemory must come before CanonicalizeEntryPointIO as
         // ZeroInitWorkgroupMemory may inject new builtin parameters.
diff --git a/test/tint/bug/tint/1061.spvasm.expected.dxc.hlsl b/test/tint/bug/tint/1061.spvasm.expected.dxc.hlsl
index a7c2d35..e8ae5f0 100644
--- a/test/tint/bug/tint/1061.spvasm.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1061.spvasm.expected.dxc.hlsl
@@ -7,7 +7,11 @@
   float f = 0.0f;
   float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
   f = determinant(float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f)));
-  v = float4(sin(f), cos(f), exp2(f), log(f));
+  const float x_33 = f;
+  const float x_35 = f;
+  const float x_37 = f;
+  const float x_39 = f;
+  v = float4(sin(x_33), cos(x_35), exp2(x_37), log(x_39));
   const float4 x_42 = v;
   const float4 x_44 = asfloat(x_7[0]);
   if ((distance(x_42, x_44) < 0.100000001f)) {
diff --git a/test/tint/bug/tint/1061.spvasm.expected.fxc.hlsl b/test/tint/bug/tint/1061.spvasm.expected.fxc.hlsl
index a7c2d35..e8ae5f0 100644
--- a/test/tint/bug/tint/1061.spvasm.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1061.spvasm.expected.fxc.hlsl
@@ -7,7 +7,11 @@
   float f = 0.0f;
   float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
   f = determinant(float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f)));
-  v = float4(sin(f), cos(f), exp2(f), log(f));
+  const float x_33 = f;
+  const float x_35 = f;
+  const float x_37 = f;
+  const float x_39 = f;
+  v = float4(sin(x_33), cos(x_35), exp2(x_37), log(x_39));
   const float4 x_42 = v;
   const float4 x_44 = asfloat(x_7[0]);
   if ((distance(x_42, x_44) < 0.100000001f)) {
diff --git a/test/tint/bug/tint/1061.spvasm.expected.glsl b/test/tint/bug/tint/1061.spvasm.expected.glsl
index 3df5cd7..72307d3 100644
--- a/test/tint/bug/tint/1061.spvasm.expected.glsl
+++ b/test/tint/bug/tint/1061.spvasm.expected.glsl
@@ -11,7 +11,11 @@
   float f = 0.0f;
   vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   f = determinant(mat3(vec3(1.0f, 0.0f, 0.0f), vec3(0.0f, 1.0f, 0.0f), vec3(0.0f, 0.0f, 1.0f)));
-  v = vec4(sin(f), cos(f), exp2(f), log(f));
+  float x_33 = f;
+  float x_35 = f;
+  float x_37 = f;
+  float x_39 = f;
+  v = vec4(sin(x_33), cos(x_35), exp2(x_37), log(x_39));
   vec4 x_42 = v;
   vec4 x_44 = x_7.ref;
   if ((distance(x_42, x_44) < 0.100000001f)) {
diff --git a/test/tint/bug/tint/1083.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1083.wgsl.expected.dxc.hlsl
index 4035cda..a1dedc8 100644
--- a/test/tint/bug/tint/1083.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1083.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int c = 1;
+  const int a = 1;
+  const int b = 0;
+  const int c = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/bug/tint/1083.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1083.wgsl.expected.fxc.hlsl
index 4035cda..a1dedc8 100644
--- a/test/tint/bug/tint/1083.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1083.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int c = 1;
+  const int a = 1;
+  const int b = 0;
+  const int c = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/bug/tint/1083.wgsl.expected.glsl b/test/tint/bug/tint/1083.wgsl.expected.glsl
index 9daaea1..0054f12 100644
--- a/test/tint/bug/tint/1083.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1083.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int c = 1;
+  int a = 1;
+  int b = 0;
+  int c = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/bug/tint/1088.spvasm.expected.dxc.hlsl b/test/tint/bug/tint/1088.spvasm.expected.dxc.hlsl
index abd9ffe..dce65eb 100644
--- a/test/tint/bug/tint/1088.spvasm.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1088.spvasm.expected.dxc.hlsl
@@ -33,7 +33,8 @@
   const float4x4 x_69 = tint_symbol_4(x_14, 0u);
   const float3 x_70 = p;
   gl_Position = mul(float4(x_70.x, x_70.y, x_70.z, 1.0f), x_69);
-  vUV = uv;
+  const float2 x_83 = uv;
+  vUV = x_83;
   const float x_87 = gl_Position.y;
   gl_Position.y = (x_87 * -1.0f);
   return;
diff --git a/test/tint/bug/tint/1088.spvasm.expected.fxc.hlsl b/test/tint/bug/tint/1088.spvasm.expected.fxc.hlsl
index abd9ffe..dce65eb 100644
--- a/test/tint/bug/tint/1088.spvasm.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1088.spvasm.expected.fxc.hlsl
@@ -33,7 +33,8 @@
   const float4x4 x_69 = tint_symbol_4(x_14, 0u);
   const float3 x_70 = p;
   gl_Position = mul(float4(x_70.x, x_70.y, x_70.z, 1.0f), x_69);
-  vUV = uv;
+  const float2 x_83 = uv;
+  vUV = x_83;
   const float x_87 = gl_Position.y;
   gl_Position.y = (x_87 * -1.0f);
   return;
diff --git a/test/tint/bug/tint/1088.spvasm.expected.glsl b/test/tint/bug/tint/1088.spvasm.expected.glsl
index 43e39e5..2adb09f 100644
--- a/test/tint/bug/tint/1088.spvasm.expected.glsl
+++ b/test/tint/bug/tint/1088.spvasm.expected.glsl
@@ -44,7 +44,8 @@
   mat4 x_69 = x_14.worldViewProjection;
   vec3 x_70 = p;
   tint_symbol = (x_69 * vec4(x_70.x, x_70.y, x_70.z, 1.0f));
-  vUV = uv;
+  vec2 x_83 = uv;
+  vUV = x_83;
   float x_87 = tint_symbol.y;
   tint_symbol.y = (x_87 * -1.0f);
   return;
diff --git a/test/tint/bug/tint/1118.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1118.wgsl.expected.dxc.hlsl
index 91abf60..fe4e1ff 100644
--- a/test/tint/bug/tint/1118.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1118.wgsl.expected.dxc.hlsl
@@ -41,11 +41,13 @@
   float3 finalDiffuse = float3(0.0f, 0.0f, 0.0f);
   float3 finalSpecular = float3(0.0f, 0.0f, 0.0f);
   float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  if ((fClipDistance3 > 0.0f)) {
+  const float x_9 = fClipDistance3;
+  if ((x_9 > 0.0f)) {
     tint_discard = true;
     return;
   }
-  if ((fClipDistance4 > 0.0f)) {
+  const float x_17 = fClipDistance4;
+  if ((x_17 > 0.0f)) {
     tint_discard = true;
     return;
   }
@@ -64,7 +66,8 @@
   const float4 x_74 = (0.0f).xxxx;
   const float4 x_76 = baseColor;
   const float3 x_78 = (float3(x_76.x, x_76.y, x_76.z) * float3(x_74.x, x_74.y, x_74.z));
-  baseColor = float4(x_78.x, x_78.y, x_78.z, baseColor.w);
+  const float4 x_79 = baseColor;
+  baseColor = float4(x_78.x, x_78.y, x_78.z, x_79.w);
   baseAmbientColor = (1.0f).xxx;
   glossiness = 0.0f;
   diffuseBase = (0.0f).xxx;
@@ -80,17 +83,23 @@
   const float4 x_108 = baseColor;
   finalDiffuse = (clamp((((x_96 * x_97) + x_99) + x_103), (0.0f).xxx, (1.0f).xxx) * float3(x_108.x, x_108.y, x_108.z));
   finalSpecular = (0.0f).xxx;
+  const float3 x_113 = finalDiffuse;
+  const float3 x_114 = baseAmbientColor;
+  const float3 x_116 = finalSpecular;
   const float4 x_118 = reflectionColor;
   const float4 x_121 = refractionColor;
-  const float3 x_123 = ((((finalDiffuse * baseAmbientColor) + finalSpecular) + float3(x_118.x, x_118.y, x_118.z)) + float3(x_121.x, x_121.y, x_121.z));
-  color = float4(x_123.x, x_123.y, x_123.z, alpha);
+  const float3 x_123 = ((((x_113 * x_114) + x_116) + float3(x_118.x, x_118.y, x_118.z)) + float3(x_121.x, x_121.y, x_121.z));
+  const float x_124 = alpha;
+  color = float4(x_123.x, x_123.y, x_123.z, x_124);
   const float4 x_129 = color;
   const float3 x_132 = max(float3(x_129.x, x_129.y, x_129.z), (0.0f).xxx);
-  color = float4(x_132.x, x_132.y, x_132.z, color.w);
+  const float4 x_133 = color;
+  color = float4(x_132.x, x_132.y, x_132.z, x_133.w);
   const float x_140 = asfloat(x_137[0].x);
   const float x_142 = color.w;
   color.w = (x_142 * x_140);
-  glFragColor = color;
+  const float4 x_147 = color;
+  glFragColor = x_147;
   return;
 }
 
diff --git a/test/tint/bug/tint/1118.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1118.wgsl.expected.fxc.hlsl
index 91abf60..fe4e1ff 100644
--- a/test/tint/bug/tint/1118.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1118.wgsl.expected.fxc.hlsl
@@ -41,11 +41,13 @@
   float3 finalDiffuse = float3(0.0f, 0.0f, 0.0f);
   float3 finalSpecular = float3(0.0f, 0.0f, 0.0f);
   float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  if ((fClipDistance3 > 0.0f)) {
+  const float x_9 = fClipDistance3;
+  if ((x_9 > 0.0f)) {
     tint_discard = true;
     return;
   }
-  if ((fClipDistance4 > 0.0f)) {
+  const float x_17 = fClipDistance4;
+  if ((x_17 > 0.0f)) {
     tint_discard = true;
     return;
   }
@@ -64,7 +66,8 @@
   const float4 x_74 = (0.0f).xxxx;
   const float4 x_76 = baseColor;
   const float3 x_78 = (float3(x_76.x, x_76.y, x_76.z) * float3(x_74.x, x_74.y, x_74.z));
-  baseColor = float4(x_78.x, x_78.y, x_78.z, baseColor.w);
+  const float4 x_79 = baseColor;
+  baseColor = float4(x_78.x, x_78.y, x_78.z, x_79.w);
   baseAmbientColor = (1.0f).xxx;
   glossiness = 0.0f;
   diffuseBase = (0.0f).xxx;
@@ -80,17 +83,23 @@
   const float4 x_108 = baseColor;
   finalDiffuse = (clamp((((x_96 * x_97) + x_99) + x_103), (0.0f).xxx, (1.0f).xxx) * float3(x_108.x, x_108.y, x_108.z));
   finalSpecular = (0.0f).xxx;
+  const float3 x_113 = finalDiffuse;
+  const float3 x_114 = baseAmbientColor;
+  const float3 x_116 = finalSpecular;
   const float4 x_118 = reflectionColor;
   const float4 x_121 = refractionColor;
-  const float3 x_123 = ((((finalDiffuse * baseAmbientColor) + finalSpecular) + float3(x_118.x, x_118.y, x_118.z)) + float3(x_121.x, x_121.y, x_121.z));
-  color = float4(x_123.x, x_123.y, x_123.z, alpha);
+  const float3 x_123 = ((((x_113 * x_114) + x_116) + float3(x_118.x, x_118.y, x_118.z)) + float3(x_121.x, x_121.y, x_121.z));
+  const float x_124 = alpha;
+  color = float4(x_123.x, x_123.y, x_123.z, x_124);
   const float4 x_129 = color;
   const float3 x_132 = max(float3(x_129.x, x_129.y, x_129.z), (0.0f).xxx);
-  color = float4(x_132.x, x_132.y, x_132.z, color.w);
+  const float4 x_133 = color;
+  color = float4(x_132.x, x_132.y, x_132.z, x_133.w);
   const float x_140 = asfloat(x_137[0].x);
   const float x_142 = color.w;
   color.w = (x_142 * x_140);
-  glFragColor = color;
+  const float4 x_147 = color;
+  glFragColor = x_147;
   return;
 }
 
diff --git a/test/tint/bug/tint/1118.wgsl.expected.glsl b/test/tint/bug/tint/1118.wgsl.expected.glsl
index 2fe20d2..18990ec 100644
--- a/test/tint/bug/tint/1118.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1118.wgsl.expected.glsl
@@ -56,11 +56,13 @@
   vec3 finalDiffuse = vec3(0.0f, 0.0f, 0.0f);
   vec3 finalSpecular = vec3(0.0f, 0.0f, 0.0f);
   vec4 color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-  if ((fClipDistance3 > 0.0f)) {
+  float x_9 = fClipDistance3;
+  if ((x_9 > 0.0f)) {
     tint_discard = true;
     return;
   }
-  if ((fClipDistance4 > 0.0f)) {
+  float x_17 = fClipDistance4;
+  if ((x_17 > 0.0f)) {
     tint_discard = true;
     return;
   }
@@ -79,7 +81,8 @@
   vec4 x_74 = vec4(0.0f);
   vec4 x_76 = baseColor;
   vec3 x_78 = (vec3(x_76.x, x_76.y, x_76.z) * vec3(x_74.x, x_74.y, x_74.z));
-  baseColor = vec4(x_78.x, x_78.y, x_78.z, baseColor.w);
+  vec4 x_79 = baseColor;
+  baseColor = vec4(x_78.x, x_78.y, x_78.z, x_79.w);
   baseAmbientColor = vec3(1.0f);
   glossiness = 0.0f;
   diffuseBase = vec3(0.0f);
@@ -95,17 +98,23 @@
   vec4 x_108 = baseColor;
   finalDiffuse = (clamp((((x_96 * x_97) + x_99) + x_103), vec3(0.0f), vec3(1.0f)) * vec3(x_108.x, x_108.y, x_108.z));
   finalSpecular = vec3(0.0f);
+  vec3 x_113 = finalDiffuse;
+  vec3 x_114 = baseAmbientColor;
+  vec3 x_116 = finalSpecular;
   vec4 x_118 = reflectionColor;
   vec4 x_121 = refractionColor;
-  vec3 x_123 = ((((finalDiffuse * baseAmbientColor) + finalSpecular) + vec3(x_118.x, x_118.y, x_118.z)) + vec3(x_121.x, x_121.y, x_121.z));
-  color = vec4(x_123.x, x_123.y, x_123.z, alpha);
+  vec3 x_123 = ((((x_113 * x_114) + x_116) + vec3(x_118.x, x_118.y, x_118.z)) + vec3(x_121.x, x_121.y, x_121.z));
+  float x_124 = alpha;
+  color = vec4(x_123.x, x_123.y, x_123.z, x_124);
   vec4 x_129 = color;
   vec3 x_132 = max(vec3(x_129.x, x_129.y, x_129.z), vec3(0.0f));
-  color = vec4(x_132.x, x_132.y, x_132.z, color.w);
+  vec4 x_133 = color;
+  color = vec4(x_132.x, x_132.y, x_132.z, x_133.w);
   float x_140 = x_137.visibility;
   float x_142 = color.w;
   color.w = (x_142 * x_140);
-  glFragColor = color;
+  vec4 x_147 = color;
+  glFragColor = x_147;
   return;
 }
 
diff --git a/test/tint/bug/tint/1121.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1121.wgsl.expected.dxc.hlsl
index bfff463..ed077fa 100644
--- a/test/tint/bug/tint/1121.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1121.wgsl.expected.dxc.hlsl
@@ -52,8 +52,9 @@
   frustumPlanes[5] = float4(0.0f, 0.0f, 1.0f, -(viewFar));
   const int TILE_SIZE = 16;
   const int TILE_COUNT_X = 2;
+  const int TILE_COUNT_Y = 2;
   {
-    [loop] for(int y_1 = 0; (y_1 < 2); y_1 = (y_1 + 1)) {
+    [loop] for(int y_1 = 0; (y_1 < TILE_COUNT_Y); y_1 = (y_1 + 1)) {
       {
         [loop] for(int x_1 = 0; (x_1 < TILE_COUNT_X); x_1 = (x_1 + 1)) {
           int2 tilePixel0Idx = int2((x_1 * TILE_SIZE), (y_1 * TILE_SIZE));
diff --git a/test/tint/bug/tint/1121.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1121.wgsl.expected.fxc.hlsl
index bfff463..ed077fa 100644
--- a/test/tint/bug/tint/1121.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1121.wgsl.expected.fxc.hlsl
@@ -52,8 +52,9 @@
   frustumPlanes[5] = float4(0.0f, 0.0f, 1.0f, -(viewFar));
   const int TILE_SIZE = 16;
   const int TILE_COUNT_X = 2;
+  const int TILE_COUNT_Y = 2;
   {
-    [loop] for(int y_1 = 0; (y_1 < 2); y_1 = (y_1 + 1)) {
+    [loop] for(int y_1 = 0; (y_1 < TILE_COUNT_Y); y_1 = (y_1 + 1)) {
       {
         [loop] for(int x_1 = 0; (x_1 < TILE_COUNT_X); x_1 = (x_1 + 1)) {
           int2 tilePixel0Idx = int2((x_1 * TILE_SIZE), (y_1 * TILE_SIZE));
diff --git a/test/tint/bug/tint/1121.wgsl.expected.glsl b/test/tint/bug/tint/1121.wgsl.expected.glsl
index 0636c71..5ebe0aa 100644
--- a/test/tint/bug/tint/1121.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1121.wgsl.expected.glsl
@@ -61,8 +61,9 @@
   frustumPlanes[5] = vec4(0.0f, 0.0f, 1.0f, -(viewFar));
   int TILE_SIZE = 16;
   int TILE_COUNT_X = 2;
+  int TILE_COUNT_Y = 2;
   {
-    for(int y_1 = 0; (y_1 < 2); y_1 = (y_1 + 1)) {
+    for(int y_1 = 0; (y_1 < TILE_COUNT_Y); y_1 = (y_1 + 1)) {
       {
         for(int x_1 = 0; (x_1 < TILE_COUNT_X); x_1 = (x_1 + 1)) {
           ivec2 tilePixel0Idx = ivec2((x_1 * TILE_SIZE), (y_1 * TILE_SIZE));
diff --git a/test/tint/bug/tint/1332.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1332.wgsl.expected.dxc.hlsl
index 6a9a78b..9df2d8c 100644
--- a/test/tint/bug/tint/1332.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1332.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void compute_main() {
-  float b = max(1.230000019f, 1.17549435e-38f);
+  const float a = 1.230000019f;
+  float b = max(a, 1.17549435e-38f);
   return;
 }
diff --git a/test/tint/bug/tint/1332.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1332.wgsl.expected.fxc.hlsl
index 6a9a78b..9df2d8c 100644
--- a/test/tint/bug/tint/1332.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1332.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void compute_main() {
-  float b = max(1.230000019f, 1.17549435e-38f);
+  const float a = 1.230000019f;
+  float b = max(a, 1.17549435e-38f);
   return;
 }
diff --git a/test/tint/bug/tint/1332.wgsl.expected.glsl b/test/tint/bug/tint/1332.wgsl.expected.glsl
index ce7977b..f95ddc7 100644
--- a/test/tint/bug/tint/1332.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1332.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void compute_main() {
-  float b = max(1.230000019f, 1.17549435e-38f);
+  float a = 1.230000019f;
+  float b = max(a, 1.17549435e-38f);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/bug/tint/1520.spvasm.expected.dxc.hlsl b/test/tint/bug/tint/1520.spvasm.expected.dxc.hlsl
index cbb1d39..211fd628 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1520.spvasm.expected.dxc.hlsl
@@ -77,7 +77,8 @@
   bool x_111 = false;
   bool x_114 = false;
   bool x_115 = false;
-  outputColor_S0 = vcolor_S0;
+  const float4 x_72 = vcolor_S0;
+  outputColor_S0 = x_72;
   const float x_77 = asfloat(x_4[1].x);
   x_8_unknown = x_77;
   x_9_ok = true;
diff --git a/test/tint/bug/tint/1520.spvasm.expected.fxc.hlsl b/test/tint/bug/tint/1520.spvasm.expected.fxc.hlsl
index cbb1d39..211fd628 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1520.spvasm.expected.fxc.hlsl
@@ -77,7 +77,8 @@
   bool x_111 = false;
   bool x_114 = false;
   bool x_115 = false;
-  outputColor_S0 = vcolor_S0;
+  const float4 x_72 = vcolor_S0;
+  outputColor_S0 = x_72;
   const float x_77 = asfloat(x_4[1].x);
   x_8_unknown = x_77;
   x_9_ok = true;
diff --git a/test/tint/bug/tint/1520.spvasm.expected.glsl b/test/tint/bug/tint/1520.spvasm.expected.glsl
index af6bb06..c59e118 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.glsl
+++ b/test/tint/bug/tint/1520.spvasm.expected.glsl
@@ -88,7 +88,8 @@
   bool x_111 = false;
   bool x_114 = false;
   bool x_115 = false;
-  outputColor_S0 = vcolor_S0;
+  vec4 x_72 = vcolor_S0;
+  outputColor_S0 = x_72;
   float x_77 = x_4.unknownInput_S1_c0;
   x_8_unknown = x_77;
   x_9_ok = true;
diff --git a/test/tint/bug/tint/1541.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1541.wgsl.expected.dxc.hlsl
index b223a6e..33378ef 100644
--- a/test/tint/bug/tint/1541.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1541.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void main() {
-  bool v = (false ? true : true);
+  const bool a = true;
+  bool v = (false ? true : (a & true));
   return;
 }
diff --git a/test/tint/bug/tint/1541.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1541.wgsl.expected.fxc.hlsl
index b223a6e..33378ef 100644
--- a/test/tint/bug/tint/1541.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1541.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void main() {
-  bool v = (false ? true : true);
+  const bool a = true;
+  bool v = (false ? true : (a & true));
   return;
 }
diff --git a/test/tint/bug/tint/1541.wgsl.expected.glsl b/test/tint/bug/tint/1541.wgsl.expected.glsl
index db24a4e..f2ae0aa3 100644
--- a/test/tint/bug/tint/1541.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1541.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void tint_symbol() {
-  bool v = (false ? true : true);
+  bool a = true;
+  bool v = (false ? true : bool(uint(a) & uint(true)));
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/bug/tint/1664.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1664.wgsl.expected.dxc.hlsl
index f80897a8..1c6dcba 100644
--- a/test/tint/bug/tint/1664.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1664.wgsl.expected.dxc.hlsl
@@ -1,10 +1,12 @@
 [numthreads(1, 1, 1)]
 void f0() {
+  const int a = 2147483647;
   const int b = 1;
-  const int c = -2147483648;
+  const int c = (a + 1);
   return;
 }
 
 void f1() {
-  const int b = 2147483647;
+  const int a = 1;
+  const int b = (-2147483648 - a);
 }
diff --git a/test/tint/bug/tint/1664.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1664.wgsl.expected.fxc.hlsl
index f80897a8..1c6dcba 100644
--- a/test/tint/bug/tint/1664.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1664.wgsl.expected.fxc.hlsl
@@ -1,10 +1,12 @@
 [numthreads(1, 1, 1)]
 void f0() {
+  const int a = 2147483647;
   const int b = 1;
-  const int c = -2147483648;
+  const int c = (a + 1);
   return;
 }
 
 void f1() {
-  const int b = 2147483647;
+  const int a = 1;
+  const int b = (-2147483648 - a);
 }
diff --git a/test/tint/bug/tint/1664.wgsl.expected.glsl b/test/tint/bug/tint/1664.wgsl.expected.glsl
index 51da551..1ef00e0 100644
--- a/test/tint/bug/tint/1664.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1664.wgsl.expected.glsl
@@ -1,8 +1,9 @@
 #version 310 es
 
 void f0() {
+  int a = 2147483647;
   int b = 1;
-  int c = -2147483648;
+  int c = (a + 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/bug/tint/413.spvasm.expected.dxc.hlsl b/test/tint/bug/tint/413.spvasm.expected.dxc.hlsl
index 309ad00..9bdcf8a 100644
--- a/test/tint/bug/tint/413.spvasm.expected.dxc.hlsl
+++ b/test/tint/bug/tint/413.spvasm.expected.dxc.hlsl
@@ -7,7 +7,8 @@
   srcValue = x_18;
   const uint x_22 = srcValue.x;
   srcValue.x = (x_22 + asuint(1));
-  Dst[(0).xx] = srcValue;
+  const uint4 x_27 = srcValue;
+  Dst[(0).xx] = x_27;
   return;
 }
 
diff --git a/test/tint/bug/tint/413.spvasm.expected.fxc.hlsl b/test/tint/bug/tint/413.spvasm.expected.fxc.hlsl
index 309ad00..9bdcf8a 100644
--- a/test/tint/bug/tint/413.spvasm.expected.fxc.hlsl
+++ b/test/tint/bug/tint/413.spvasm.expected.fxc.hlsl
@@ -7,7 +7,8 @@
   srcValue = x_18;
   const uint x_22 = srcValue.x;
   srcValue.x = (x_22 + asuint(1));
-  Dst[(0).xx] = srcValue;
+  const uint4 x_27 = srcValue;
+  Dst[(0).xx] = x_27;
   return;
 }
 
diff --git a/test/tint/bug/tint/413.spvasm.expected.glsl b/test/tint/bug/tint/413.spvasm.expected.glsl
index 4d7262d..954b68c 100644
--- a/test/tint/bug/tint/413.spvasm.expected.glsl
+++ b/test/tint/bug/tint/413.spvasm.expected.glsl
@@ -8,7 +8,8 @@
   srcValue = x_18;
   uint x_22 = srcValue.x;
   srcValue.x = (x_22 + uint(1));
-  imageStore(Dst, ivec2(0), srcValue);
+  uvec4 x_27 = srcValue;
+  imageStore(Dst, ivec2(0), x_27);
   return;
 }
 
diff --git a/test/tint/bug/tint/453.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/453.wgsl.expected.dxc.hlsl
index 4e9260e..05b15db 100644
--- a/test/tint/bug/tint/453.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/453.wgsl.expected.dxc.hlsl
@@ -8,6 +8,7 @@
   srcValue = x_22;
   const uint x_24 = srcValue.x;
   const uint x_25 = (x_24 + 1u);
-  Dst[(0).xx] = srcValue.xxxx;
+  const uint4 x_27 = srcValue;
+  Dst[(0).xx] = x_27.xxxx;
   return;
 }
diff --git a/test/tint/bug/tint/453.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/453.wgsl.expected.fxc.hlsl
index 4e9260e..05b15db 100644
--- a/test/tint/bug/tint/453.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/453.wgsl.expected.fxc.hlsl
@@ -8,6 +8,7 @@
   srcValue = x_22;
   const uint x_24 = srcValue.x;
   const uint x_25 = (x_24 + 1u);
-  Dst[(0).xx] = srcValue.xxxx;
+  const uint4 x_27 = srcValue;
+  Dst[(0).xx] = x_27.xxxx;
   return;
 }
diff --git a/test/tint/bug/tint/453.wgsl.expected.glsl b/test/tint/bug/tint/453.wgsl.expected.glsl
index 1059fb2..061de58 100644
--- a/test/tint/bug/tint/453.wgsl.expected.glsl
+++ b/test/tint/bug/tint/453.wgsl.expected.glsl
@@ -8,7 +8,8 @@
   srcValue = x_22;
   uint x_24 = srcValue.x;
   uint x_25 = (x_24 + 1u);
-  imageStore(Dst, ivec2(0), srcValue.xxxx);
+  uvec4 x_27 = srcValue;
+  imageStore(Dst, ivec2(0), x_27.xxxx);
   return;
 }
 
diff --git a/test/tint/bug/tint/922.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/922.wgsl.expected.dxc.hlsl
index 0185fae..c57e915 100644
--- a/test/tint/bug/tint/922.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/922.wgsl.expected.dxc.hlsl
@@ -40,25 +40,37 @@
 float3 Mat4x3GetCol0_(Mat4x3_ m) {
   Mat4x3_ m1 = (Mat4x3_)0;
   m1 = m;
-  return float3(m1.mx.x, m1.my.x, m1.mz.x);
+  const Mat4x3_ x_e2 = m1;
+  const Mat4x3_ x_e5 = m1;
+  const Mat4x3_ x_e8 = m1;
+  return float3(x_e2.mx.x, x_e5.my.x, x_e8.mz.x);
 }
 
 float3 Mat4x3GetCol1_(Mat4x3_ m2) {
   Mat4x3_ m3 = (Mat4x3_)0;
   m3 = m2;
-  return float3(m3.mx.y, m3.my.y, m3.mz.y);
+  const Mat4x3_ x_e2 = m3;
+  const Mat4x3_ x_e5 = m3;
+  const Mat4x3_ x_e8 = m3;
+  return float3(x_e2.mx.y, x_e5.my.y, x_e8.mz.y);
 }
 
 float3 Mat4x3GetCol2_(Mat4x3_ m4) {
   Mat4x3_ m5 = (Mat4x3_)0;
   m5 = m4;
-  return float3(m5.mx.z, m5.my.z, m5.mz.z);
+  const Mat4x3_ x_e2 = m5;
+  const Mat4x3_ x_e5 = m5;
+  const Mat4x3_ x_e8 = m5;
+  return float3(x_e2.mx.z, x_e5.my.z, x_e8.mz.z);
 }
 
 float3 Mat4x3GetCol3_(Mat4x3_ m6) {
   Mat4x3_ m7 = (Mat4x3_)0;
   m7 = m6;
-  return float3(m7.mx.w, m7.my.w, m7.mz.w);
+  const Mat4x3_ x_e2 = m7;
+  const Mat4x3_ x_e5 = m7;
+  const Mat4x3_ x_e8 = m7;
+  return float3(x_e2.mx.w, x_e5.my.w, x_e8.mz.w);
 }
 
 float4 Mul(Mat4x4_ m8, float4 v) {
@@ -66,7 +78,15 @@
   float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
   m9 = m8;
   v1 = v;
-  return float4(dot(m9.mx, v1), dot(m9.my, v1), dot(m9.mz, v1), dot(m9.mw, v1));
+  const Mat4x4_ x_e4 = m9;
+  const float4 x_e6 = v1;
+  const Mat4x4_ x_e8 = m9;
+  const float4 x_e10 = v1;
+  const Mat4x4_ x_e12 = m9;
+  const float4 x_e14 = v1;
+  const Mat4x4_ x_e16 = m9;
+  const float4 x_e18 = v1;
+  return float4(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18));
 }
 
 float3 Mul1(Mat4x3_ m10, float4 v2) {
@@ -74,7 +94,13 @@
   float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
   m11 = m10;
   v3 = v2;
-  return float3(dot(m11.mx, v3), dot(m11.my, v3), dot(m11.mz, v3));
+  const Mat4x3_ x_e4 = m11;
+  const float4 x_e6 = v3;
+  const Mat4x3_ x_e8 = m11;
+  const float4 x_e10 = v3;
+  const Mat4x3_ x_e12 = m11;
+  const float4 x_e14 = v3;
+  return float3(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14));
 }
 
 float2 Mul2(Mat4x2_ m12, float4 v4) {
@@ -82,7 +108,11 @@
   float4 v5 = float4(0.0f, 0.0f, 0.0f, 0.0f);
   m13 = m12;
   v5 = v4;
-  return float2(dot(m13.mx, v5), dot(m13.my, v5));
+  const Mat4x2_ x_e4 = m13;
+  const float4 x_e6 = v5;
+  const Mat4x2_ x_e8 = m13;
+  const float4 x_e10 = v5;
+  return float2(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10));
 }
 
 float4 Mul3(float3 v6, Mat4x3_ m14) {
@@ -90,25 +120,35 @@
   Mat4x3_ m15 = (Mat4x3_)0;
   v7 = v6;
   m15 = m14;
-  const float3 x_e6 = Mat4x3GetCol0_(m15);
+  const Mat4x3_ x_e5 = m15;
+  const float3 x_e6 = Mat4x3GetCol0_(x_e5);
   const float3 x_e7 = v7;
-  const float3 x_e11 = Mat4x3GetCol1_(m15);
+  const Mat4x3_ x_e10 = m15;
+  const float3 x_e11 = Mat4x3GetCol1_(x_e10);
   const float3 x_e12 = v7;
-  const float3 x_e16 = Mat4x3GetCol2_(m15);
+  const Mat4x3_ x_e15 = m15;
+  const float3 x_e16 = Mat4x3GetCol2_(x_e15);
   const float3 x_e17 = v7;
-  const float3 x_e21 = Mat4x3GetCol3_(m15);
-  return float4(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, v7));
+  const Mat4x3_ x_e20 = m15;
+  const float3 x_e21 = Mat4x3GetCol3_(x_e20);
+  const float3 x_e22 = v7;
+  return float4(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, x_e22));
 }
 
 Mat4x4_ x_Mat4x4_(float n) {
   float n1 = 0.0f;
   Mat4x4_ o = (Mat4x4_)0;
   n1 = n;
-  o.mx = float4(n1, 0.0f, 0.0f, 0.0f);
-  o.my = float4(0.0f, n1, 0.0f, 0.0f);
-  o.mz = float4(0.0f, 0.0f, n1, 0.0f);
-  o.mw = float4(0.0f, 0.0f, 0.0f, n1);
-  return o;
+  const float x_e4 = n1;
+  o.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
+  const float x_e11 = n1;
+  o.my = float4(0.0f, x_e11, 0.0f, 0.0f);
+  const float x_e18 = n1;
+  o.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
+  const float x_e25 = n1;
+  o.mw = float4(0.0f, 0.0f, 0.0f, x_e25);
+  const Mat4x4_ x_e27 = o;
+  return x_e27;
 }
 
 Mat4x4_ x_Mat4x4_1(Mat4x3_ m16) {
@@ -117,10 +157,14 @@
   m17 = m16;
   const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
   o1 = x_e4;
-  o1.mx = m17.mx;
-  o1.my = m17.my;
-  o1.mz = m17.mz;
-  return o1;
+  const Mat4x3_ x_e7 = m17;
+  o1.mx = x_e7.mx;
+  const Mat4x3_ x_e10 = m17;
+  o1.my = x_e10.my;
+  const Mat4x3_ x_e13 = m17;
+  o1.mz = x_e13.mz;
+  const Mat4x4_ x_e15 = o1;
+  return x_e15;
 }
 
 Mat4x4_ x_Mat4x4_2(Mat4x2_ m18) {
@@ -129,29 +173,40 @@
   m19 = m18;
   const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
   o2 = x_e4;
-  o2.mx = m19.mx;
-  o2.my = m19.my;
-  return o2;
+  const Mat4x2_ x_e7 = m19;
+  o2.mx = x_e7.mx;
+  const Mat4x2_ x_e10 = m19;
+  o2.my = x_e10.my;
+  const Mat4x4_ x_e12 = o2;
+  return x_e12;
 }
 
 Mat4x3_ x_Mat4x3_(float n2) {
   float n3 = 0.0f;
   Mat4x3_ o3 = (Mat4x3_)0;
   n3 = n2;
-  o3.mx = float4(n3, 0.0f, 0.0f, 0.0f);
-  o3.my = float4(0.0f, n3, 0.0f, 0.0f);
-  o3.mz = float4(0.0f, 0.0f, n3, 0.0f);
-  return o3;
+  const float x_e4 = n3;
+  o3.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
+  const float x_e11 = n3;
+  o3.my = float4(0.0f, x_e11, 0.0f, 0.0f);
+  const float x_e18 = n3;
+  o3.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
+  const Mat4x3_ x_e21 = o3;
+  return x_e21;
 }
 
 Mat4x3_ x_Mat4x3_1(Mat4x4_ m20) {
   Mat4x4_ m21 = (Mat4x4_)0;
   Mat4x3_ o4 = (Mat4x3_)0;
   m21 = m20;
-  o4.mx = m21.mx;
-  o4.my = m21.my;
-  o4.mz = m21.mz;
-  return o4;
+  const Mat4x4_ x_e4 = m21;
+  o4.mx = x_e4.mx;
+  const Mat4x4_ x_e7 = m21;
+  o4.my = x_e7.my;
+  const Mat4x4_ x_e10 = m21;
+  o4.mz = x_e10.mz;
+  const Mat4x3_ x_e12 = o4;
+  return x_e12;
 }
 
 Mat4x3_ tint_symbol_3(uint4 buffer[96], uint offset) {
@@ -181,26 +236,35 @@
 void main1() {
   Mat4x3_ t_PosMtx = (Mat4x3_)0;
   float2 t_TexSpaceCoord = float2(0.0f, 0.0f);
-  const Mat4x3_ x_e18 = tint_symbol_3(global2, (48u * uint(int(a_PosMtxIdx1))));
+  const float x_e15 = a_PosMtxIdx1;
+  const Mat4x3_ x_e18 = tint_symbol_3(global2, (48u * uint(int(x_e15))));
   t_PosMtx = x_e18;
-  const Mat4x4_ x_e24 = x_Mat4x4_1(t_PosMtx);
+  const Mat4x3_ x_e23 = t_PosMtx;
+  const Mat4x4_ x_e24 = x_Mat4x4_1(x_e23);
   const float3 x_e25 = a_Position1;
-  const Mat4x4_ x_e30 = x_Mat4x4_1(t_PosMtx);
-  const float4 x_e34 = Mul(x_e30, float4(a_Position1, 1.0f));
+  const Mat4x3_ x_e29 = t_PosMtx;
+  const Mat4x4_ x_e30 = x_Mat4x4_1(x_e29);
+  const float3 x_e31 = a_Position1;
+  const float4 x_e34 = Mul(x_e30, float4(x_e31, 1.0f));
   const Mat4x4_ x_e35 = tint_symbol_5(global, 0u);
-  const Mat4x4_ x_e38 = x_Mat4x4_1(t_PosMtx);
+  const Mat4x3_ x_e37 = t_PosMtx;
+  const Mat4x4_ x_e38 = x_Mat4x4_1(x_e37);
   const float3 x_e39 = a_Position1;
-  const Mat4x4_ x_e44 = x_Mat4x4_1(t_PosMtx);
-  const float4 x_e48 = Mul(x_e44, float4(a_Position1, 1.0f));
+  const Mat4x3_ x_e43 = t_PosMtx;
+  const Mat4x4_ x_e44 = x_Mat4x4_1(x_e43);
+  const float3 x_e45 = a_Position1;
+  const float4 x_e48 = Mul(x_e44, float4(x_e45, 1.0f));
   const float4 x_e49 = Mul(x_e35, x_e48);
   gl_Position = x_e49;
-  v_Color = a_Color1;
+  const float4 x_e50 = a_Color1;
+  v_Color = x_e50;
   const float4 x_e52 = asfloat(global1[2]);
   if ((x_e52.x == 2.0f)) {
     {
       const float3 x_e59 = a_Normal1;
       const Mat4x2_ x_e64 = tint_symbol_8(global1, 0u);
-      const float2 x_e68 = Mul2(x_e64, float4(a_Normal1, 1.0f));
+      const float3 x_e65 = a_Normal1;
+      const float2 x_e68 = Mul2(x_e64, float4(x_e65, 1.0f));
       v_TexCoord = x_e68.xy;
       return;
     }
@@ -208,7 +272,8 @@
     {
       const float2 x_e73 = a_UV1;
       const Mat4x2_ x_e79 = tint_symbol_8(global1, 0u);
-      const float2 x_e84 = Mul2(x_e79, float4(a_UV1, 1.0f, 1.0f));
+      const float2 x_e80 = a_UV1;
+      const float2 x_e84 = Mul2(x_e79, float4(x_e80, 1.0f, 1.0f));
       v_TexCoord = x_e84.xy;
       return;
     }
@@ -235,7 +300,10 @@
   a_Normal1 = a_Normal;
   a_PosMtxIdx1 = a_PosMtxIdx;
   main1();
-  const VertexOutput tint_symbol_12 = {v_Color, v_TexCoord, gl_Position};
+  const float4 x_e11 = v_Color;
+  const float2 x_e13 = v_TexCoord;
+  const float4 x_e15 = gl_Position;
+  const VertexOutput tint_symbol_12 = {x_e11, x_e13, x_e15};
   return tint_symbol_12;
 }
 
diff --git a/test/tint/bug/tint/922.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/922.wgsl.expected.fxc.hlsl
index 0185fae..c57e915 100644
--- a/test/tint/bug/tint/922.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/922.wgsl.expected.fxc.hlsl
@@ -40,25 +40,37 @@
 float3 Mat4x3GetCol0_(Mat4x3_ m) {
   Mat4x3_ m1 = (Mat4x3_)0;
   m1 = m;
-  return float3(m1.mx.x, m1.my.x, m1.mz.x);
+  const Mat4x3_ x_e2 = m1;
+  const Mat4x3_ x_e5 = m1;
+  const Mat4x3_ x_e8 = m1;
+  return float3(x_e2.mx.x, x_e5.my.x, x_e8.mz.x);
 }
 
 float3 Mat4x3GetCol1_(Mat4x3_ m2) {
   Mat4x3_ m3 = (Mat4x3_)0;
   m3 = m2;
-  return float3(m3.mx.y, m3.my.y, m3.mz.y);
+  const Mat4x3_ x_e2 = m3;
+  const Mat4x3_ x_e5 = m3;
+  const Mat4x3_ x_e8 = m3;
+  return float3(x_e2.mx.y, x_e5.my.y, x_e8.mz.y);
 }
 
 float3 Mat4x3GetCol2_(Mat4x3_ m4) {
   Mat4x3_ m5 = (Mat4x3_)0;
   m5 = m4;
-  return float3(m5.mx.z, m5.my.z, m5.mz.z);
+  const Mat4x3_ x_e2 = m5;
+  const Mat4x3_ x_e5 = m5;
+  const Mat4x3_ x_e8 = m5;
+  return float3(x_e2.mx.z, x_e5.my.z, x_e8.mz.z);
 }
 
 float3 Mat4x3GetCol3_(Mat4x3_ m6) {
   Mat4x3_ m7 = (Mat4x3_)0;
   m7 = m6;
-  return float3(m7.mx.w, m7.my.w, m7.mz.w);
+  const Mat4x3_ x_e2 = m7;
+  const Mat4x3_ x_e5 = m7;
+  const Mat4x3_ x_e8 = m7;
+  return float3(x_e2.mx.w, x_e5.my.w, x_e8.mz.w);
 }
 
 float4 Mul(Mat4x4_ m8, float4 v) {
@@ -66,7 +78,15 @@
   float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
   m9 = m8;
   v1 = v;
-  return float4(dot(m9.mx, v1), dot(m9.my, v1), dot(m9.mz, v1), dot(m9.mw, v1));
+  const Mat4x4_ x_e4 = m9;
+  const float4 x_e6 = v1;
+  const Mat4x4_ x_e8 = m9;
+  const float4 x_e10 = v1;
+  const Mat4x4_ x_e12 = m9;
+  const float4 x_e14 = v1;
+  const Mat4x4_ x_e16 = m9;
+  const float4 x_e18 = v1;
+  return float4(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18));
 }
 
 float3 Mul1(Mat4x3_ m10, float4 v2) {
@@ -74,7 +94,13 @@
   float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
   m11 = m10;
   v3 = v2;
-  return float3(dot(m11.mx, v3), dot(m11.my, v3), dot(m11.mz, v3));
+  const Mat4x3_ x_e4 = m11;
+  const float4 x_e6 = v3;
+  const Mat4x3_ x_e8 = m11;
+  const float4 x_e10 = v3;
+  const Mat4x3_ x_e12 = m11;
+  const float4 x_e14 = v3;
+  return float3(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14));
 }
 
 float2 Mul2(Mat4x2_ m12, float4 v4) {
@@ -82,7 +108,11 @@
   float4 v5 = float4(0.0f, 0.0f, 0.0f, 0.0f);
   m13 = m12;
   v5 = v4;
-  return float2(dot(m13.mx, v5), dot(m13.my, v5));
+  const Mat4x2_ x_e4 = m13;
+  const float4 x_e6 = v5;
+  const Mat4x2_ x_e8 = m13;
+  const float4 x_e10 = v5;
+  return float2(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10));
 }
 
 float4 Mul3(float3 v6, Mat4x3_ m14) {
@@ -90,25 +120,35 @@
   Mat4x3_ m15 = (Mat4x3_)0;
   v7 = v6;
   m15 = m14;
-  const float3 x_e6 = Mat4x3GetCol0_(m15);
+  const Mat4x3_ x_e5 = m15;
+  const float3 x_e6 = Mat4x3GetCol0_(x_e5);
   const float3 x_e7 = v7;
-  const float3 x_e11 = Mat4x3GetCol1_(m15);
+  const Mat4x3_ x_e10 = m15;
+  const float3 x_e11 = Mat4x3GetCol1_(x_e10);
   const float3 x_e12 = v7;
-  const float3 x_e16 = Mat4x3GetCol2_(m15);
+  const Mat4x3_ x_e15 = m15;
+  const float3 x_e16 = Mat4x3GetCol2_(x_e15);
   const float3 x_e17 = v7;
-  const float3 x_e21 = Mat4x3GetCol3_(m15);
-  return float4(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, v7));
+  const Mat4x3_ x_e20 = m15;
+  const float3 x_e21 = Mat4x3GetCol3_(x_e20);
+  const float3 x_e22 = v7;
+  return float4(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, x_e22));
 }
 
 Mat4x4_ x_Mat4x4_(float n) {
   float n1 = 0.0f;
   Mat4x4_ o = (Mat4x4_)0;
   n1 = n;
-  o.mx = float4(n1, 0.0f, 0.0f, 0.0f);
-  o.my = float4(0.0f, n1, 0.0f, 0.0f);
-  o.mz = float4(0.0f, 0.0f, n1, 0.0f);
-  o.mw = float4(0.0f, 0.0f, 0.0f, n1);
-  return o;
+  const float x_e4 = n1;
+  o.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
+  const float x_e11 = n1;
+  o.my = float4(0.0f, x_e11, 0.0f, 0.0f);
+  const float x_e18 = n1;
+  o.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
+  const float x_e25 = n1;
+  o.mw = float4(0.0f, 0.0f, 0.0f, x_e25);
+  const Mat4x4_ x_e27 = o;
+  return x_e27;
 }
 
 Mat4x4_ x_Mat4x4_1(Mat4x3_ m16) {
@@ -117,10 +157,14 @@
   m17 = m16;
   const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
   o1 = x_e4;
-  o1.mx = m17.mx;
-  o1.my = m17.my;
-  o1.mz = m17.mz;
-  return o1;
+  const Mat4x3_ x_e7 = m17;
+  o1.mx = x_e7.mx;
+  const Mat4x3_ x_e10 = m17;
+  o1.my = x_e10.my;
+  const Mat4x3_ x_e13 = m17;
+  o1.mz = x_e13.mz;
+  const Mat4x4_ x_e15 = o1;
+  return x_e15;
 }
 
 Mat4x4_ x_Mat4x4_2(Mat4x2_ m18) {
@@ -129,29 +173,40 @@
   m19 = m18;
   const Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
   o2 = x_e4;
-  o2.mx = m19.mx;
-  o2.my = m19.my;
-  return o2;
+  const Mat4x2_ x_e7 = m19;
+  o2.mx = x_e7.mx;
+  const Mat4x2_ x_e10 = m19;
+  o2.my = x_e10.my;
+  const Mat4x4_ x_e12 = o2;
+  return x_e12;
 }
 
 Mat4x3_ x_Mat4x3_(float n2) {
   float n3 = 0.0f;
   Mat4x3_ o3 = (Mat4x3_)0;
   n3 = n2;
-  o3.mx = float4(n3, 0.0f, 0.0f, 0.0f);
-  o3.my = float4(0.0f, n3, 0.0f, 0.0f);
-  o3.mz = float4(0.0f, 0.0f, n3, 0.0f);
-  return o3;
+  const float x_e4 = n3;
+  o3.mx = float4(x_e4, 0.0f, 0.0f, 0.0f);
+  const float x_e11 = n3;
+  o3.my = float4(0.0f, x_e11, 0.0f, 0.0f);
+  const float x_e18 = n3;
+  o3.mz = float4(0.0f, 0.0f, x_e18, 0.0f);
+  const Mat4x3_ x_e21 = o3;
+  return x_e21;
 }
 
 Mat4x3_ x_Mat4x3_1(Mat4x4_ m20) {
   Mat4x4_ m21 = (Mat4x4_)0;
   Mat4x3_ o4 = (Mat4x3_)0;
   m21 = m20;
-  o4.mx = m21.mx;
-  o4.my = m21.my;
-  o4.mz = m21.mz;
-  return o4;
+  const Mat4x4_ x_e4 = m21;
+  o4.mx = x_e4.mx;
+  const Mat4x4_ x_e7 = m21;
+  o4.my = x_e7.my;
+  const Mat4x4_ x_e10 = m21;
+  o4.mz = x_e10.mz;
+  const Mat4x3_ x_e12 = o4;
+  return x_e12;
 }
 
 Mat4x3_ tint_symbol_3(uint4 buffer[96], uint offset) {
@@ -181,26 +236,35 @@
 void main1() {
   Mat4x3_ t_PosMtx = (Mat4x3_)0;
   float2 t_TexSpaceCoord = float2(0.0f, 0.0f);
-  const Mat4x3_ x_e18 = tint_symbol_3(global2, (48u * uint(int(a_PosMtxIdx1))));
+  const float x_e15 = a_PosMtxIdx1;
+  const Mat4x3_ x_e18 = tint_symbol_3(global2, (48u * uint(int(x_e15))));
   t_PosMtx = x_e18;
-  const Mat4x4_ x_e24 = x_Mat4x4_1(t_PosMtx);
+  const Mat4x3_ x_e23 = t_PosMtx;
+  const Mat4x4_ x_e24 = x_Mat4x4_1(x_e23);
   const float3 x_e25 = a_Position1;
-  const Mat4x4_ x_e30 = x_Mat4x4_1(t_PosMtx);
-  const float4 x_e34 = Mul(x_e30, float4(a_Position1, 1.0f));
+  const Mat4x3_ x_e29 = t_PosMtx;
+  const Mat4x4_ x_e30 = x_Mat4x4_1(x_e29);
+  const float3 x_e31 = a_Position1;
+  const float4 x_e34 = Mul(x_e30, float4(x_e31, 1.0f));
   const Mat4x4_ x_e35 = tint_symbol_5(global, 0u);
-  const Mat4x4_ x_e38 = x_Mat4x4_1(t_PosMtx);
+  const Mat4x3_ x_e37 = t_PosMtx;
+  const Mat4x4_ x_e38 = x_Mat4x4_1(x_e37);
   const float3 x_e39 = a_Position1;
-  const Mat4x4_ x_e44 = x_Mat4x4_1(t_PosMtx);
-  const float4 x_e48 = Mul(x_e44, float4(a_Position1, 1.0f));
+  const Mat4x3_ x_e43 = t_PosMtx;
+  const Mat4x4_ x_e44 = x_Mat4x4_1(x_e43);
+  const float3 x_e45 = a_Position1;
+  const float4 x_e48 = Mul(x_e44, float4(x_e45, 1.0f));
   const float4 x_e49 = Mul(x_e35, x_e48);
   gl_Position = x_e49;
-  v_Color = a_Color1;
+  const float4 x_e50 = a_Color1;
+  v_Color = x_e50;
   const float4 x_e52 = asfloat(global1[2]);
   if ((x_e52.x == 2.0f)) {
     {
       const float3 x_e59 = a_Normal1;
       const Mat4x2_ x_e64 = tint_symbol_8(global1, 0u);
-      const float2 x_e68 = Mul2(x_e64, float4(a_Normal1, 1.0f));
+      const float3 x_e65 = a_Normal1;
+      const float2 x_e68 = Mul2(x_e64, float4(x_e65, 1.0f));
       v_TexCoord = x_e68.xy;
       return;
     }
@@ -208,7 +272,8 @@
     {
       const float2 x_e73 = a_UV1;
       const Mat4x2_ x_e79 = tint_symbol_8(global1, 0u);
-      const float2 x_e84 = Mul2(x_e79, float4(a_UV1, 1.0f, 1.0f));
+      const float2 x_e80 = a_UV1;
+      const float2 x_e84 = Mul2(x_e79, float4(x_e80, 1.0f, 1.0f));
       v_TexCoord = x_e84.xy;
       return;
     }
@@ -235,7 +300,10 @@
   a_Normal1 = a_Normal;
   a_PosMtxIdx1 = a_PosMtxIdx;
   main1();
-  const VertexOutput tint_symbol_12 = {v_Color, v_TexCoord, gl_Position};
+  const float4 x_e11 = v_Color;
+  const float2 x_e13 = v_TexCoord;
+  const float4 x_e15 = gl_Position;
+  const VertexOutput tint_symbol_12 = {x_e11, x_e13, x_e15};
   return tint_symbol_12;
 }
 
diff --git a/test/tint/bug/tint/922.wgsl.expected.glsl b/test/tint/bug/tint/922.wgsl.expected.glsl
index 351b258..9736cc5 100644
--- a/test/tint/bug/tint/922.wgsl.expected.glsl
+++ b/test/tint/bug/tint/922.wgsl.expected.glsl
@@ -57,7 +57,15 @@
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   m9 = m8;
   v1 = v;
-  return vec4(dot(m9.mx, v1), dot(m9.my, v1), dot(m9.mz, v1), dot(m9.mw, v1));
+  Mat4x4_ x_e4 = m9;
+  vec4 x_e6 = v1;
+  Mat4x4_ x_e8 = m9;
+  vec4 x_e10 = v1;
+  Mat4x4_ x_e12 = m9;
+  vec4 x_e14 = v1;
+  Mat4x4_ x_e16 = m9;
+  vec4 x_e18 = v1;
+  return vec4(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18));
 }
 
 vec2 Mul2(Mat4x2_ m12, vec4 v4) {
@@ -65,18 +73,27 @@
   vec4 v5 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   m13 = m12;
   v5 = v4;
-  return vec2(dot(m13.mx, v5), dot(m13.my, v5));
+  Mat4x2_ x_e4 = m13;
+  vec4 x_e6 = v5;
+  Mat4x2_ x_e8 = m13;
+  vec4 x_e10 = v5;
+  return vec2(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10));
 }
 
 Mat4x4_ x_Mat4x4_(float n) {
   float n1 = 0.0f;
   Mat4x4_ o = Mat4x4_(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
   n1 = n;
-  o.mx = vec4(n1, 0.0f, 0.0f, 0.0f);
-  o.my = vec4(0.0f, n1, 0.0f, 0.0f);
-  o.mz = vec4(0.0f, 0.0f, n1, 0.0f);
-  o.mw = vec4(0.0f, 0.0f, 0.0f, n1);
-  return o;
+  float x_e4 = n1;
+  o.mx = vec4(x_e4, 0.0f, 0.0f, 0.0f);
+  float x_e11 = n1;
+  o.my = vec4(0.0f, x_e11, 0.0f, 0.0f);
+  float x_e18 = n1;
+  o.mz = vec4(0.0f, 0.0f, x_e18, 0.0f);
+  float x_e25 = n1;
+  o.mw = vec4(0.0f, 0.0f, 0.0f, x_e25);
+  Mat4x4_ x_e27 = o;
+  return x_e27;
 }
 
 Mat4x4_ x_Mat4x4_1(Mat4x3_ m16) {
@@ -85,35 +102,48 @@
   m17 = m16;
   Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
   o1 = x_e4;
-  o1.mx = m17.mx;
-  o1.my = m17.my;
-  o1.mz = m17.mz;
-  return o1;
+  Mat4x3_ x_e7 = m17;
+  o1.mx = x_e7.mx;
+  Mat4x3_ x_e10 = m17;
+  o1.my = x_e10.my;
+  Mat4x3_ x_e13 = m17;
+  o1.mz = x_e13.mz;
+  Mat4x4_ x_e15 = o1;
+  return x_e15;
 }
 
 void main1() {
   Mat4x3_ t_PosMtx = Mat4x3_(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
   vec2 t_TexSpaceCoord = vec2(0.0f, 0.0f);
-  Mat4x3_ x_e18 = global2.u_PosMtx[int(a_PosMtxIdx1)];
+  float x_e15 = a_PosMtxIdx1;
+  Mat4x3_ x_e18 = global2.u_PosMtx[int(x_e15)];
   t_PosMtx = x_e18;
-  Mat4x4_ x_e24 = x_Mat4x4_1(t_PosMtx);
+  Mat4x3_ x_e23 = t_PosMtx;
+  Mat4x4_ x_e24 = x_Mat4x4_1(x_e23);
   vec3 x_e25 = a_Position1;
-  Mat4x4_ x_e30 = x_Mat4x4_1(t_PosMtx);
-  vec4 x_e34 = Mul(x_e30, vec4(a_Position1, 1.0f));
+  Mat4x3_ x_e29 = t_PosMtx;
+  Mat4x4_ x_e30 = x_Mat4x4_1(x_e29);
+  vec3 x_e31 = a_Position1;
+  vec4 x_e34 = Mul(x_e30, vec4(x_e31, 1.0f));
   Mat4x4_ x_e35 = global.u_Projection;
-  Mat4x4_ x_e38 = x_Mat4x4_1(t_PosMtx);
+  Mat4x3_ x_e37 = t_PosMtx;
+  Mat4x4_ x_e38 = x_Mat4x4_1(x_e37);
   vec3 x_e39 = a_Position1;
-  Mat4x4_ x_e44 = x_Mat4x4_1(t_PosMtx);
-  vec4 x_e48 = Mul(x_e44, vec4(a_Position1, 1.0f));
+  Mat4x3_ x_e43 = t_PosMtx;
+  Mat4x4_ x_e44 = x_Mat4x4_1(x_e43);
+  vec3 x_e45 = a_Position1;
+  vec4 x_e48 = Mul(x_e44, vec4(x_e45, 1.0f));
   vec4 x_e49 = Mul(x_e35, x_e48);
   tint_symbol = x_e49;
-  v_Color = a_Color1;
+  vec4 x_e50 = a_Color1;
+  v_Color = x_e50;
   vec4 x_e52 = global1.u_Misc0_;
   if ((x_e52.x == 2.0f)) {
     {
       vec3 x_e59 = a_Normal1;
       Mat4x2_ x_e64 = global1.u_TexMtx[0];
-      vec2 x_e68 = Mul2(x_e64, vec4(a_Normal1, 1.0f));
+      vec3 x_e65 = a_Normal1;
+      vec2 x_e68 = Mul2(x_e64, vec4(x_e65, 1.0f));
       v_TexCoord = x_e68.xy;
       return;
     }
@@ -121,7 +151,8 @@
     {
       vec2 x_e73 = a_UV1;
       Mat4x2_ x_e79 = global1.u_TexMtx[0];
-      vec2 x_e84 = Mul2(x_e79, vec4(a_UV1, 1.0f, 1.0f));
+      vec2 x_e80 = a_UV1;
+      vec2 x_e84 = Mul2(x_e79, vec4(x_e80, 1.0f, 1.0f));
       v_TexCoord = x_e84.xy;
       return;
     }
@@ -135,7 +166,10 @@
   a_Normal1 = a_Normal;
   a_PosMtxIdx1 = a_PosMtxIdx;
   main1();
-  VertexOutput tint_symbol_2 = VertexOutput(v_Color, v_TexCoord, tint_symbol);
+  vec4 x_e11 = v_Color;
+  vec2 x_e13 = v_TexCoord;
+  vec4 x_e15 = tint_symbol;
+  VertexOutput tint_symbol_2 = VertexOutput(x_e11, x_e13, x_e15);
   return tint_symbol_2;
 }
 
diff --git a/test/tint/bug/tint/943.spvasm.expected.dxc.hlsl b/test/tint/bug/tint/943.spvasm.expected.dxc.hlsl
index fa4c723..695618f 100644
--- a/test/tint/bug/tint/943.spvasm.expected.dxc.hlsl
+++ b/test/tint/bug/tint/943.spvasm.expected.dxc.hlsl
@@ -57,7 +57,8 @@
   } else {
     x_430 = 0.0f;
   }
-  return x_430;
+  const float x_450 = x_430;
+  return x_450;
 }
 
 float mm_readB_i1_i1_(inout int row_1, inout int col_1) {
@@ -86,7 +87,8 @@
   } else {
     x_468 = 0.0f;
   }
-  return x_468;
+  const float x_487 = x_468;
+  return x_487;
 }
 
 int getOutputFlatIndex_vi3_(inout int3 coords) {
@@ -114,7 +116,8 @@
   param = int3(x_115, x_116, x_117);
   const int x_120 = getOutputFlatIndex_vi3_(param);
   flatIndex_1 = x_120;
-  param_1 = flatIndex_1;
+  const int x_122 = flatIndex_1;
+  param_1 = x_122;
   const float x_124 = value_1;
   param_2 = x_124;
   setOutput_i1_f1_(param_1, param_2);
@@ -131,7 +134,8 @@
   const int x_492 = row_2;
   const int x_493 = col_2;
   outCoord = int3(x_491, x_492, x_493);
-  param_14 = batch;
+  const int x_496 = batch;
+  param_14 = x_496;
   const int x_498 = row_2;
   param_15 = x_498;
   const int x_500 = col_2;
@@ -188,14 +192,30 @@
   const int x_152 = dimInner;
   numTiles = (((x_152 - 1) / 64) + 1);
   innerRow = 0;
-  {
-    [loop] for(; (innerRow < 1); innerRow = (innerRow + 1)) {
-      innerCol = 0;
-      {
-        [loop] for(; (innerCol < 1); innerCol = (innerCol + 1)) {
-          acc[innerRow][innerCol] = 0.0f;
-        }
+  [loop] while (true) {
+    const int x_163 = innerRow;
+    if ((x_163 < 1)) {
+    } else {
+      break;
+    }
+    innerCol = 0;
+    [loop] while (true) {
+      const int x_171 = innerCol;
+      if ((x_171 < 1)) {
+      } else {
+        break;
       }
+      const int x_177 = innerRow;
+      const int x_178 = innerCol;
+      acc[x_177][x_178] = 0.0f;
+      {
+        const int x_181 = innerCol;
+        innerCol = (x_181 + 1);
+      }
+    }
+    {
+      const int x_183 = innerRow;
+      innerRow = (x_183 + 1);
     }
   }
   const uint x_187 = gl_LocalInvocationID.x;
@@ -203,121 +223,215 @@
   const uint x_192 = gl_LocalInvocationID.y;
   tileRowB = (asint(x_192) * 1);
   t = 0;
-  {
-    [loop] for(; (t < numTiles); t = (t + 1)) {
-      innerRow_1 = 0;
-      {
-        [loop] for(; (innerRow_1 < 1); innerRow_1 = (innerRow_1 + 1)) {
-          innerCol_1 = 0;
-          {
-            [loop] for(; (innerCol_1 < 64); innerCol_1 = (innerCol_1 + 1)) {
-              inputRow = (tileRow + innerRow_1);
-              inputCol = (tileColA + innerCol_1);
-              const int x_233 = inputRow;
-              const int x_234 = inputCol;
-              const int x_238 = t;
-              const int x_240 = inputCol;
-              param_3 = (globalRow + innerRow_1);
-              param_4 = ((x_238 * 64) + x_240);
-              const float x_244 = mm_readA_i1_i1_(param_3, param_4);
-              mm_Asub[x_233][x_234] = x_244;
-            }
-          }
-        }
-      }
-      innerRow_2 = 0;
-      {
-        [loop] for(; (innerRow_2 < 1); innerRow_2 = (innerRow_2 + 1)) {
-          innerCol_2 = 0;
-          {
-            [loop] for(; (innerCol_2 < 1); innerCol_2 = (innerCol_2 + 1)) {
-              inputRow_1 = (tileRowB + innerRow_2);
-              inputCol_1 = (tileCol + innerCol_2);
-              const int x_278 = inputRow_1;
-              const int x_279 = inputCol_1;
-              const int x_284 = globalCol;
-              const int x_285 = innerCol_2;
-              param_5 = ((t * 64) + inputRow_1);
-              param_6 = (x_284 + x_285);
-              const float x_289 = mm_readB_i1_i1_(param_5, param_6);
-              mm_Bsub[x_278][x_279] = x_289;
-            }
-          }
-        }
-      }
-      GroupMemoryBarrierWithGroupSync();
-      k = 0;
-      {
-        [loop] for(; (k < 64); k = (k + 1)) {
-          inner = 0;
-          {
-            [loop] for(; (inner < 1); inner = (inner + 1)) {
-              const int x_314 = inner;
-              const float x_320 = mm_Bsub[k][(tileCol + inner)];
-              BCached[x_314] = x_320;
-            }
-          }
-          innerRow_3 = 0;
-          {
-            [loop] for(; (innerRow_3 < 1); innerRow_3 = (innerRow_3 + 1)) {
-              const float x_338 = mm_Asub[(tileRow + innerRow_3)][k];
-              ACached = x_338;
-              innerCol_3 = 0;
-              {
-                [loop] for(; (innerCol_3 < 1); innerCol_3 = (innerCol_3 + 1)) {
-                  const int x_347 = innerRow_3;
-                  const int x_348 = innerCol_3;
-                  const float x_349 = ACached;
-                  const float x_352 = BCached[innerCol_3];
-                  const float x_355 = acc[x_347][x_348];
-                  acc[x_347][x_348] = (x_355 + (x_349 * x_352));
-                }
-              }
-            }
-          }
-        }
-      }
-      GroupMemoryBarrierWithGroupSync();
+  [loop] while (true) {
+    const int x_201 = t;
+    const int x_202 = numTiles;
+    if ((x_201 < x_202)) {
+    } else {
+      break;
     }
-  }
-  innerRow_4 = 0;
-  {
-    [loop] for(; (innerRow_4 < 1); innerRow_4 = (innerRow_4 + 1)) {
-      innerCol_4 = 0;
+    innerRow_1 = 0;
+    [loop] while (true) {
+      const int x_210 = innerRow_1;
+      if ((x_210 < 1)) {
+      } else {
+        break;
+      }
+      innerCol_1 = 0;
       [loop] while (true) {
-        bool x_393 = false;
-        bool x_394 = false;
-        if ((innerCol_4 < 1)) {
+        const int x_218 = innerCol_1;
+        if ((x_218 < 64)) {
         } else {
           break;
         }
-        const int x_382 = globalCol;
-        const int x_383 = innerCol_4;
-        const int x_385 = dimBOuter;
-        const bool x_386 = ((x_382 + x_383) < x_385);
-        x_394 = x_386;
-        if (x_386) {
-          const int x_389 = globalRow;
-          const int x_390 = innerRow_4;
-          const int x_392 = dimAOuter;
-          x_393 = ((x_389 + x_390) < x_392);
-          x_394 = x_393;
-        }
-        if (x_394) {
-          const int x_400 = globalCol;
-          const int x_401 = innerCol_4;
-          const int x_403 = innerRow_4;
-          const int x_404 = innerCol_4;
-          param_7 = (globalRow + innerRow_4);
-          param_8 = (x_400 + x_401);
-          const float x_409 = acc[x_403][x_404];
-          param_9 = x_409;
-          mm_write_i1_i1_f1_(param_7, param_8, param_9);
-        }
+        const int x_221 = tileRow;
+        const int x_222 = innerRow_1;
+        inputRow = (x_221 + x_222);
+        const int x_225 = tileColA;
+        const int x_226 = innerCol_1;
+        inputCol = (x_225 + x_226);
+        const int x_233 = inputRow;
+        const int x_234 = inputCol;
+        const int x_235 = globalRow;
+        const int x_236 = innerRow_1;
+        const int x_238 = t;
+        const int x_240 = inputCol;
+        param_3 = (x_235 + x_236);
+        param_4 = ((x_238 * 64) + x_240);
+        const float x_244 = mm_readA_i1_i1_(param_3, param_4);
+        mm_Asub[x_233][x_234] = x_244;
         {
-          innerCol_4 = (innerCol_4 + 1);
+          const int x_247 = innerCol_1;
+          innerCol_1 = (x_247 + 1);
         }
       }
+      {
+        const int x_249 = innerRow_1;
+        innerRow_1 = (x_249 + 1);
+      }
+    }
+    innerRow_2 = 0;
+    [loop] while (true) {
+      const int x_257 = innerRow_2;
+      if ((x_257 < 1)) {
+      } else {
+        break;
+      }
+      innerCol_2 = 0;
+      [loop] while (true) {
+        const int x_265 = innerCol_2;
+        if ((x_265 < 1)) {
+        } else {
+          break;
+        }
+        const int x_268 = tileRowB;
+        const int x_269 = innerRow_2;
+        inputRow_1 = (x_268 + x_269);
+        const int x_272 = tileCol;
+        const int x_273 = innerCol_2;
+        inputCol_1 = (x_272 + x_273);
+        const int x_278 = inputRow_1;
+        const int x_279 = inputCol_1;
+        const int x_280 = t;
+        const int x_282 = inputRow_1;
+        const int x_284 = globalCol;
+        const int x_285 = innerCol_2;
+        param_5 = ((x_280 * 64) + x_282);
+        param_6 = (x_284 + x_285);
+        const float x_289 = mm_readB_i1_i1_(param_5, param_6);
+        mm_Bsub[x_278][x_279] = x_289;
+        {
+          const int x_291 = innerCol_2;
+          innerCol_2 = (x_291 + 1);
+        }
+      }
+      {
+        const int x_293 = innerRow_2;
+        innerRow_2 = (x_293 + 1);
+      }
+    }
+    GroupMemoryBarrierWithGroupSync();
+    k = 0;
+    [loop] while (true) {
+      const int x_302 = k;
+      if ((x_302 < 64)) {
+      } else {
+        break;
+      }
+      inner = 0;
+      [loop] while (true) {
+        const int x_310 = inner;
+        if ((x_310 < 1)) {
+        } else {
+          break;
+        }
+        const int x_314 = inner;
+        const int x_315 = k;
+        const int x_316 = tileCol;
+        const int x_317 = inner;
+        const float x_320 = mm_Bsub[x_315][(x_316 + x_317)];
+        BCached[x_314] = x_320;
+        {
+          const int x_322 = inner;
+          inner = (x_322 + 1);
+        }
+      }
+      innerRow_3 = 0;
+      [loop] while (true) {
+        const int x_330 = innerRow_3;
+        if ((x_330 < 1)) {
+        } else {
+          break;
+        }
+        const int x_333 = tileRow;
+        const int x_334 = innerRow_3;
+        const int x_336 = k;
+        const float x_338 = mm_Asub[(x_333 + x_334)][x_336];
+        ACached = x_338;
+        innerCol_3 = 0;
+        [loop] while (true) {
+          const int x_345 = innerCol_3;
+          if ((x_345 < 1)) {
+          } else {
+            break;
+          }
+          const int x_347 = innerRow_3;
+          const int x_348 = innerCol_3;
+          const float x_349 = ACached;
+          const int x_350 = innerCol_3;
+          const float x_352 = BCached[x_350];
+          const float x_355 = acc[x_347][x_348];
+          acc[x_347][x_348] = (x_355 + (x_349 * x_352));
+          {
+            const int x_358 = innerCol_3;
+            innerCol_3 = (x_358 + 1);
+          }
+        }
+        {
+          const int x_360 = innerRow_3;
+          innerRow_3 = (x_360 + 1);
+        }
+      }
+      {
+        const int x_362 = k;
+        k = (x_362 + 1);
+      }
+    }
+    GroupMemoryBarrierWithGroupSync();
+    {
+      const int x_364 = t;
+      t = (x_364 + 1);
+    }
+  }
+  innerRow_4 = 0;
+  [loop] while (true) {
+    const int x_372 = innerRow_4;
+    if ((x_372 < 1)) {
+    } else {
+      break;
+    }
+    innerCol_4 = 0;
+    [loop] while (true) {
+      bool x_393 = false;
+      bool x_394 = false;
+      const int x_380 = innerCol_4;
+      if ((x_380 < 1)) {
+      } else {
+        break;
+      }
+      const int x_382 = globalCol;
+      const int x_383 = innerCol_4;
+      const int x_385 = dimBOuter;
+      const bool x_386 = ((x_382 + x_383) < x_385);
+      x_394 = x_386;
+      if (x_386) {
+        const int x_389 = globalRow;
+        const int x_390 = innerRow_4;
+        const int x_392 = dimAOuter;
+        x_393 = ((x_389 + x_390) < x_392);
+        x_394 = x_393;
+      }
+      if (x_394) {
+        const int x_397 = globalRow;
+        const int x_398 = innerRow_4;
+        const int x_400 = globalCol;
+        const int x_401 = innerCol_4;
+        const int x_403 = innerRow_4;
+        const int x_404 = innerCol_4;
+        param_7 = (x_397 + x_398);
+        param_8 = (x_400 + x_401);
+        const float x_409 = acc[x_403][x_404];
+        param_9 = x_409;
+        mm_write_i1_i1_f1_(param_7, param_8, param_9);
+      }
+      {
+        const int x_411 = innerCol_4;
+        innerCol_4 = (x_411 + 1);
+      }
+    }
+    {
+      const int x_413 = innerRow_4;
+      innerRow_4 = (x_413 + 1);
     }
   }
   return;
@@ -335,9 +449,12 @@
   dimBOuter_1 = x_75;
   const uint x_505 = gl_GlobalInvocationID.z;
   batch = asint(x_505);
-  param_18 = dimAOuter_1;
-  param_19 = dimInner_1;
-  param_20 = dimBOuter_1;
+  const int x_508 = dimAOuter_1;
+  param_18 = x_508;
+  const int x_510 = dimInner_1;
+  param_19 = x_510;
+  const int x_512 = dimBOuter_1;
+  param_20 = x_512;
   mm_matMul_i1_i1_i1_(param_18, param_19, param_20);
   return;
 }
diff --git a/test/tint/bug/tint/943.spvasm.expected.fxc.hlsl b/test/tint/bug/tint/943.spvasm.expected.fxc.hlsl
index fa4c723..695618f 100644
--- a/test/tint/bug/tint/943.spvasm.expected.fxc.hlsl
+++ b/test/tint/bug/tint/943.spvasm.expected.fxc.hlsl
@@ -57,7 +57,8 @@
   } else {
     x_430 = 0.0f;
   }
-  return x_430;
+  const float x_450 = x_430;
+  return x_450;
 }
 
 float mm_readB_i1_i1_(inout int row_1, inout int col_1) {
@@ -86,7 +87,8 @@
   } else {
     x_468 = 0.0f;
   }
-  return x_468;
+  const float x_487 = x_468;
+  return x_487;
 }
 
 int getOutputFlatIndex_vi3_(inout int3 coords) {
@@ -114,7 +116,8 @@
   param = int3(x_115, x_116, x_117);
   const int x_120 = getOutputFlatIndex_vi3_(param);
   flatIndex_1 = x_120;
-  param_1 = flatIndex_1;
+  const int x_122 = flatIndex_1;
+  param_1 = x_122;
   const float x_124 = value_1;
   param_2 = x_124;
   setOutput_i1_f1_(param_1, param_2);
@@ -131,7 +134,8 @@
   const int x_492 = row_2;
   const int x_493 = col_2;
   outCoord = int3(x_491, x_492, x_493);
-  param_14 = batch;
+  const int x_496 = batch;
+  param_14 = x_496;
   const int x_498 = row_2;
   param_15 = x_498;
   const int x_500 = col_2;
@@ -188,14 +192,30 @@
   const int x_152 = dimInner;
   numTiles = (((x_152 - 1) / 64) + 1);
   innerRow = 0;
-  {
-    [loop] for(; (innerRow < 1); innerRow = (innerRow + 1)) {
-      innerCol = 0;
-      {
-        [loop] for(; (innerCol < 1); innerCol = (innerCol + 1)) {
-          acc[innerRow][innerCol] = 0.0f;
-        }
+  [loop] while (true) {
+    const int x_163 = innerRow;
+    if ((x_163 < 1)) {
+    } else {
+      break;
+    }
+    innerCol = 0;
+    [loop] while (true) {
+      const int x_171 = innerCol;
+      if ((x_171 < 1)) {
+      } else {
+        break;
       }
+      const int x_177 = innerRow;
+      const int x_178 = innerCol;
+      acc[x_177][x_178] = 0.0f;
+      {
+        const int x_181 = innerCol;
+        innerCol = (x_181 + 1);
+      }
+    }
+    {
+      const int x_183 = innerRow;
+      innerRow = (x_183 + 1);
     }
   }
   const uint x_187 = gl_LocalInvocationID.x;
@@ -203,121 +223,215 @@
   const uint x_192 = gl_LocalInvocationID.y;
   tileRowB = (asint(x_192) * 1);
   t = 0;
-  {
-    [loop] for(; (t < numTiles); t = (t + 1)) {
-      innerRow_1 = 0;
-      {
-        [loop] for(; (innerRow_1 < 1); innerRow_1 = (innerRow_1 + 1)) {
-          innerCol_1 = 0;
-          {
-            [loop] for(; (innerCol_1 < 64); innerCol_1 = (innerCol_1 + 1)) {
-              inputRow = (tileRow + innerRow_1);
-              inputCol = (tileColA + innerCol_1);
-              const int x_233 = inputRow;
-              const int x_234 = inputCol;
-              const int x_238 = t;
-              const int x_240 = inputCol;
-              param_3 = (globalRow + innerRow_1);
-              param_4 = ((x_238 * 64) + x_240);
-              const float x_244 = mm_readA_i1_i1_(param_3, param_4);
-              mm_Asub[x_233][x_234] = x_244;
-            }
-          }
-        }
-      }
-      innerRow_2 = 0;
-      {
-        [loop] for(; (innerRow_2 < 1); innerRow_2 = (innerRow_2 + 1)) {
-          innerCol_2 = 0;
-          {
-            [loop] for(; (innerCol_2 < 1); innerCol_2 = (innerCol_2 + 1)) {
-              inputRow_1 = (tileRowB + innerRow_2);
-              inputCol_1 = (tileCol + innerCol_2);
-              const int x_278 = inputRow_1;
-              const int x_279 = inputCol_1;
-              const int x_284 = globalCol;
-              const int x_285 = innerCol_2;
-              param_5 = ((t * 64) + inputRow_1);
-              param_6 = (x_284 + x_285);
-              const float x_289 = mm_readB_i1_i1_(param_5, param_6);
-              mm_Bsub[x_278][x_279] = x_289;
-            }
-          }
-        }
-      }
-      GroupMemoryBarrierWithGroupSync();
-      k = 0;
-      {
-        [loop] for(; (k < 64); k = (k + 1)) {
-          inner = 0;
-          {
-            [loop] for(; (inner < 1); inner = (inner + 1)) {
-              const int x_314 = inner;
-              const float x_320 = mm_Bsub[k][(tileCol + inner)];
-              BCached[x_314] = x_320;
-            }
-          }
-          innerRow_3 = 0;
-          {
-            [loop] for(; (innerRow_3 < 1); innerRow_3 = (innerRow_3 + 1)) {
-              const float x_338 = mm_Asub[(tileRow + innerRow_3)][k];
-              ACached = x_338;
-              innerCol_3 = 0;
-              {
-                [loop] for(; (innerCol_3 < 1); innerCol_3 = (innerCol_3 + 1)) {
-                  const int x_347 = innerRow_3;
-                  const int x_348 = innerCol_3;
-                  const float x_349 = ACached;
-                  const float x_352 = BCached[innerCol_3];
-                  const float x_355 = acc[x_347][x_348];
-                  acc[x_347][x_348] = (x_355 + (x_349 * x_352));
-                }
-              }
-            }
-          }
-        }
-      }
-      GroupMemoryBarrierWithGroupSync();
+  [loop] while (true) {
+    const int x_201 = t;
+    const int x_202 = numTiles;
+    if ((x_201 < x_202)) {
+    } else {
+      break;
     }
-  }
-  innerRow_4 = 0;
-  {
-    [loop] for(; (innerRow_4 < 1); innerRow_4 = (innerRow_4 + 1)) {
-      innerCol_4 = 0;
+    innerRow_1 = 0;
+    [loop] while (true) {
+      const int x_210 = innerRow_1;
+      if ((x_210 < 1)) {
+      } else {
+        break;
+      }
+      innerCol_1 = 0;
       [loop] while (true) {
-        bool x_393 = false;
-        bool x_394 = false;
-        if ((innerCol_4 < 1)) {
+        const int x_218 = innerCol_1;
+        if ((x_218 < 64)) {
         } else {
           break;
         }
-        const int x_382 = globalCol;
-        const int x_383 = innerCol_4;
-        const int x_385 = dimBOuter;
-        const bool x_386 = ((x_382 + x_383) < x_385);
-        x_394 = x_386;
-        if (x_386) {
-          const int x_389 = globalRow;
-          const int x_390 = innerRow_4;
-          const int x_392 = dimAOuter;
-          x_393 = ((x_389 + x_390) < x_392);
-          x_394 = x_393;
-        }
-        if (x_394) {
-          const int x_400 = globalCol;
-          const int x_401 = innerCol_4;
-          const int x_403 = innerRow_4;
-          const int x_404 = innerCol_4;
-          param_7 = (globalRow + innerRow_4);
-          param_8 = (x_400 + x_401);
-          const float x_409 = acc[x_403][x_404];
-          param_9 = x_409;
-          mm_write_i1_i1_f1_(param_7, param_8, param_9);
-        }
+        const int x_221 = tileRow;
+        const int x_222 = innerRow_1;
+        inputRow = (x_221 + x_222);
+        const int x_225 = tileColA;
+        const int x_226 = innerCol_1;
+        inputCol = (x_225 + x_226);
+        const int x_233 = inputRow;
+        const int x_234 = inputCol;
+        const int x_235 = globalRow;
+        const int x_236 = innerRow_1;
+        const int x_238 = t;
+        const int x_240 = inputCol;
+        param_3 = (x_235 + x_236);
+        param_4 = ((x_238 * 64) + x_240);
+        const float x_244 = mm_readA_i1_i1_(param_3, param_4);
+        mm_Asub[x_233][x_234] = x_244;
         {
-          innerCol_4 = (innerCol_4 + 1);
+          const int x_247 = innerCol_1;
+          innerCol_1 = (x_247 + 1);
         }
       }
+      {
+        const int x_249 = innerRow_1;
+        innerRow_1 = (x_249 + 1);
+      }
+    }
+    innerRow_2 = 0;
+    [loop] while (true) {
+      const int x_257 = innerRow_2;
+      if ((x_257 < 1)) {
+      } else {
+        break;
+      }
+      innerCol_2 = 0;
+      [loop] while (true) {
+        const int x_265 = innerCol_2;
+        if ((x_265 < 1)) {
+        } else {
+          break;
+        }
+        const int x_268 = tileRowB;
+        const int x_269 = innerRow_2;
+        inputRow_1 = (x_268 + x_269);
+        const int x_272 = tileCol;
+        const int x_273 = innerCol_2;
+        inputCol_1 = (x_272 + x_273);
+        const int x_278 = inputRow_1;
+        const int x_279 = inputCol_1;
+        const int x_280 = t;
+        const int x_282 = inputRow_1;
+        const int x_284 = globalCol;
+        const int x_285 = innerCol_2;
+        param_5 = ((x_280 * 64) + x_282);
+        param_6 = (x_284 + x_285);
+        const float x_289 = mm_readB_i1_i1_(param_5, param_6);
+        mm_Bsub[x_278][x_279] = x_289;
+        {
+          const int x_291 = innerCol_2;
+          innerCol_2 = (x_291 + 1);
+        }
+      }
+      {
+        const int x_293 = innerRow_2;
+        innerRow_2 = (x_293 + 1);
+      }
+    }
+    GroupMemoryBarrierWithGroupSync();
+    k = 0;
+    [loop] while (true) {
+      const int x_302 = k;
+      if ((x_302 < 64)) {
+      } else {
+        break;
+      }
+      inner = 0;
+      [loop] while (true) {
+        const int x_310 = inner;
+        if ((x_310 < 1)) {
+        } else {
+          break;
+        }
+        const int x_314 = inner;
+        const int x_315 = k;
+        const int x_316 = tileCol;
+        const int x_317 = inner;
+        const float x_320 = mm_Bsub[x_315][(x_316 + x_317)];
+        BCached[x_314] = x_320;
+        {
+          const int x_322 = inner;
+          inner = (x_322 + 1);
+        }
+      }
+      innerRow_3 = 0;
+      [loop] while (true) {
+        const int x_330 = innerRow_3;
+        if ((x_330 < 1)) {
+        } else {
+          break;
+        }
+        const int x_333 = tileRow;
+        const int x_334 = innerRow_3;
+        const int x_336 = k;
+        const float x_338 = mm_Asub[(x_333 + x_334)][x_336];
+        ACached = x_338;
+        innerCol_3 = 0;
+        [loop] while (true) {
+          const int x_345 = innerCol_3;
+          if ((x_345 < 1)) {
+          } else {
+            break;
+          }
+          const int x_347 = innerRow_3;
+          const int x_348 = innerCol_3;
+          const float x_349 = ACached;
+          const int x_350 = innerCol_3;
+          const float x_352 = BCached[x_350];
+          const float x_355 = acc[x_347][x_348];
+          acc[x_347][x_348] = (x_355 + (x_349 * x_352));
+          {
+            const int x_358 = innerCol_3;
+            innerCol_3 = (x_358 + 1);
+          }
+        }
+        {
+          const int x_360 = innerRow_3;
+          innerRow_3 = (x_360 + 1);
+        }
+      }
+      {
+        const int x_362 = k;
+        k = (x_362 + 1);
+      }
+    }
+    GroupMemoryBarrierWithGroupSync();
+    {
+      const int x_364 = t;
+      t = (x_364 + 1);
+    }
+  }
+  innerRow_4 = 0;
+  [loop] while (true) {
+    const int x_372 = innerRow_4;
+    if ((x_372 < 1)) {
+    } else {
+      break;
+    }
+    innerCol_4 = 0;
+    [loop] while (true) {
+      bool x_393 = false;
+      bool x_394 = false;
+      const int x_380 = innerCol_4;
+      if ((x_380 < 1)) {
+      } else {
+        break;
+      }
+      const int x_382 = globalCol;
+      const int x_383 = innerCol_4;
+      const int x_385 = dimBOuter;
+      const bool x_386 = ((x_382 + x_383) < x_385);
+      x_394 = x_386;
+      if (x_386) {
+        const int x_389 = globalRow;
+        const int x_390 = innerRow_4;
+        const int x_392 = dimAOuter;
+        x_393 = ((x_389 + x_390) < x_392);
+        x_394 = x_393;
+      }
+      if (x_394) {
+        const int x_397 = globalRow;
+        const int x_398 = innerRow_4;
+        const int x_400 = globalCol;
+        const int x_401 = innerCol_4;
+        const int x_403 = innerRow_4;
+        const int x_404 = innerCol_4;
+        param_7 = (x_397 + x_398);
+        param_8 = (x_400 + x_401);
+        const float x_409 = acc[x_403][x_404];
+        param_9 = x_409;
+        mm_write_i1_i1_f1_(param_7, param_8, param_9);
+      }
+      {
+        const int x_411 = innerCol_4;
+        innerCol_4 = (x_411 + 1);
+      }
+    }
+    {
+      const int x_413 = innerRow_4;
+      innerRow_4 = (x_413 + 1);
     }
   }
   return;
@@ -335,9 +449,12 @@
   dimBOuter_1 = x_75;
   const uint x_505 = gl_GlobalInvocationID.z;
   batch = asint(x_505);
-  param_18 = dimAOuter_1;
-  param_19 = dimInner_1;
-  param_20 = dimBOuter_1;
+  const int x_508 = dimAOuter_1;
+  param_18 = x_508;
+  const int x_510 = dimInner_1;
+  param_19 = x_510;
+  const int x_512 = dimBOuter_1;
+  param_20 = x_512;
   mm_matMul_i1_i1_i1_(param_18, param_19, param_20);
   return;
 }
diff --git a/test/tint/bug/tint/943.spvasm.expected.glsl b/test/tint/bug/tint/943.spvasm.expected.glsl
index c563931..db01f58 100644
--- a/test/tint/bug/tint/943.spvasm.expected.glsl
+++ b/test/tint/bug/tint/943.spvasm.expected.glsl
@@ -80,7 +80,8 @@
   } else {
     x_430 = 0.0f;
   }
-  return x_430;
+  float x_450 = x_430;
+  return x_450;
 }
 
 float mm_readB_i1_i1_(inout int row_1, inout int col_1) {
@@ -109,7 +110,8 @@
   } else {
     x_468 = 0.0f;
   }
-  return x_468;
+  float x_487 = x_468;
+  return x_487;
 }
 
 int getOutputFlatIndex_vi3_(inout ivec3 coords) {
@@ -137,7 +139,8 @@
   param = ivec3(x_115, x_116, x_117);
   int x_120 = getOutputFlatIndex_vi3_(param);
   flatIndex_1 = x_120;
-  param_1 = flatIndex_1;
+  int x_122 = flatIndex_1;
+  param_1 = x_122;
   float x_124 = value_1;
   param_2 = x_124;
   setOutput_i1_f1_(param_1, param_2);
@@ -154,7 +157,8 @@
   int x_492 = row_2;
   int x_493 = col_2;
   outCoord = ivec3(x_491, x_492, x_493);
-  param_14 = batch;
+  int x_496 = batch;
+  param_14 = x_496;
   int x_498 = row_2;
   param_15 = x_498;
   int x_500 = col_2;
@@ -211,14 +215,30 @@
   int x_152 = dimInner;
   numTiles = (((x_152 - 1) / 64) + 1);
   innerRow = 0;
-  {
-    for(; (innerRow < 1); innerRow = (innerRow + 1)) {
-      innerCol = 0;
-      {
-        for(; (innerCol < 1); innerCol = (innerCol + 1)) {
-          acc[innerRow][innerCol] = 0.0f;
-        }
+  while (true) {
+    int x_163 = innerRow;
+    if ((x_163 < 1)) {
+    } else {
+      break;
+    }
+    innerCol = 0;
+    while (true) {
+      int x_171 = innerCol;
+      if ((x_171 < 1)) {
+      } else {
+        break;
       }
+      int x_177 = innerRow;
+      int x_178 = innerCol;
+      acc[x_177][x_178] = 0.0f;
+      {
+        int x_181 = innerCol;
+        innerCol = (x_181 + 1);
+      }
+    }
+    {
+      int x_183 = innerRow;
+      innerRow = (x_183 + 1);
     }
   }
   uint x_187 = tint_symbol.x;
@@ -226,121 +246,215 @@
   uint x_192 = tint_symbol.y;
   tileRowB = (int(x_192) * 1);
   t = 0;
-  {
-    for(; (t < numTiles); t = (t + 1)) {
-      innerRow_1 = 0;
-      {
-        for(; (innerRow_1 < 1); innerRow_1 = (innerRow_1 + 1)) {
-          innerCol_1 = 0;
-          {
-            for(; (innerCol_1 < 64); innerCol_1 = (innerCol_1 + 1)) {
-              inputRow = (tileRow + innerRow_1);
-              inputCol = (tileColA + innerCol_1);
-              int x_233 = inputRow;
-              int x_234 = inputCol;
-              int x_238 = t;
-              int x_240 = inputCol;
-              param_3 = (globalRow + innerRow_1);
-              param_4 = ((x_238 * 64) + x_240);
-              float x_244 = mm_readA_i1_i1_(param_3, param_4);
-              mm_Asub[x_233][x_234] = x_244;
-            }
-          }
-        }
-      }
-      innerRow_2 = 0;
-      {
-        for(; (innerRow_2 < 1); innerRow_2 = (innerRow_2 + 1)) {
-          innerCol_2 = 0;
-          {
-            for(; (innerCol_2 < 1); innerCol_2 = (innerCol_2 + 1)) {
-              inputRow_1 = (tileRowB + innerRow_2);
-              inputCol_1 = (tileCol + innerCol_2);
-              int x_278 = inputRow_1;
-              int x_279 = inputCol_1;
-              int x_284 = globalCol;
-              int x_285 = innerCol_2;
-              param_5 = ((t * 64) + inputRow_1);
-              param_6 = (x_284 + x_285);
-              float x_289 = mm_readB_i1_i1_(param_5, param_6);
-              mm_Bsub[x_278][x_279] = x_289;
-            }
-          }
-        }
-      }
-      barrier();
-      k = 0;
-      {
-        for(; (k < 64); k = (k + 1)) {
-          inner = 0;
-          {
-            for(; (inner < 1); inner = (inner + 1)) {
-              int x_314 = inner;
-              float x_320 = mm_Bsub[k][(tileCol + inner)];
-              BCached[x_314] = x_320;
-            }
-          }
-          innerRow_3 = 0;
-          {
-            for(; (innerRow_3 < 1); innerRow_3 = (innerRow_3 + 1)) {
-              float x_338 = mm_Asub[(tileRow + innerRow_3)][k];
-              ACached = x_338;
-              innerCol_3 = 0;
-              {
-                for(; (innerCol_3 < 1); innerCol_3 = (innerCol_3 + 1)) {
-                  int x_347 = innerRow_3;
-                  int x_348 = innerCol_3;
-                  float x_349 = ACached;
-                  float x_352 = BCached[innerCol_3];
-                  float x_355 = acc[x_347][x_348];
-                  acc[x_347][x_348] = (x_355 + (x_349 * x_352));
-                }
-              }
-            }
-          }
-        }
-      }
-      barrier();
+  while (true) {
+    int x_201 = t;
+    int x_202 = numTiles;
+    if ((x_201 < x_202)) {
+    } else {
+      break;
     }
-  }
-  innerRow_4 = 0;
-  {
-    for(; (innerRow_4 < 1); innerRow_4 = (innerRow_4 + 1)) {
-      innerCol_4 = 0;
+    innerRow_1 = 0;
+    while (true) {
+      int x_210 = innerRow_1;
+      if ((x_210 < 1)) {
+      } else {
+        break;
+      }
+      innerCol_1 = 0;
       while (true) {
-        bool x_393 = false;
-        bool x_394 = false;
-        if ((innerCol_4 < 1)) {
+        int x_218 = innerCol_1;
+        if ((x_218 < 64)) {
         } else {
           break;
         }
-        int x_382 = globalCol;
-        int x_383 = innerCol_4;
-        int x_385 = dimBOuter;
-        bool x_386 = ((x_382 + x_383) < x_385);
-        x_394 = x_386;
-        if (x_386) {
-          int x_389 = globalRow;
-          int x_390 = innerRow_4;
-          int x_392 = dimAOuter;
-          x_393 = ((x_389 + x_390) < x_392);
-          x_394 = x_393;
-        }
-        if (x_394) {
-          int x_400 = globalCol;
-          int x_401 = innerCol_4;
-          int x_403 = innerRow_4;
-          int x_404 = innerCol_4;
-          param_7 = (globalRow + innerRow_4);
-          param_8 = (x_400 + x_401);
-          float x_409 = acc[x_403][x_404];
-          param_9 = x_409;
-          mm_write_i1_i1_f1_(param_7, param_8, param_9);
-        }
+        int x_221 = tileRow;
+        int x_222 = innerRow_1;
+        inputRow = (x_221 + x_222);
+        int x_225 = tileColA;
+        int x_226 = innerCol_1;
+        inputCol = (x_225 + x_226);
+        int x_233 = inputRow;
+        int x_234 = inputCol;
+        int x_235 = globalRow;
+        int x_236 = innerRow_1;
+        int x_238 = t;
+        int x_240 = inputCol;
+        param_3 = (x_235 + x_236);
+        param_4 = ((x_238 * 64) + x_240);
+        float x_244 = mm_readA_i1_i1_(param_3, param_4);
+        mm_Asub[x_233][x_234] = x_244;
         {
-          innerCol_4 = (innerCol_4 + 1);
+          int x_247 = innerCol_1;
+          innerCol_1 = (x_247 + 1);
         }
       }
+      {
+        int x_249 = innerRow_1;
+        innerRow_1 = (x_249 + 1);
+      }
+    }
+    innerRow_2 = 0;
+    while (true) {
+      int x_257 = innerRow_2;
+      if ((x_257 < 1)) {
+      } else {
+        break;
+      }
+      innerCol_2 = 0;
+      while (true) {
+        int x_265 = innerCol_2;
+        if ((x_265 < 1)) {
+        } else {
+          break;
+        }
+        int x_268 = tileRowB;
+        int x_269 = innerRow_2;
+        inputRow_1 = (x_268 + x_269);
+        int x_272 = tileCol;
+        int x_273 = innerCol_2;
+        inputCol_1 = (x_272 + x_273);
+        int x_278 = inputRow_1;
+        int x_279 = inputCol_1;
+        int x_280 = t;
+        int x_282 = inputRow_1;
+        int x_284 = globalCol;
+        int x_285 = innerCol_2;
+        param_5 = ((x_280 * 64) + x_282);
+        param_6 = (x_284 + x_285);
+        float x_289 = mm_readB_i1_i1_(param_5, param_6);
+        mm_Bsub[x_278][x_279] = x_289;
+        {
+          int x_291 = innerCol_2;
+          innerCol_2 = (x_291 + 1);
+        }
+      }
+      {
+        int x_293 = innerRow_2;
+        innerRow_2 = (x_293 + 1);
+      }
+    }
+    barrier();
+    k = 0;
+    while (true) {
+      int x_302 = k;
+      if ((x_302 < 64)) {
+      } else {
+        break;
+      }
+      inner = 0;
+      while (true) {
+        int x_310 = inner;
+        if ((x_310 < 1)) {
+        } else {
+          break;
+        }
+        int x_314 = inner;
+        int x_315 = k;
+        int x_316 = tileCol;
+        int x_317 = inner;
+        float x_320 = mm_Bsub[x_315][(x_316 + x_317)];
+        BCached[x_314] = x_320;
+        {
+          int x_322 = inner;
+          inner = (x_322 + 1);
+        }
+      }
+      innerRow_3 = 0;
+      while (true) {
+        int x_330 = innerRow_3;
+        if ((x_330 < 1)) {
+        } else {
+          break;
+        }
+        int x_333 = tileRow;
+        int x_334 = innerRow_3;
+        int x_336 = k;
+        float x_338 = mm_Asub[(x_333 + x_334)][x_336];
+        ACached = x_338;
+        innerCol_3 = 0;
+        while (true) {
+          int x_345 = innerCol_3;
+          if ((x_345 < 1)) {
+          } else {
+            break;
+          }
+          int x_347 = innerRow_3;
+          int x_348 = innerCol_3;
+          float x_349 = ACached;
+          int x_350 = innerCol_3;
+          float x_352 = BCached[x_350];
+          float x_355 = acc[x_347][x_348];
+          acc[x_347][x_348] = (x_355 + (x_349 * x_352));
+          {
+            int x_358 = innerCol_3;
+            innerCol_3 = (x_358 + 1);
+          }
+        }
+        {
+          int x_360 = innerRow_3;
+          innerRow_3 = (x_360 + 1);
+        }
+      }
+      {
+        int x_362 = k;
+        k = (x_362 + 1);
+      }
+    }
+    barrier();
+    {
+      int x_364 = t;
+      t = (x_364 + 1);
+    }
+  }
+  innerRow_4 = 0;
+  while (true) {
+    int x_372 = innerRow_4;
+    if ((x_372 < 1)) {
+    } else {
+      break;
+    }
+    innerCol_4 = 0;
+    while (true) {
+      bool x_393 = false;
+      bool x_394 = false;
+      int x_380 = innerCol_4;
+      if ((x_380 < 1)) {
+      } else {
+        break;
+      }
+      int x_382 = globalCol;
+      int x_383 = innerCol_4;
+      int x_385 = dimBOuter;
+      bool x_386 = ((x_382 + x_383) < x_385);
+      x_394 = x_386;
+      if (x_386) {
+        int x_389 = globalRow;
+        int x_390 = innerRow_4;
+        int x_392 = dimAOuter;
+        x_393 = ((x_389 + x_390) < x_392);
+        x_394 = x_393;
+      }
+      if (x_394) {
+        int x_397 = globalRow;
+        int x_398 = innerRow_4;
+        int x_400 = globalCol;
+        int x_401 = innerCol_4;
+        int x_403 = innerRow_4;
+        int x_404 = innerCol_4;
+        param_7 = (x_397 + x_398);
+        param_8 = (x_400 + x_401);
+        float x_409 = acc[x_403][x_404];
+        param_9 = x_409;
+        mm_write_i1_i1_f1_(param_7, param_8, param_9);
+      }
+      {
+        int x_411 = innerCol_4;
+        innerCol_4 = (x_411 + 1);
+      }
+    }
+    {
+      int x_413 = innerRow_4;
+      innerRow_4 = (x_413 + 1);
     }
   }
   return;
@@ -358,9 +472,12 @@
   dimBOuter_1 = x_75;
   uint x_505 = tint_symbol_1.z;
   batch = int(x_505);
-  param_18 = dimAOuter_1;
-  param_19 = dimInner_1;
-  param_20 = dimBOuter_1;
+  int x_508 = dimAOuter_1;
+  param_18 = x_508;
+  int x_510 = dimInner_1;
+  param_19 = x_510;
+  int x_512 = dimBOuter_1;
+  param_20 = x_512;
   mm_matMul_i1_i1_i1_(param_18, param_19, param_20);
   return;
 }
diff --git a/test/tint/bug/tint/948.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/948.wgsl.expected.dxc.hlsl
index 1864ff1..c19bece 100644
--- a/test/tint/bug/tint/948.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/948.wgsl.expected.dxc.hlsl
@@ -36,9 +36,12 @@
   const float x_15 = frameID;
   const float x_25 = asfloat(x_20[6].w);
   fX = (x_15 / x_25);
-  const float4 x_40 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.0f), 0.0f);
-  const float4 x_47 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.25f), 0.0f);
-  const float4 x_54 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.5f), 0.0f);
+  const float x_37 = fX;
+  const float4 x_40 = frameMapTexture.SampleBias(frameMapSampler, float2(x_37, 0.0f), 0.0f);
+  const float x_44 = fX;
+  const float4 x_47 = frameMapTexture.SampleBias(frameMapSampler, float2(x_44, 0.25f), 0.0f);
+  const float x_51 = fX;
+  const float4 x_54 = frameMapTexture.SampleBias(frameMapSampler, float2(x_51, 0.5f), 0.0f);
   return float4x4(float4(x_40.x, x_40.y, x_40.z, x_40.w), float4(x_47.x, x_47.y, x_47.z, x_47.w), float4(x_54.x, x_54.y, x_54.z, x_54.w), (0.0f).xxxx);
 }
 
@@ -62,10 +65,12 @@
   float alpha = 0.0f;
   float3 mixed = float3(0.0f, 0.0f, 0.0f);
   color = (0.0f).xxxx;
-  tileUV = frac(tUV);
+  const float2 x_86 = tUV;
+  tileUV = frac(x_86);
   const float x_91 = tileUV.y;
   tileUV.y = (1.0f - x_91);
-  tileID = floor(tUV);
+  const float2 x_95 = tUV;
+  tileID = floor(x_95);
   const float2 x_101 = asfloat(x_20[6].xy);
   sheetUnits = ((1.0f).xx / x_101);
   const float x_106 = asfloat(x_20[6].w);
@@ -73,91 +78,120 @@
   const float2 x_111 = asfloat(x_20[5].zw);
   stageUnits = ((1.0f).xx / x_111);
   i = 0;
-  {
-    [loop] for(; (i < 2); i = (i + 1)) {
-      switch(i) {
-        case 1: {
-          const float2 x_150 = tileID;
-          const float2 x_154 = asfloat(x_20[5].zw);
-          const float4 x_156 = tileMapsTexture1.SampleBias(tileMapsSampler, ((x_150 + (0.5f).xx) / x_154), 0.0f);
-          frameID_1 = x_156.x;
-          break;
-        }
-        case 0: {
-          const float2 x_136 = tileID;
-          const float2 x_140 = asfloat(x_20[5].zw);
-          const float4 x_142 = tileMapsTexture0.SampleBias(tileMapsSampler, ((x_136 + (0.5f).xx) / x_140), 0.0f);
-          frameID_1 = x_142.x;
-          break;
-        }
-        default: {
-          break;
-        }
+  [loop] while (true) {
+    const int x_122 = i;
+    if ((x_122 < 2)) {
+    } else {
+      break;
+    }
+    const int x_126 = i;
+    switch(x_126) {
+      case 1: {
+        const float2 x_150 = tileID;
+        const float2 x_154 = asfloat(x_20[5].zw);
+        const float4 x_156 = tileMapsTexture1.SampleBias(tileMapsSampler, ((x_150 + (0.5f).xx) / x_154), 0.0f);
+        frameID_1 = x_156.x;
+        break;
       }
-      const float x_166 = frameID_1;
-      const float x_169 = asfloat(x_20[6].w);
-      const float4 x_172 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_166 + 0.5f) / x_169), 0.0f), 0.0f);
-      animationData = x_172;
-      const float x_174 = animationData.y;
-      if ((x_174 > 0.0f)) {
-        const float x_181 = asfloat(x_20[0].x);
-        const float x_184 = animationData.z;
-        mt = ((x_181 * x_184) % 1.0f);
-        f = 0.0f;
+      case 0: {
+        const float2 x_136 = tileID;
+        const float2 x_140 = asfloat(x_20[5].zw);
+        const float4 x_142 = tileMapsTexture0.SampleBias(tileMapsSampler, ((x_136 + (0.5f).xx) / x_140), 0.0f);
+        frameID_1 = x_142.x;
+        break;
+      }
+      default: {
+        break;
+      }
+    }
+    const float x_166 = frameID_1;
+    const float x_169 = asfloat(x_20[6].w);
+    const float4 x_172 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_166 + 0.5f) / x_169), 0.0f), 0.0f);
+    animationData = x_172;
+    const float x_174 = animationData.y;
+    if ((x_174 > 0.0f)) {
+      const float x_181 = asfloat(x_20[0].x);
+      const float x_184 = animationData.z;
+      mt = ((x_181 * x_184) % 1.0f);
+      f = 0.0f;
+      [loop] while (true) {
+        const float x_193 = f;
+        if ((x_193 < 8.0f)) {
+        } else {
+          break;
+        }
+        const float x_197 = animationData.y;
+        const float x_198 = mt;
+        if ((x_197 > x_198)) {
+          const float x_203 = animationData.x;
+          frameID_1 = x_203;
+          break;
+        }
+        const float x_208 = frameID_1;
+        const float x_211 = asfloat(x_20[6].w);
+        const float x_214 = f;
+        const float4 x_217 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_208 + 0.5f) / x_211), (0.125f * x_214)), 0.0f);
+        animationData = x_217;
         {
-          [loop] for(; (f < 8.0f); f = (f + 1.0f)) {
-            const float x_197 = animationData.y;
-            if ((x_197 > mt)) {
-              const float x_203 = animationData.x;
-              frameID_1 = x_203;
-              break;
-            }
-            const float x_208 = frameID_1;
-            const float x_211 = asfloat(x_20[6].w);
-            const float4 x_217 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_208 + 0.5f) / x_211), (0.125f * f)), 0.0f);
-            animationData = x_217;
-          }
+          const float x_218 = f;
+          f = (x_218 + 1.0f);
         }
       }
-      param = (frameID_1 + 0.5f);
-      const float4x4 x_225 = getFrameData_f1_(param);
-      frameData = x_225;
-      const float4 x_228 = frameData[0];
-      const float2 x_231 = asfloat(x_20[6].xy);
-      frameSize = (float2(x_228.w, x_228.z) / x_231);
-      const float4 x_235 = frameData[0];
-      offset_1 = (float2(x_235.x, x_235.y) * sheetUnits);
-      const float4 x_241 = frameData[2];
-      const float4 x_244 = frameData[0];
-      ratio = (float2(x_241.x, x_241.y) / float2(x_244.w, x_244.z));
-      const float x_248 = frameData[2].z;
-      if ((x_248 == 1.0f)) {
-        const float2 x_252 = tileUV;
-        tileUV = float2(x_252.y, x_252.x);
-      }
-      if ((i == 0)) {
-        const float4 x_268 = spriteSheetTexture.Sample(spriteSheetSampler, ((tileUV * frameSize) + offset_1));
-        color = x_268;
-      } else {
-        const float4 x_279 = spriteSheetTexture.Sample(spriteSheetSampler, ((tileUV * frameSize) + offset_1));
-        nc = x_279;
-        const float x_283 = color.w;
-        const float x_285 = nc.w;
-        alpha = min((x_283 + x_285), 1.0f);
-        const float4 x_290 = color;
-        const float4 x_292 = nc;
-        const float x_295 = nc.w;
-        mixed = lerp(float3(x_290.x, x_290.y, x_290.z), float3(x_292.x, x_292.y, x_292.z), float3(x_295, x_295, x_295));
-        const float3 x_298 = mixed;
-        color = float4(x_298.x, x_298.y, x_298.z, alpha);
-      }
+    }
+    const float x_222 = frameID_1;
+    param = (x_222 + 0.5f);
+    const float4x4 x_225 = getFrameData_f1_(param);
+    frameData = x_225;
+    const float4 x_228 = frameData[0];
+    const float2 x_231 = asfloat(x_20[6].xy);
+    frameSize = (float2(x_228.w, x_228.z) / x_231);
+    const float4 x_235 = frameData[0];
+    const float2 x_237 = sheetUnits;
+    offset_1 = (float2(x_235.x, x_235.y) * x_237);
+    const float4 x_241 = frameData[2];
+    const float4 x_244 = frameData[0];
+    ratio = (float2(x_241.x, x_241.y) / float2(x_244.w, x_244.z));
+    const float x_248 = frameData[2].z;
+    if ((x_248 == 1.0f)) {
+      const float2 x_252 = tileUV;
+      tileUV = float2(x_252.y, x_252.x);
+    }
+    const int x_254 = i;
+    if ((x_254 == 0)) {
+      const float2 x_263 = tileUV;
+      const float2 x_264 = frameSize;
+      const float2 x_266 = offset_1;
+      const float4 x_268 = spriteSheetTexture.Sample(spriteSheetSampler, ((x_263 * x_264) + x_266));
+      color = x_268;
+    } else {
+      const float2 x_274 = tileUV;
+      const float2 x_275 = frameSize;
+      const float2 x_277 = offset_1;
+      const float4 x_279 = spriteSheetTexture.Sample(spriteSheetSampler, ((x_274 * x_275) + x_277));
+      nc = x_279;
+      const float x_283 = color.w;
+      const float x_285 = nc.w;
+      alpha = min((x_283 + x_285), 1.0f);
+      const float4 x_290 = color;
+      const float4 x_292 = nc;
+      const float x_295 = nc.w;
+      mixed = lerp(float3(x_290.x, x_290.y, x_290.z), float3(x_292.x, x_292.y, x_292.z), float3(x_295, x_295, x_295));
+      const float3 x_298 = mixed;
+      const float x_299 = alpha;
+      color = float4(x_298.x, x_298.y, x_298.z, x_299);
+    }
+    {
+      const int x_304 = i;
+      i = (x_304 + 1);
     }
   }
   const float3 x_310 = asfloat(x_20[7].xyz);
   const float4 x_311 = color;
   const float3 x_313 = (float3(x_311.x, x_311.y, x_311.z) * x_310);
-  color = float4(x_313.x, x_313.y, x_313.z, color.w);
-  glFragColor = color;
+  const float4 x_314 = color;
+  color = float4(x_313.x, x_313.y, x_313.z, x_314.w);
+  const float4 x_318 = color;
+  glFragColor = x_318;
   return;
 }
 
diff --git a/test/tint/bug/tint/948.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/948.wgsl.expected.fxc.hlsl
index 1864ff1..c19bece 100644
--- a/test/tint/bug/tint/948.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/948.wgsl.expected.fxc.hlsl
@@ -36,9 +36,12 @@
   const float x_15 = frameID;
   const float x_25 = asfloat(x_20[6].w);
   fX = (x_15 / x_25);
-  const float4 x_40 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.0f), 0.0f);
-  const float4 x_47 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.25f), 0.0f);
-  const float4 x_54 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.5f), 0.0f);
+  const float x_37 = fX;
+  const float4 x_40 = frameMapTexture.SampleBias(frameMapSampler, float2(x_37, 0.0f), 0.0f);
+  const float x_44 = fX;
+  const float4 x_47 = frameMapTexture.SampleBias(frameMapSampler, float2(x_44, 0.25f), 0.0f);
+  const float x_51 = fX;
+  const float4 x_54 = frameMapTexture.SampleBias(frameMapSampler, float2(x_51, 0.5f), 0.0f);
   return float4x4(float4(x_40.x, x_40.y, x_40.z, x_40.w), float4(x_47.x, x_47.y, x_47.z, x_47.w), float4(x_54.x, x_54.y, x_54.z, x_54.w), (0.0f).xxxx);
 }
 
@@ -62,10 +65,12 @@
   float alpha = 0.0f;
   float3 mixed = float3(0.0f, 0.0f, 0.0f);
   color = (0.0f).xxxx;
-  tileUV = frac(tUV);
+  const float2 x_86 = tUV;
+  tileUV = frac(x_86);
   const float x_91 = tileUV.y;
   tileUV.y = (1.0f - x_91);
-  tileID = floor(tUV);
+  const float2 x_95 = tUV;
+  tileID = floor(x_95);
   const float2 x_101 = asfloat(x_20[6].xy);
   sheetUnits = ((1.0f).xx / x_101);
   const float x_106 = asfloat(x_20[6].w);
@@ -73,91 +78,120 @@
   const float2 x_111 = asfloat(x_20[5].zw);
   stageUnits = ((1.0f).xx / x_111);
   i = 0;
-  {
-    [loop] for(; (i < 2); i = (i + 1)) {
-      switch(i) {
-        case 1: {
-          const float2 x_150 = tileID;
-          const float2 x_154 = asfloat(x_20[5].zw);
-          const float4 x_156 = tileMapsTexture1.SampleBias(tileMapsSampler, ((x_150 + (0.5f).xx) / x_154), 0.0f);
-          frameID_1 = x_156.x;
-          break;
-        }
-        case 0: {
-          const float2 x_136 = tileID;
-          const float2 x_140 = asfloat(x_20[5].zw);
-          const float4 x_142 = tileMapsTexture0.SampleBias(tileMapsSampler, ((x_136 + (0.5f).xx) / x_140), 0.0f);
-          frameID_1 = x_142.x;
-          break;
-        }
-        default: {
-          break;
-        }
+  [loop] while (true) {
+    const int x_122 = i;
+    if ((x_122 < 2)) {
+    } else {
+      break;
+    }
+    const int x_126 = i;
+    switch(x_126) {
+      case 1: {
+        const float2 x_150 = tileID;
+        const float2 x_154 = asfloat(x_20[5].zw);
+        const float4 x_156 = tileMapsTexture1.SampleBias(tileMapsSampler, ((x_150 + (0.5f).xx) / x_154), 0.0f);
+        frameID_1 = x_156.x;
+        break;
       }
-      const float x_166 = frameID_1;
-      const float x_169 = asfloat(x_20[6].w);
-      const float4 x_172 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_166 + 0.5f) / x_169), 0.0f), 0.0f);
-      animationData = x_172;
-      const float x_174 = animationData.y;
-      if ((x_174 > 0.0f)) {
-        const float x_181 = asfloat(x_20[0].x);
-        const float x_184 = animationData.z;
-        mt = ((x_181 * x_184) % 1.0f);
-        f = 0.0f;
+      case 0: {
+        const float2 x_136 = tileID;
+        const float2 x_140 = asfloat(x_20[5].zw);
+        const float4 x_142 = tileMapsTexture0.SampleBias(tileMapsSampler, ((x_136 + (0.5f).xx) / x_140), 0.0f);
+        frameID_1 = x_142.x;
+        break;
+      }
+      default: {
+        break;
+      }
+    }
+    const float x_166 = frameID_1;
+    const float x_169 = asfloat(x_20[6].w);
+    const float4 x_172 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_166 + 0.5f) / x_169), 0.0f), 0.0f);
+    animationData = x_172;
+    const float x_174 = animationData.y;
+    if ((x_174 > 0.0f)) {
+      const float x_181 = asfloat(x_20[0].x);
+      const float x_184 = animationData.z;
+      mt = ((x_181 * x_184) % 1.0f);
+      f = 0.0f;
+      [loop] while (true) {
+        const float x_193 = f;
+        if ((x_193 < 8.0f)) {
+        } else {
+          break;
+        }
+        const float x_197 = animationData.y;
+        const float x_198 = mt;
+        if ((x_197 > x_198)) {
+          const float x_203 = animationData.x;
+          frameID_1 = x_203;
+          break;
+        }
+        const float x_208 = frameID_1;
+        const float x_211 = asfloat(x_20[6].w);
+        const float x_214 = f;
+        const float4 x_217 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_208 + 0.5f) / x_211), (0.125f * x_214)), 0.0f);
+        animationData = x_217;
         {
-          [loop] for(; (f < 8.0f); f = (f + 1.0f)) {
-            const float x_197 = animationData.y;
-            if ((x_197 > mt)) {
-              const float x_203 = animationData.x;
-              frameID_1 = x_203;
-              break;
-            }
-            const float x_208 = frameID_1;
-            const float x_211 = asfloat(x_20[6].w);
-            const float4 x_217 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_208 + 0.5f) / x_211), (0.125f * f)), 0.0f);
-            animationData = x_217;
-          }
+          const float x_218 = f;
+          f = (x_218 + 1.0f);
         }
       }
-      param = (frameID_1 + 0.5f);
-      const float4x4 x_225 = getFrameData_f1_(param);
-      frameData = x_225;
-      const float4 x_228 = frameData[0];
-      const float2 x_231 = asfloat(x_20[6].xy);
-      frameSize = (float2(x_228.w, x_228.z) / x_231);
-      const float4 x_235 = frameData[0];
-      offset_1 = (float2(x_235.x, x_235.y) * sheetUnits);
-      const float4 x_241 = frameData[2];
-      const float4 x_244 = frameData[0];
-      ratio = (float2(x_241.x, x_241.y) / float2(x_244.w, x_244.z));
-      const float x_248 = frameData[2].z;
-      if ((x_248 == 1.0f)) {
-        const float2 x_252 = tileUV;
-        tileUV = float2(x_252.y, x_252.x);
-      }
-      if ((i == 0)) {
-        const float4 x_268 = spriteSheetTexture.Sample(spriteSheetSampler, ((tileUV * frameSize) + offset_1));
-        color = x_268;
-      } else {
-        const float4 x_279 = spriteSheetTexture.Sample(spriteSheetSampler, ((tileUV * frameSize) + offset_1));
-        nc = x_279;
-        const float x_283 = color.w;
-        const float x_285 = nc.w;
-        alpha = min((x_283 + x_285), 1.0f);
-        const float4 x_290 = color;
-        const float4 x_292 = nc;
-        const float x_295 = nc.w;
-        mixed = lerp(float3(x_290.x, x_290.y, x_290.z), float3(x_292.x, x_292.y, x_292.z), float3(x_295, x_295, x_295));
-        const float3 x_298 = mixed;
-        color = float4(x_298.x, x_298.y, x_298.z, alpha);
-      }
+    }
+    const float x_222 = frameID_1;
+    param = (x_222 + 0.5f);
+    const float4x4 x_225 = getFrameData_f1_(param);
+    frameData = x_225;
+    const float4 x_228 = frameData[0];
+    const float2 x_231 = asfloat(x_20[6].xy);
+    frameSize = (float2(x_228.w, x_228.z) / x_231);
+    const float4 x_235 = frameData[0];
+    const float2 x_237 = sheetUnits;
+    offset_1 = (float2(x_235.x, x_235.y) * x_237);
+    const float4 x_241 = frameData[2];
+    const float4 x_244 = frameData[0];
+    ratio = (float2(x_241.x, x_241.y) / float2(x_244.w, x_244.z));
+    const float x_248 = frameData[2].z;
+    if ((x_248 == 1.0f)) {
+      const float2 x_252 = tileUV;
+      tileUV = float2(x_252.y, x_252.x);
+    }
+    const int x_254 = i;
+    if ((x_254 == 0)) {
+      const float2 x_263 = tileUV;
+      const float2 x_264 = frameSize;
+      const float2 x_266 = offset_1;
+      const float4 x_268 = spriteSheetTexture.Sample(spriteSheetSampler, ((x_263 * x_264) + x_266));
+      color = x_268;
+    } else {
+      const float2 x_274 = tileUV;
+      const float2 x_275 = frameSize;
+      const float2 x_277 = offset_1;
+      const float4 x_279 = spriteSheetTexture.Sample(spriteSheetSampler, ((x_274 * x_275) + x_277));
+      nc = x_279;
+      const float x_283 = color.w;
+      const float x_285 = nc.w;
+      alpha = min((x_283 + x_285), 1.0f);
+      const float4 x_290 = color;
+      const float4 x_292 = nc;
+      const float x_295 = nc.w;
+      mixed = lerp(float3(x_290.x, x_290.y, x_290.z), float3(x_292.x, x_292.y, x_292.z), float3(x_295, x_295, x_295));
+      const float3 x_298 = mixed;
+      const float x_299 = alpha;
+      color = float4(x_298.x, x_298.y, x_298.z, x_299);
+    }
+    {
+      const int x_304 = i;
+      i = (x_304 + 1);
     }
   }
   const float3 x_310 = asfloat(x_20[7].xyz);
   const float4 x_311 = color;
   const float3 x_313 = (float3(x_311.x, x_311.y, x_311.z) * x_310);
-  color = float4(x_313.x, x_313.y, x_313.z, color.w);
-  glFragColor = color;
+  const float4 x_314 = color;
+  color = float4(x_313.x, x_313.y, x_313.z, x_314.w);
+  const float4 x_318 = color;
+  glFragColor = x_318;
   return;
 }
 
diff --git a/test/tint/bug/tint/948.wgsl.expected.glsl b/test/tint/bug/tint/948.wgsl.expected.glsl
index 107f86e..991da32 100644
--- a/test/tint/bug/tint/948.wgsl.expected.glsl
+++ b/test/tint/bug/tint/948.wgsl.expected.glsl
@@ -55,9 +55,12 @@
   float x_15 = frameID;
   float x_25 = x_20.spriteCount;
   fX = (x_15 / x_25);
-  vec4 x_40 = texture(frameMapTexture_frameMapSampler, vec2(fX, 0.0f), 0.0f);
-  vec4 x_47 = texture(frameMapTexture_frameMapSampler, vec2(fX, 0.25f), 0.0f);
-  vec4 x_54 = texture(frameMapTexture_frameMapSampler, vec2(fX, 0.5f), 0.0f);
+  float x_37 = fX;
+  vec4 x_40 = texture(frameMapTexture_frameMapSampler, vec2(x_37, 0.0f), 0.0f);
+  float x_44 = fX;
+  vec4 x_47 = texture(frameMapTexture_frameMapSampler, vec2(x_44, 0.25f), 0.0f);
+  float x_51 = fX;
+  vec4 x_54 = texture(frameMapTexture_frameMapSampler, vec2(x_51, 0.5f), 0.0f);
   return mat4(vec4(x_40.x, x_40.y, x_40.z, x_40.w), vec4(x_47.x, x_47.y, x_47.z, x_47.w), vec4(x_54.x, x_54.y, x_54.z, x_54.w), vec4(0.0f));
 }
 
@@ -85,10 +88,12 @@
   float alpha = 0.0f;
   vec3 mixed = vec3(0.0f, 0.0f, 0.0f);
   color = vec4(0.0f);
-  tileUV = fract(tUV);
+  vec2 x_86 = tUV;
+  tileUV = fract(x_86);
   float x_91 = tileUV.y;
   tileUV.y = (1.0f - x_91);
-  tileID = floor(tUV);
+  vec2 x_95 = tUV;
+  tileID = floor(x_95);
   vec2 x_101 = x_20.spriteMapSize;
   sheetUnits = (vec2(1.0f) / x_101);
   float x_106 = x_20.spriteCount;
@@ -96,91 +101,120 @@
   vec2 x_111 = x_20.stageSize;
   stageUnits = (vec2(1.0f) / x_111);
   i = 0;
-  {
-    for(; (i < 2); i = (i + 1)) {
-      switch(i) {
-        case 1: {
-          vec2 x_150 = tileID;
-          vec2 x_154 = x_20.stageSize;
-          vec4 x_156 = texture(tileMapsTexture1_tileMapsSampler, ((x_150 + vec2(0.5f)) / x_154), 0.0f);
-          frameID_1 = x_156.x;
-          break;
-        }
-        case 0: {
-          vec2 x_136 = tileID;
-          vec2 x_140 = x_20.stageSize;
-          vec4 x_142 = texture(tileMapsTexture0_tileMapsSampler, ((x_136 + vec2(0.5f)) / x_140), 0.0f);
-          frameID_1 = x_142.x;
-          break;
-        }
-        default: {
-          break;
-        }
+  while (true) {
+    int x_122 = i;
+    if ((x_122 < 2)) {
+    } else {
+      break;
+    }
+    int x_126 = i;
+    switch(x_126) {
+      case 1: {
+        vec2 x_150 = tileID;
+        vec2 x_154 = x_20.stageSize;
+        vec4 x_156 = texture(tileMapsTexture1_tileMapsSampler, ((x_150 + vec2(0.5f)) / x_154), 0.0f);
+        frameID_1 = x_156.x;
+        break;
       }
-      float x_166 = frameID_1;
-      float x_169 = x_20.spriteCount;
-      vec4 x_172 = texture(animationMapTexture_animationMapSampler, vec2(((x_166 + 0.5f) / x_169), 0.0f), 0.0f);
-      animationData = x_172;
-      float x_174 = animationData.y;
-      if ((x_174 > 0.0f)) {
-        float x_181 = x_20.time;
-        float x_184 = animationData.z;
-        mt = tint_float_modulo((x_181 * x_184), 1.0f);
-        f = 0.0f;
+      case 0: {
+        vec2 x_136 = tileID;
+        vec2 x_140 = x_20.stageSize;
+        vec4 x_142 = texture(tileMapsTexture0_tileMapsSampler, ((x_136 + vec2(0.5f)) / x_140), 0.0f);
+        frameID_1 = x_142.x;
+        break;
+      }
+      default: {
+        break;
+      }
+    }
+    float x_166 = frameID_1;
+    float x_169 = x_20.spriteCount;
+    vec4 x_172 = texture(animationMapTexture_animationMapSampler, vec2(((x_166 + 0.5f) / x_169), 0.0f), 0.0f);
+    animationData = x_172;
+    float x_174 = animationData.y;
+    if ((x_174 > 0.0f)) {
+      float x_181 = x_20.time;
+      float x_184 = animationData.z;
+      mt = tint_float_modulo((x_181 * x_184), 1.0f);
+      f = 0.0f;
+      while (true) {
+        float x_193 = f;
+        if ((x_193 < 8.0f)) {
+        } else {
+          break;
+        }
+        float x_197 = animationData.y;
+        float x_198 = mt;
+        if ((x_197 > x_198)) {
+          float x_203 = animationData.x;
+          frameID_1 = x_203;
+          break;
+        }
+        float x_208 = frameID_1;
+        float x_211 = x_20.spriteCount;
+        float x_214 = f;
+        vec4 x_217 = texture(animationMapTexture_animationMapSampler, vec2(((x_208 + 0.5f) / x_211), (0.125f * x_214)), 0.0f);
+        animationData = x_217;
         {
-          for(; (f < 8.0f); f = (f + 1.0f)) {
-            float x_197 = animationData.y;
-            if ((x_197 > mt)) {
-              float x_203 = animationData.x;
-              frameID_1 = x_203;
-              break;
-            }
-            float x_208 = frameID_1;
-            float x_211 = x_20.spriteCount;
-            vec4 x_217 = texture(animationMapTexture_animationMapSampler, vec2(((x_208 + 0.5f) / x_211), (0.125f * f)), 0.0f);
-            animationData = x_217;
-          }
+          float x_218 = f;
+          f = (x_218 + 1.0f);
         }
       }
-      param = (frameID_1 + 0.5f);
-      mat4 x_225 = getFrameData_f1_(param);
-      frameData = x_225;
-      vec4 x_228 = frameData[0];
-      vec2 x_231 = x_20.spriteMapSize;
-      frameSize = (vec2(x_228.w, x_228.z) / x_231);
-      vec4 x_235 = frameData[0];
-      offset_1 = (vec2(x_235.x, x_235.y) * sheetUnits);
-      vec4 x_241 = frameData[2];
-      vec4 x_244 = frameData[0];
-      ratio = (vec2(x_241.x, x_241.y) / vec2(x_244.w, x_244.z));
-      float x_248 = frameData[2].z;
-      if ((x_248 == 1.0f)) {
-        vec2 x_252 = tileUV;
-        tileUV = vec2(x_252.y, x_252.x);
-      }
-      if ((i == 0)) {
-        vec4 x_268 = texture(spriteSheetTexture_spriteSheetSampler, ((tileUV * frameSize) + offset_1));
-        color = x_268;
-      } else {
-        vec4 x_279 = texture(spriteSheetTexture_spriteSheetSampler, ((tileUV * frameSize) + offset_1));
-        nc = x_279;
-        float x_283 = color.w;
-        float x_285 = nc.w;
-        alpha = min((x_283 + x_285), 1.0f);
-        vec4 x_290 = color;
-        vec4 x_292 = nc;
-        float x_295 = nc.w;
-        mixed = mix(vec3(x_290.x, x_290.y, x_290.z), vec3(x_292.x, x_292.y, x_292.z), vec3(x_295, x_295, x_295));
-        vec3 x_298 = mixed;
-        color = vec4(x_298.x, x_298.y, x_298.z, alpha);
-      }
+    }
+    float x_222 = frameID_1;
+    param = (x_222 + 0.5f);
+    mat4 x_225 = getFrameData_f1_(param);
+    frameData = x_225;
+    vec4 x_228 = frameData[0];
+    vec2 x_231 = x_20.spriteMapSize;
+    frameSize = (vec2(x_228.w, x_228.z) / x_231);
+    vec4 x_235 = frameData[0];
+    vec2 x_237 = sheetUnits;
+    offset_1 = (vec2(x_235.x, x_235.y) * x_237);
+    vec4 x_241 = frameData[2];
+    vec4 x_244 = frameData[0];
+    ratio = (vec2(x_241.x, x_241.y) / vec2(x_244.w, x_244.z));
+    float x_248 = frameData[2].z;
+    if ((x_248 == 1.0f)) {
+      vec2 x_252 = tileUV;
+      tileUV = vec2(x_252.y, x_252.x);
+    }
+    int x_254 = i;
+    if ((x_254 == 0)) {
+      vec2 x_263 = tileUV;
+      vec2 x_264 = frameSize;
+      vec2 x_266 = offset_1;
+      vec4 x_268 = texture(spriteSheetTexture_spriteSheetSampler, ((x_263 * x_264) + x_266));
+      color = x_268;
+    } else {
+      vec2 x_274 = tileUV;
+      vec2 x_275 = frameSize;
+      vec2 x_277 = offset_1;
+      vec4 x_279 = texture(spriteSheetTexture_spriteSheetSampler, ((x_274 * x_275) + x_277));
+      nc = x_279;
+      float x_283 = color.w;
+      float x_285 = nc.w;
+      alpha = min((x_283 + x_285), 1.0f);
+      vec4 x_290 = color;
+      vec4 x_292 = nc;
+      float x_295 = nc.w;
+      mixed = mix(vec3(x_290.x, x_290.y, x_290.z), vec3(x_292.x, x_292.y, x_292.z), vec3(x_295, x_295, x_295));
+      vec3 x_298 = mixed;
+      float x_299 = alpha;
+      color = vec4(x_298.x, x_298.y, x_298.z, x_299);
+    }
+    {
+      int x_304 = i;
+      i = (x_304 + 1);
     }
   }
   vec3 x_310 = x_20.colorMul;
   vec4 x_311 = color;
   vec3 x_313 = (vec3(x_311.x, x_311.y, x_311.z) * x_310);
-  color = vec4(x_313.x, x_313.y, x_313.z, color.w);
-  glFragColor = color;
+  vec4 x_314 = color;
+  color = vec4(x_313.x, x_313.y, x_313.z, x_314.w);
+  vec4 x_318 = color;
+  glFragColor = x_318;
   return;
 }
 
diff --git a/test/tint/bug/tint/949.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/949.wgsl.expected.dxc.hlsl
index e29a611..6875497 100644
--- a/test/tint/bug/tint/949.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/949.wgsl.expected.dxc.hlsl
@@ -58,7 +58,8 @@
   const float3 x_146 = normal_1;
   dp2perp = cross(x_145, x_146);
   const float3 x_149 = normal_1;
-  dp1perp = cross(x_149, dp1);
+  const float3 x_150 = dp1;
+  dp1perp = cross(x_149, x_150);
   const float3 x_153 = dp2perp;
   const float x_155 = duv1.x;
   const float3 x_157 = dp1perp;
@@ -70,12 +71,22 @@
   const float x_169 = duv2.y;
   bitangent = ((x_163 * x_165) + (x_167 * x_169));
   const float x_173 = tangentSpaceParams.x;
-  tangent = (tangent * x_173);
+  const float3 x_174 = tangent;
+  tangent = (x_174 * x_173);
   const float x_177 = tangentSpaceParams.y;
-  bitangent = (bitangent * x_177);
-  invmax = rsqrt(max(dot(tangent, tangent), dot(bitangent, bitangent)));
-  const float3 x_191 = (tangent * invmax);
-  const float3 x_194 = (bitangent * invmax);
+  const float3 x_178 = bitangent;
+  bitangent = (x_178 * x_177);
+  const float3 x_181 = tangent;
+  const float3 x_182 = tangent;
+  const float3 x_184 = bitangent;
+  const float3 x_185 = bitangent;
+  invmax = rsqrt(max(dot(x_181, x_182), dot(x_184, x_185)));
+  const float3 x_189 = tangent;
+  const float x_190 = invmax;
+  const float3 x_191 = (x_189 * x_190);
+  const float3 x_192 = bitangent;
+  const float x_193 = invmax;
+  const float3 x_194 = (x_192 * x_193);
   const float3 x_195 = normal_1;
   return float3x3(float3(x_191.x, x_191.y, x_191.z), float3(x_194.x, x_194.y, x_194.z), float3(x_195.x, x_195.y, x_195.z));
 }
@@ -104,7 +115,8 @@
   const float x_93 = i2.z;
   const float3 x_94 = float3(x_89, x_91, x_93);
   outMatrix = float3x3(float3(x_78.x, x_78.y, x_78.z), float3(x_86.x, x_86.y, x_86.z), float3(x_94.x, x_94.y, x_94.z));
-  return outMatrix;
+  const float3x3 x_110 = outMatrix;
+  return x_110;
 }
 
 float3 perturbNormalBase_mf33_vf3_f1_(inout float3x3 cotangentFrame, inout float3 normal, inout float scale) {
@@ -143,14 +155,16 @@
   const float4 x_228 = lightData;
   angleW = normalize((x_227 + float3(x_228.x, x_228.y, x_228.z)));
   const float3 x_233 = vNormal;
-  specComp = max(0.0f, dot(x_233, angleW));
+  const float3 x_234 = angleW;
+  specComp = max(0.0f, dot(x_233, x_234));
   const float x_237 = specComp;
   const float x_238 = glossiness;
   specComp = pow(x_237, max(1.0f, x_238));
   const float x_241 = specComp;
   const float3 x_242 = specularColor;
   result.specular = (x_242 * x_241);
-  return result;
+  const lightingInfo x_245 = result;
+  return x_245;
 }
 
 void main_1() {
@@ -209,7 +223,8 @@
   float3 output3 = float3(0.0f, 0.0f, 0.0f);
   u_Float = 100.0f;
   u_Color = (0.5f).xxx;
-  const float4 x_262 = TextureSamplerTexture.Sample(TextureSamplerSampler, vMainuv);
+  const float2 x_261 = vMainuv;
+  const float4 x_262 = TextureSamplerTexture.Sample(TextureSamplerSampler, x_261);
   tempTextureRead = x_262;
   const float4 x_264 = tempTextureRead;
   const float x_273 = asfloat(x_269[10].x);
@@ -221,69 +236,128 @@
   uvOffset = (0.0f).xx;
   const float x_292 = asfloat(x_269[8].x);
   normalScale = (1.0f / x_292);
-  if (gl_FrontFacing) {
-    x_299 = v_uv;
+  const bool x_298 = gl_FrontFacing;
+  if (x_298) {
+    const float2 x_303 = v_uv;
+    x_299 = x_303;
   } else {
-    x_299 = -(v_uv);
+    const float2 x_305 = v_uv;
+    x_299 = -(x_305);
   }
-  TBNUV = x_299;
+  const float2 x_307 = x_299;
+  TBNUV = x_307;
   const float4 x_310 = v_output2;
-  param_3 = (float3(x_310.x, x_310.y, x_310.z) * normalScale);
+  const float x_312 = normalScale;
+  param_3 = (float3(x_310.x, x_310.y, x_310.z) * x_312);
   const float4 x_317 = v_output1;
   param_4 = float3(x_317.x, x_317.y, x_317.z);
-  param_5 = TBNUV;
+  const float2 x_320 = TBNUV;
+  param_5 = x_320;
   const float2 x_324 = asfloat(x_269[10].zw);
   param_6 = x_324;
   const float3x3 x_325 = cotangent_frame_vf3_vf3_vf2_vf2_(param_3, param_4, param_5, param_6);
   TBN = x_325;
-  param_7 = TBN;
+  const float3x3 x_328 = TBN;
+  param_7 = x_328;
   const float3x3 x_329 = transposeMat3_mf33_(param_7);
   invTBN = x_329;
-  const float3 x_334 = mul(-(output5), invTBN);
-  parallaxLimit = (length(float2(x_334.x, x_334.y)) / mul(-(output5), invTBN).z);
+  const float3x3 x_331 = invTBN;
+  const float3 x_332 = output5;
+  const float3 x_334 = mul(-(x_332), x_331);
+  const float3x3 x_337 = invTBN;
+  const float3 x_338 = output5;
+  parallaxLimit = (length(float2(x_334.x, x_334.y)) / mul(-(x_338), x_337).z);
   const float x_345 = asfloat(x_269[9].w);
-  parallaxLimit = (parallaxLimit * x_345);
-  const float3 x_352 = mul(-(output5), invTBN);
+  const float x_346 = parallaxLimit;
+  parallaxLimit = (x_346 * x_345);
+  const float3x3 x_349 = invTBN;
+  const float3 x_350 = output5;
+  const float3 x_352 = mul(-(x_350), x_349);
   vOffsetDir = normalize(float2(x_352.x, x_352.y));
-  vMaxOffset = (vOffsetDir * parallaxLimit);
+  const float2 x_356 = vOffsetDir;
+  const float x_357 = parallaxLimit;
+  vMaxOffset = (x_356 * x_357);
+  const float3x3 x_361 = invTBN;
+  const float3 x_362 = output5;
+  const float3x3 x_365 = invTBN;
   const float4 x_366 = v_output2;
-  numSamples = (15.0f + (dot(mul(-(output5), invTBN), mul(float3(x_366.x, x_366.y, x_366.z), invTBN)) * -11.0f));
-  stepSize = (1.0f / numSamples);
+  numSamples = (15.0f + (dot(mul(-(x_362), x_361), mul(float3(x_366.x, x_366.y, x_366.z), x_365)) * -11.0f));
+  const float x_374 = numSamples;
+  stepSize = (1.0f / x_374);
   currRayHeight = 1.0f;
   vCurrOffset = (0.0f).xx;
   vLastOffset = (0.0f).xx;
   lastSampledHeight = 1.0f;
   currSampledHeight = 1.0f;
   i = 0;
-  {
-    [loop] for(; (i < 15); i = (i + 1)) {
-      const float4 x_397 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + vCurrOffset));
-      currSampledHeight = x_397.w;
-      if ((currSampledHeight > currRayHeight)) {
-        delta1 = (currSampledHeight - currRayHeight);
-        delta2 = ((currRayHeight + stepSize) - lastSampledHeight);
-        ratio = (delta1 / (delta1 + delta2));
-        vCurrOffset = ((vLastOffset * ratio) + (vCurrOffset * (1.0f - ratio)));
-        break;
-      } else {
-        currRayHeight = (currRayHeight - stepSize);
-        vLastOffset = vCurrOffset;
-        vCurrOffset = (vCurrOffset + (vMaxOffset * stepSize));
-        lastSampledHeight = currSampledHeight;
-      }
+  [loop] while (true) {
+    const int x_388 = i;
+    if ((x_388 < 15)) {
+    } else {
+      break;
+    }
+    const float2 x_394 = v_uv;
+    const float2 x_395 = vCurrOffset;
+    const float4 x_397 = TextureSamplerTexture.Sample(TextureSamplerSampler, (x_394 + x_395));
+    currSampledHeight = x_397.w;
+    const float x_400 = currSampledHeight;
+    const float x_401 = currRayHeight;
+    if ((x_400 > x_401)) {
+      const float x_406 = currSampledHeight;
+      const float x_407 = currRayHeight;
+      delta1 = (x_406 - x_407);
+      const float x_410 = currRayHeight;
+      const float x_411 = stepSize;
+      const float x_413 = lastSampledHeight;
+      delta2 = ((x_410 + x_411) - x_413);
+      const float x_416 = delta1;
+      const float x_417 = delta1;
+      const float x_418 = delta2;
+      ratio = (x_416 / (x_417 + x_418));
+      const float x_421 = ratio;
+      const float2 x_422 = vLastOffset;
+      const float x_424 = ratio;
+      const float2 x_426 = vCurrOffset;
+      vCurrOffset = ((x_422 * x_421) + (x_426 * (1.0f - x_424)));
+      break;
+    } else {
+      const float x_431 = stepSize;
+      const float x_432 = currRayHeight;
+      currRayHeight = (x_432 - x_431);
+      const float2 x_434 = vCurrOffset;
+      vLastOffset = x_434;
+      const float x_435 = stepSize;
+      const float2 x_436 = vMaxOffset;
+      const float2 x_438 = vCurrOffset;
+      vCurrOffset = (x_438 + (x_436 * x_435));
+      const float x_440 = currSampledHeight;
+      lastSampledHeight = x_440;
+    }
+    {
+      const int x_441 = i;
+      i = (x_441 + 1);
     }
   }
-  parallaxOcclusion_0 = vCurrOffset;
-  uvOffset = parallaxOcclusion_0;
-  const float4 x_452 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + uvOffset));
+  const float2 x_444 = vCurrOffset;
+  parallaxOcclusion_0 = x_444;
+  const float2 x_445 = parallaxOcclusion_0;
+  uvOffset = x_445;
+  const float2 x_449 = v_uv;
+  const float2 x_450 = uvOffset;
+  const float4 x_452 = TextureSamplerTexture.Sample(TextureSamplerSampler, (x_449 + x_450));
   const float x_454 = asfloat(x_269[8].x);
-  param_8 = TBN;
+  const float3x3 x_457 = TBN;
+  param_8 = x_457;
   param_9 = float3(x_452.x, x_452.y, x_452.z);
   param_10 = (1.0f / x_454);
   const float3 x_461 = perturbNormal_mf33_vf3_f1_(param_8, param_9, param_10);
-  output4 = float4(x_461.x, x_461.y, x_461.z, output4.w);
-  output6 = (v_uv + uvOffset);
-  const float4 x_475 = TextureSampler1Texture.Sample(TextureSampler1Sampler, output6);
+  const float4 x_462 = output4;
+  output4 = float4(x_461.x, x_461.y, x_461.z, x_462.w);
+  const float2 x_465 = v_uv;
+  const float2 x_466 = uvOffset;
+  output6 = (x_465 + x_466);
+  const float2 x_474 = output6;
+  const float4 x_475 = TextureSampler1Texture.Sample(TextureSampler1Sampler, x_474);
   tempTextureRead1 = x_475;
   const float4 x_477 = tempTextureRead1;
   rgb1 = float3(x_477.x, x_477.y, x_477.z);
@@ -291,13 +365,16 @@
   const float4 x_482 = v_output1;
   viewDirectionW_1 = normalize((x_481 - float3(x_482.x, x_482.y, x_482.z)));
   shadow = 1.0f;
-  glossiness_1 = (1.0f * u_Float);
+  const float x_488 = u_Float;
+  glossiness_1 = (1.0f * x_488);
   diffuseBase = (0.0f).xxx;
   specularBase = (0.0f).xxx;
   const float4 x_494 = output4;
   normalW = float3(x_494.x, x_494.y, x_494.z);
-  param_11 = viewDirectionW_1;
-  param_12 = normalW;
+  const float3 x_501 = viewDirectionW_1;
+  param_11 = x_501;
+  const float3 x_503 = normalW;
+  param_12 = x_503;
   const float4 x_507 = asfloat(light0[0]);
   param_13 = x_507;
   const float4 x_510 = asfloat(light0[1]);
@@ -306,17 +383,28 @@
   param_15 = float3(x_514.x, x_514.y, x_514.z);
   const float3 x_518 = asfloat(light0[3].xyz);
   param_16 = x_518;
-  param_17 = glossiness_1;
+  const float x_520 = glossiness_1;
+  param_17 = x_520;
   const lightingInfo x_521 = computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(param_11, param_12, param_13, param_14, param_15, param_16, param_17);
   info = x_521;
   shadow = 1.0f;
   const float3 x_523 = info.diffuse;
-  diffuseBase = (diffuseBase + (x_523 * shadow));
+  const float x_524 = shadow;
+  const float3 x_526 = diffuseBase;
+  diffuseBase = (x_526 + (x_523 * x_524));
   const float3 x_529 = info.specular;
-  specularBase = (specularBase + (x_529 * shadow));
-  diffuseOutput = (diffuseBase * rgb1);
-  specularOutput = (specularBase * u_Color);
-  output3 = (diffuseOutput + specularOutput);
+  const float x_530 = shadow;
+  const float3 x_532 = specularBase;
+  specularBase = (x_532 + (x_529 * x_530));
+  const float3 x_535 = diffuseBase;
+  const float3 x_536 = rgb1;
+  diffuseOutput = (x_535 * x_536);
+  const float3 x_539 = specularBase;
+  const float3 x_540 = u_Color;
+  specularOutput = (x_539 * x_540);
+  const float3 x_543 = diffuseOutput;
+  const float3 x_544 = specularOutput;
+  output3 = (x_543 + x_544);
   const float3 x_548 = output3;
   glFragColor = float4(x_548.x, x_548.y, x_548.z, 1.0f);
   return;
diff --git a/test/tint/bug/tint/949.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/949.wgsl.expected.fxc.hlsl
index e29a611..6875497 100644
--- a/test/tint/bug/tint/949.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/949.wgsl.expected.fxc.hlsl
@@ -58,7 +58,8 @@
   const float3 x_146 = normal_1;
   dp2perp = cross(x_145, x_146);
   const float3 x_149 = normal_1;
-  dp1perp = cross(x_149, dp1);
+  const float3 x_150 = dp1;
+  dp1perp = cross(x_149, x_150);
   const float3 x_153 = dp2perp;
   const float x_155 = duv1.x;
   const float3 x_157 = dp1perp;
@@ -70,12 +71,22 @@
   const float x_169 = duv2.y;
   bitangent = ((x_163 * x_165) + (x_167 * x_169));
   const float x_173 = tangentSpaceParams.x;
-  tangent = (tangent * x_173);
+  const float3 x_174 = tangent;
+  tangent = (x_174 * x_173);
   const float x_177 = tangentSpaceParams.y;
-  bitangent = (bitangent * x_177);
-  invmax = rsqrt(max(dot(tangent, tangent), dot(bitangent, bitangent)));
-  const float3 x_191 = (tangent * invmax);
-  const float3 x_194 = (bitangent * invmax);
+  const float3 x_178 = bitangent;
+  bitangent = (x_178 * x_177);
+  const float3 x_181 = tangent;
+  const float3 x_182 = tangent;
+  const float3 x_184 = bitangent;
+  const float3 x_185 = bitangent;
+  invmax = rsqrt(max(dot(x_181, x_182), dot(x_184, x_185)));
+  const float3 x_189 = tangent;
+  const float x_190 = invmax;
+  const float3 x_191 = (x_189 * x_190);
+  const float3 x_192 = bitangent;
+  const float x_193 = invmax;
+  const float3 x_194 = (x_192 * x_193);
   const float3 x_195 = normal_1;
   return float3x3(float3(x_191.x, x_191.y, x_191.z), float3(x_194.x, x_194.y, x_194.z), float3(x_195.x, x_195.y, x_195.z));
 }
@@ -104,7 +115,8 @@
   const float x_93 = i2.z;
   const float3 x_94 = float3(x_89, x_91, x_93);
   outMatrix = float3x3(float3(x_78.x, x_78.y, x_78.z), float3(x_86.x, x_86.y, x_86.z), float3(x_94.x, x_94.y, x_94.z));
-  return outMatrix;
+  const float3x3 x_110 = outMatrix;
+  return x_110;
 }
 
 float3 perturbNormalBase_mf33_vf3_f1_(inout float3x3 cotangentFrame, inout float3 normal, inout float scale) {
@@ -143,14 +155,16 @@
   const float4 x_228 = lightData;
   angleW = normalize((x_227 + float3(x_228.x, x_228.y, x_228.z)));
   const float3 x_233 = vNormal;
-  specComp = max(0.0f, dot(x_233, angleW));
+  const float3 x_234 = angleW;
+  specComp = max(0.0f, dot(x_233, x_234));
   const float x_237 = specComp;
   const float x_238 = glossiness;
   specComp = pow(x_237, max(1.0f, x_238));
   const float x_241 = specComp;
   const float3 x_242 = specularColor;
   result.specular = (x_242 * x_241);
-  return result;
+  const lightingInfo x_245 = result;
+  return x_245;
 }
 
 void main_1() {
@@ -209,7 +223,8 @@
   float3 output3 = float3(0.0f, 0.0f, 0.0f);
   u_Float = 100.0f;
   u_Color = (0.5f).xxx;
-  const float4 x_262 = TextureSamplerTexture.Sample(TextureSamplerSampler, vMainuv);
+  const float2 x_261 = vMainuv;
+  const float4 x_262 = TextureSamplerTexture.Sample(TextureSamplerSampler, x_261);
   tempTextureRead = x_262;
   const float4 x_264 = tempTextureRead;
   const float x_273 = asfloat(x_269[10].x);
@@ -221,69 +236,128 @@
   uvOffset = (0.0f).xx;
   const float x_292 = asfloat(x_269[8].x);
   normalScale = (1.0f / x_292);
-  if (gl_FrontFacing) {
-    x_299 = v_uv;
+  const bool x_298 = gl_FrontFacing;
+  if (x_298) {
+    const float2 x_303 = v_uv;
+    x_299 = x_303;
   } else {
-    x_299 = -(v_uv);
+    const float2 x_305 = v_uv;
+    x_299 = -(x_305);
   }
-  TBNUV = x_299;
+  const float2 x_307 = x_299;
+  TBNUV = x_307;
   const float4 x_310 = v_output2;
-  param_3 = (float3(x_310.x, x_310.y, x_310.z) * normalScale);
+  const float x_312 = normalScale;
+  param_3 = (float3(x_310.x, x_310.y, x_310.z) * x_312);
   const float4 x_317 = v_output1;
   param_4 = float3(x_317.x, x_317.y, x_317.z);
-  param_5 = TBNUV;
+  const float2 x_320 = TBNUV;
+  param_5 = x_320;
   const float2 x_324 = asfloat(x_269[10].zw);
   param_6 = x_324;
   const float3x3 x_325 = cotangent_frame_vf3_vf3_vf2_vf2_(param_3, param_4, param_5, param_6);
   TBN = x_325;
-  param_7 = TBN;
+  const float3x3 x_328 = TBN;
+  param_7 = x_328;
   const float3x3 x_329 = transposeMat3_mf33_(param_7);
   invTBN = x_329;
-  const float3 x_334 = mul(-(output5), invTBN);
-  parallaxLimit = (length(float2(x_334.x, x_334.y)) / mul(-(output5), invTBN).z);
+  const float3x3 x_331 = invTBN;
+  const float3 x_332 = output5;
+  const float3 x_334 = mul(-(x_332), x_331);
+  const float3x3 x_337 = invTBN;
+  const float3 x_338 = output5;
+  parallaxLimit = (length(float2(x_334.x, x_334.y)) / mul(-(x_338), x_337).z);
   const float x_345 = asfloat(x_269[9].w);
-  parallaxLimit = (parallaxLimit * x_345);
-  const float3 x_352 = mul(-(output5), invTBN);
+  const float x_346 = parallaxLimit;
+  parallaxLimit = (x_346 * x_345);
+  const float3x3 x_349 = invTBN;
+  const float3 x_350 = output5;
+  const float3 x_352 = mul(-(x_350), x_349);
   vOffsetDir = normalize(float2(x_352.x, x_352.y));
-  vMaxOffset = (vOffsetDir * parallaxLimit);
+  const float2 x_356 = vOffsetDir;
+  const float x_357 = parallaxLimit;
+  vMaxOffset = (x_356 * x_357);
+  const float3x3 x_361 = invTBN;
+  const float3 x_362 = output5;
+  const float3x3 x_365 = invTBN;
   const float4 x_366 = v_output2;
-  numSamples = (15.0f + (dot(mul(-(output5), invTBN), mul(float3(x_366.x, x_366.y, x_366.z), invTBN)) * -11.0f));
-  stepSize = (1.0f / numSamples);
+  numSamples = (15.0f + (dot(mul(-(x_362), x_361), mul(float3(x_366.x, x_366.y, x_366.z), x_365)) * -11.0f));
+  const float x_374 = numSamples;
+  stepSize = (1.0f / x_374);
   currRayHeight = 1.0f;
   vCurrOffset = (0.0f).xx;
   vLastOffset = (0.0f).xx;
   lastSampledHeight = 1.0f;
   currSampledHeight = 1.0f;
   i = 0;
-  {
-    [loop] for(; (i < 15); i = (i + 1)) {
-      const float4 x_397 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + vCurrOffset));
-      currSampledHeight = x_397.w;
-      if ((currSampledHeight > currRayHeight)) {
-        delta1 = (currSampledHeight - currRayHeight);
-        delta2 = ((currRayHeight + stepSize) - lastSampledHeight);
-        ratio = (delta1 / (delta1 + delta2));
-        vCurrOffset = ((vLastOffset * ratio) + (vCurrOffset * (1.0f - ratio)));
-        break;
-      } else {
-        currRayHeight = (currRayHeight - stepSize);
-        vLastOffset = vCurrOffset;
-        vCurrOffset = (vCurrOffset + (vMaxOffset * stepSize));
-        lastSampledHeight = currSampledHeight;
-      }
+  [loop] while (true) {
+    const int x_388 = i;
+    if ((x_388 < 15)) {
+    } else {
+      break;
+    }
+    const float2 x_394 = v_uv;
+    const float2 x_395 = vCurrOffset;
+    const float4 x_397 = TextureSamplerTexture.Sample(TextureSamplerSampler, (x_394 + x_395));
+    currSampledHeight = x_397.w;
+    const float x_400 = currSampledHeight;
+    const float x_401 = currRayHeight;
+    if ((x_400 > x_401)) {
+      const float x_406 = currSampledHeight;
+      const float x_407 = currRayHeight;
+      delta1 = (x_406 - x_407);
+      const float x_410 = currRayHeight;
+      const float x_411 = stepSize;
+      const float x_413 = lastSampledHeight;
+      delta2 = ((x_410 + x_411) - x_413);
+      const float x_416 = delta1;
+      const float x_417 = delta1;
+      const float x_418 = delta2;
+      ratio = (x_416 / (x_417 + x_418));
+      const float x_421 = ratio;
+      const float2 x_422 = vLastOffset;
+      const float x_424 = ratio;
+      const float2 x_426 = vCurrOffset;
+      vCurrOffset = ((x_422 * x_421) + (x_426 * (1.0f - x_424)));
+      break;
+    } else {
+      const float x_431 = stepSize;
+      const float x_432 = currRayHeight;
+      currRayHeight = (x_432 - x_431);
+      const float2 x_434 = vCurrOffset;
+      vLastOffset = x_434;
+      const float x_435 = stepSize;
+      const float2 x_436 = vMaxOffset;
+      const float2 x_438 = vCurrOffset;
+      vCurrOffset = (x_438 + (x_436 * x_435));
+      const float x_440 = currSampledHeight;
+      lastSampledHeight = x_440;
+    }
+    {
+      const int x_441 = i;
+      i = (x_441 + 1);
     }
   }
-  parallaxOcclusion_0 = vCurrOffset;
-  uvOffset = parallaxOcclusion_0;
-  const float4 x_452 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + uvOffset));
+  const float2 x_444 = vCurrOffset;
+  parallaxOcclusion_0 = x_444;
+  const float2 x_445 = parallaxOcclusion_0;
+  uvOffset = x_445;
+  const float2 x_449 = v_uv;
+  const float2 x_450 = uvOffset;
+  const float4 x_452 = TextureSamplerTexture.Sample(TextureSamplerSampler, (x_449 + x_450));
   const float x_454 = asfloat(x_269[8].x);
-  param_8 = TBN;
+  const float3x3 x_457 = TBN;
+  param_8 = x_457;
   param_9 = float3(x_452.x, x_452.y, x_452.z);
   param_10 = (1.0f / x_454);
   const float3 x_461 = perturbNormal_mf33_vf3_f1_(param_8, param_9, param_10);
-  output4 = float4(x_461.x, x_461.y, x_461.z, output4.w);
-  output6 = (v_uv + uvOffset);
-  const float4 x_475 = TextureSampler1Texture.Sample(TextureSampler1Sampler, output6);
+  const float4 x_462 = output4;
+  output4 = float4(x_461.x, x_461.y, x_461.z, x_462.w);
+  const float2 x_465 = v_uv;
+  const float2 x_466 = uvOffset;
+  output6 = (x_465 + x_466);
+  const float2 x_474 = output6;
+  const float4 x_475 = TextureSampler1Texture.Sample(TextureSampler1Sampler, x_474);
   tempTextureRead1 = x_475;
   const float4 x_477 = tempTextureRead1;
   rgb1 = float3(x_477.x, x_477.y, x_477.z);
@@ -291,13 +365,16 @@
   const float4 x_482 = v_output1;
   viewDirectionW_1 = normalize((x_481 - float3(x_482.x, x_482.y, x_482.z)));
   shadow = 1.0f;
-  glossiness_1 = (1.0f * u_Float);
+  const float x_488 = u_Float;
+  glossiness_1 = (1.0f * x_488);
   diffuseBase = (0.0f).xxx;
   specularBase = (0.0f).xxx;
   const float4 x_494 = output4;
   normalW = float3(x_494.x, x_494.y, x_494.z);
-  param_11 = viewDirectionW_1;
-  param_12 = normalW;
+  const float3 x_501 = viewDirectionW_1;
+  param_11 = x_501;
+  const float3 x_503 = normalW;
+  param_12 = x_503;
   const float4 x_507 = asfloat(light0[0]);
   param_13 = x_507;
   const float4 x_510 = asfloat(light0[1]);
@@ -306,17 +383,28 @@
   param_15 = float3(x_514.x, x_514.y, x_514.z);
   const float3 x_518 = asfloat(light0[3].xyz);
   param_16 = x_518;
-  param_17 = glossiness_1;
+  const float x_520 = glossiness_1;
+  param_17 = x_520;
   const lightingInfo x_521 = computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(param_11, param_12, param_13, param_14, param_15, param_16, param_17);
   info = x_521;
   shadow = 1.0f;
   const float3 x_523 = info.diffuse;
-  diffuseBase = (diffuseBase + (x_523 * shadow));
+  const float x_524 = shadow;
+  const float3 x_526 = diffuseBase;
+  diffuseBase = (x_526 + (x_523 * x_524));
   const float3 x_529 = info.specular;
-  specularBase = (specularBase + (x_529 * shadow));
-  diffuseOutput = (diffuseBase * rgb1);
-  specularOutput = (specularBase * u_Color);
-  output3 = (diffuseOutput + specularOutput);
+  const float x_530 = shadow;
+  const float3 x_532 = specularBase;
+  specularBase = (x_532 + (x_529 * x_530));
+  const float3 x_535 = diffuseBase;
+  const float3 x_536 = rgb1;
+  diffuseOutput = (x_535 * x_536);
+  const float3 x_539 = specularBase;
+  const float3 x_540 = u_Color;
+  specularOutput = (x_539 * x_540);
+  const float3 x_543 = diffuseOutput;
+  const float3 x_544 = specularOutput;
+  output3 = (x_543 + x_544);
   const float3 x_548 = output3;
   glFragColor = float4(x_548.x, x_548.y, x_548.z, 1.0f);
   return;
diff --git a/test/tint/bug/tint/949.wgsl.expected.glsl b/test/tint/bug/tint/949.wgsl.expected.glsl
index 7585e91..4a0b37f 100644
--- a/test/tint/bug/tint/949.wgsl.expected.glsl
+++ b/test/tint/bug/tint/949.wgsl.expected.glsl
@@ -79,7 +79,8 @@
   vec3 x_146 = normal_1;
   dp2perp = cross(x_145, x_146);
   vec3 x_149 = normal_1;
-  dp1perp = cross(x_149, dp1);
+  vec3 x_150 = dp1;
+  dp1perp = cross(x_149, x_150);
   vec3 x_153 = dp2perp;
   float x_155 = duv1.x;
   vec3 x_157 = dp1perp;
@@ -91,12 +92,22 @@
   float x_169 = duv2.y;
   bitangent = ((x_163 * x_165) + (x_167 * x_169));
   float x_173 = tangentSpaceParams.x;
-  tangent = (tangent * x_173);
+  vec3 x_174 = tangent;
+  tangent = (x_174 * x_173);
   float x_177 = tangentSpaceParams.y;
-  bitangent = (bitangent * x_177);
-  invmax = inversesqrt(max(dot(tangent, tangent), dot(bitangent, bitangent)));
-  vec3 x_191 = (tangent * invmax);
-  vec3 x_194 = (bitangent * invmax);
+  vec3 x_178 = bitangent;
+  bitangent = (x_178 * x_177);
+  vec3 x_181 = tangent;
+  vec3 x_182 = tangent;
+  vec3 x_184 = bitangent;
+  vec3 x_185 = bitangent;
+  invmax = inversesqrt(max(dot(x_181, x_182), dot(x_184, x_185)));
+  vec3 x_189 = tangent;
+  float x_190 = invmax;
+  vec3 x_191 = (x_189 * x_190);
+  vec3 x_192 = bitangent;
+  float x_193 = invmax;
+  vec3 x_194 = (x_192 * x_193);
   vec3 x_195 = normal_1;
   return mat3(vec3(x_191.x, x_191.y, x_191.z), vec3(x_194.x, x_194.y, x_194.z), vec3(x_195.x, x_195.y, x_195.z));
 }
@@ -125,7 +136,8 @@
   float x_93 = i2.z;
   vec3 x_94 = vec3(x_89, x_91, x_93);
   outMatrix = mat3(vec3(x_78.x, x_78.y, x_78.z), vec3(x_86.x, x_86.y, x_86.z), vec3(x_94.x, x_94.y, x_94.z));
-  return outMatrix;
+  mat3 x_110 = outMatrix;
+  return x_110;
 }
 
 vec3 perturbNormalBase_mf33_vf3_f1_(inout mat3 cotangentFrame, inout vec3 normal, inout float scale) {
@@ -164,14 +176,16 @@
   vec4 x_228 = lightData;
   angleW = normalize((x_227 + vec3(x_228.x, x_228.y, x_228.z)));
   vec3 x_233 = vNormal;
-  specComp = max(0.0f, dot(x_233, angleW));
+  vec3 x_234 = angleW;
+  specComp = max(0.0f, dot(x_233, x_234));
   float x_237 = specComp;
   float x_238 = glossiness;
   specComp = pow(x_237, max(1.0f, x_238));
   float x_241 = specComp;
   vec3 x_242 = specularColor;
   result.specular = (x_242 * x_241);
-  return result;
+  lightingInfo x_245 = result;
+  return x_245;
 }
 
 uniform highp sampler2D TextureSamplerTexture_TextureSamplerSampler;
@@ -233,7 +247,8 @@
   vec3 output3 = vec3(0.0f, 0.0f, 0.0f);
   u_Float = 100.0f;
   u_Color = vec3(0.5f);
-  vec4 x_262 = texture(TextureSamplerTexture_TextureSamplerSampler, vMainuv);
+  vec2 x_261 = vMainuv;
+  vec4 x_262 = texture(TextureSamplerTexture_TextureSamplerSampler, x_261);
   tempTextureRead = x_262;
   vec4 x_264 = tempTextureRead;
   float x_273 = x_269.textureInfoName;
@@ -245,69 +260,128 @@
   uvOffset = vec2(0.0f);
   float x_292 = x_269.u_bumpStrength;
   normalScale = (1.0f / x_292);
-  if (tint_symbol) {
-    x_299 = v_uv;
+  bool x_298 = tint_symbol;
+  if (x_298) {
+    vec2 x_303 = v_uv;
+    x_299 = x_303;
   } else {
-    x_299 = -(v_uv);
+    vec2 x_305 = v_uv;
+    x_299 = -(x_305);
   }
-  TBNUV = x_299;
+  vec2 x_307 = x_299;
+  TBNUV = x_307;
   vec4 x_310 = v_output2;
-  param_3 = (vec3(x_310.x, x_310.y, x_310.z) * normalScale);
+  float x_312 = normalScale;
+  param_3 = (vec3(x_310.x, x_310.y, x_310.z) * x_312);
   vec4 x_317 = v_output1;
   param_4 = vec3(x_317.x, x_317.y, x_317.z);
-  param_5 = TBNUV;
+  vec2 x_320 = TBNUV;
+  param_5 = x_320;
   vec2 x_324 = x_269.tangentSpaceParameter0;
   param_6 = x_324;
   mat3 x_325 = cotangent_frame_vf3_vf3_vf2_vf2_(param_3, param_4, param_5, param_6);
   TBN = x_325;
-  param_7 = TBN;
+  mat3 x_328 = TBN;
+  param_7 = x_328;
   mat3 x_329 = transposeMat3_mf33_(param_7);
   invTBN = x_329;
-  vec3 x_334 = (invTBN * -(output5));
-  parallaxLimit = (length(vec2(x_334.x, x_334.y)) / (invTBN * -(output5)).z);
+  mat3 x_331 = invTBN;
+  vec3 x_332 = output5;
+  vec3 x_334 = (x_331 * -(x_332));
+  mat3 x_337 = invTBN;
+  vec3 x_338 = output5;
+  parallaxLimit = (length(vec2(x_334.x, x_334.y)) / (x_337 * -(x_338)).z);
   float x_345 = x_269.u_parallaxScale;
-  parallaxLimit = (parallaxLimit * x_345);
-  vec3 x_352 = (invTBN * -(output5));
+  float x_346 = parallaxLimit;
+  parallaxLimit = (x_346 * x_345);
+  mat3 x_349 = invTBN;
+  vec3 x_350 = output5;
+  vec3 x_352 = (x_349 * -(x_350));
   vOffsetDir = normalize(vec2(x_352.x, x_352.y));
-  vMaxOffset = (vOffsetDir * parallaxLimit);
+  vec2 x_356 = vOffsetDir;
+  float x_357 = parallaxLimit;
+  vMaxOffset = (x_356 * x_357);
+  mat3 x_361 = invTBN;
+  vec3 x_362 = output5;
+  mat3 x_365 = invTBN;
   vec4 x_366 = v_output2;
-  numSamples = (15.0f + (dot((invTBN * -(output5)), (invTBN * vec3(x_366.x, x_366.y, x_366.z))) * -11.0f));
-  stepSize = (1.0f / numSamples);
+  numSamples = (15.0f + (dot((x_361 * -(x_362)), (x_365 * vec3(x_366.x, x_366.y, x_366.z))) * -11.0f));
+  float x_374 = numSamples;
+  stepSize = (1.0f / x_374);
   currRayHeight = 1.0f;
   vCurrOffset = vec2(0.0f);
   vLastOffset = vec2(0.0f);
   lastSampledHeight = 1.0f;
   currSampledHeight = 1.0f;
   i = 0;
-  {
-    for(; (i < 15); i = (i + 1)) {
-      vec4 x_397 = texture(TextureSamplerTexture_TextureSamplerSampler, (v_uv + vCurrOffset));
-      currSampledHeight = x_397.w;
-      if ((currSampledHeight > currRayHeight)) {
-        delta1 = (currSampledHeight - currRayHeight);
-        delta2 = ((currRayHeight + stepSize) - lastSampledHeight);
-        ratio = (delta1 / (delta1 + delta2));
-        vCurrOffset = ((vLastOffset * ratio) + (vCurrOffset * (1.0f - ratio)));
-        break;
-      } else {
-        currRayHeight = (currRayHeight - stepSize);
-        vLastOffset = vCurrOffset;
-        vCurrOffset = (vCurrOffset + (vMaxOffset * stepSize));
-        lastSampledHeight = currSampledHeight;
-      }
+  while (true) {
+    int x_388 = i;
+    if ((x_388 < 15)) {
+    } else {
+      break;
+    }
+    vec2 x_394 = v_uv;
+    vec2 x_395 = vCurrOffset;
+    vec4 x_397 = texture(TextureSamplerTexture_TextureSamplerSampler, (x_394 + x_395));
+    currSampledHeight = x_397.w;
+    float x_400 = currSampledHeight;
+    float x_401 = currRayHeight;
+    if ((x_400 > x_401)) {
+      float x_406 = currSampledHeight;
+      float x_407 = currRayHeight;
+      delta1 = (x_406 - x_407);
+      float x_410 = currRayHeight;
+      float x_411 = stepSize;
+      float x_413 = lastSampledHeight;
+      delta2 = ((x_410 + x_411) - x_413);
+      float x_416 = delta1;
+      float x_417 = delta1;
+      float x_418 = delta2;
+      ratio = (x_416 / (x_417 + x_418));
+      float x_421 = ratio;
+      vec2 x_422 = vLastOffset;
+      float x_424 = ratio;
+      vec2 x_426 = vCurrOffset;
+      vCurrOffset = ((x_422 * x_421) + (x_426 * (1.0f - x_424)));
+      break;
+    } else {
+      float x_431 = stepSize;
+      float x_432 = currRayHeight;
+      currRayHeight = (x_432 - x_431);
+      vec2 x_434 = vCurrOffset;
+      vLastOffset = x_434;
+      float x_435 = stepSize;
+      vec2 x_436 = vMaxOffset;
+      vec2 x_438 = vCurrOffset;
+      vCurrOffset = (x_438 + (x_436 * x_435));
+      float x_440 = currSampledHeight;
+      lastSampledHeight = x_440;
+    }
+    {
+      int x_441 = i;
+      i = (x_441 + 1);
     }
   }
-  parallaxOcclusion_0 = vCurrOffset;
-  uvOffset = parallaxOcclusion_0;
-  vec4 x_452 = texture(TextureSamplerTexture_TextureSamplerSampler, (v_uv + uvOffset));
+  vec2 x_444 = vCurrOffset;
+  parallaxOcclusion_0 = x_444;
+  vec2 x_445 = parallaxOcclusion_0;
+  uvOffset = x_445;
+  vec2 x_449 = v_uv;
+  vec2 x_450 = uvOffset;
+  vec4 x_452 = texture(TextureSamplerTexture_TextureSamplerSampler, (x_449 + x_450));
   float x_454 = x_269.u_bumpStrength;
-  param_8 = TBN;
+  mat3 x_457 = TBN;
+  param_8 = x_457;
   param_9 = vec3(x_452.x, x_452.y, x_452.z);
   param_10 = (1.0f / x_454);
   vec3 x_461 = perturbNormal_mf33_vf3_f1_(param_8, param_9, param_10);
-  output4 = vec4(x_461.x, x_461.y, x_461.z, output4.w);
-  output6 = (v_uv + uvOffset);
-  vec4 x_475 = texture(TextureSampler1Texture_TextureSampler1Sampler, output6);
+  vec4 x_462 = output4;
+  output4 = vec4(x_461.x, x_461.y, x_461.z, x_462.w);
+  vec2 x_465 = v_uv;
+  vec2 x_466 = uvOffset;
+  output6 = (x_465 + x_466);
+  vec2 x_474 = output6;
+  vec4 x_475 = texture(TextureSampler1Texture_TextureSampler1Sampler, x_474);
   tempTextureRead1 = x_475;
   vec4 x_477 = tempTextureRead1;
   rgb1 = vec3(x_477.x, x_477.y, x_477.z);
@@ -315,13 +389,16 @@
   vec4 x_482 = v_output1;
   viewDirectionW_1 = normalize((x_481 - vec3(x_482.x, x_482.y, x_482.z)));
   shadow = 1.0f;
-  glossiness_1 = (1.0f * u_Float);
+  float x_488 = u_Float;
+  glossiness_1 = (1.0f * x_488);
   diffuseBase = vec3(0.0f);
   specularBase = vec3(0.0f);
   vec4 x_494 = output4;
   normalW = vec3(x_494.x, x_494.y, x_494.z);
-  param_11 = viewDirectionW_1;
-  param_12 = normalW;
+  vec3 x_501 = viewDirectionW_1;
+  param_11 = x_501;
+  vec3 x_503 = normalW;
+  param_12 = x_503;
   vec4 x_507 = light0.vLightData;
   param_13 = x_507;
   vec4 x_510 = light0.vLightDiffuse;
@@ -330,17 +407,28 @@
   param_15 = vec3(x_514.x, x_514.y, x_514.z);
   vec3 x_518 = light0.vLightGround;
   param_16 = x_518;
-  param_17 = glossiness_1;
+  float x_520 = glossiness_1;
+  param_17 = x_520;
   lightingInfo x_521 = computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(param_11, param_12, param_13, param_14, param_15, param_16, param_17);
   info = x_521;
   shadow = 1.0f;
   vec3 x_523 = info.diffuse;
-  diffuseBase = (diffuseBase + (x_523 * shadow));
+  float x_524 = shadow;
+  vec3 x_526 = diffuseBase;
+  diffuseBase = (x_526 + (x_523 * x_524));
   vec3 x_529 = info.specular;
-  specularBase = (specularBase + (x_529 * shadow));
-  diffuseOutput = (diffuseBase * rgb1);
-  specularOutput = (specularBase * u_Color);
-  output3 = (diffuseOutput + specularOutput);
+  float x_530 = shadow;
+  vec3 x_532 = specularBase;
+  specularBase = (x_532 + (x_529 * x_530));
+  vec3 x_535 = diffuseBase;
+  vec3 x_536 = rgb1;
+  diffuseOutput = (x_535 * x_536);
+  vec3 x_539 = specularBase;
+  vec3 x_540 = u_Color;
+  specularOutput = (x_539 * x_540);
+  vec3 x_543 = diffuseOutput;
+  vec3 x_544 = specularOutput;
+  output3 = (x_543 + x_544);
   vec3 x_548 = output3;
   glFragColor = vec4(x_548.x, x_548.y, x_548.z, 1.0f);
   return;
diff --git a/test/tint/bug/tint/951.spvasm.expected.dxc.hlsl b/test/tint/bug/tint/951.spvasm.expected.dxc.hlsl
index dfb1c66..bd7f975 100644
--- a/test/tint/bug/tint/951.spvasm.expected.dxc.hlsl
+++ b/test/tint/bug/tint/951.spvasm.expected.dxc.hlsl
@@ -40,9 +40,11 @@
   if ((x_63 < x_70)) {
     const float x_75 = getAAtOutCoords_();
     a_1 = x_75;
-    param = a_1;
+    const float x_77 = a_1;
+    param = x_77;
     const float x_78 = unaryOperation_f1_(param);
-    param_1 = index;
+    const int x_80 = index;
+    param_1 = x_80;
     param_2 = x_78;
     setOutput_i1_f1_(param_1, param_2);
   }
diff --git a/test/tint/bug/tint/951.spvasm.expected.fxc.hlsl b/test/tint/bug/tint/951.spvasm.expected.fxc.hlsl
index dfb1c66..bd7f975 100644
--- a/test/tint/bug/tint/951.spvasm.expected.fxc.hlsl
+++ b/test/tint/bug/tint/951.spvasm.expected.fxc.hlsl
@@ -40,9 +40,11 @@
   if ((x_63 < x_70)) {
     const float x_75 = getAAtOutCoords_();
     a_1 = x_75;
-    param = a_1;
+    const float x_77 = a_1;
+    param = x_77;
     const float x_78 = unaryOperation_f1_(param);
-    param_1 = index;
+    const int x_80 = index;
+    param_1 = x_80;
     param_2 = x_78;
     setOutput_i1_f1_(param_1, param_2);
   }
diff --git a/test/tint/bug/tint/951.spvasm.expected.glsl b/test/tint/bug/tint/951.spvasm.expected.glsl
index af2f6d4..e8e3065 100644
--- a/test/tint/bug/tint/951.spvasm.expected.glsl
+++ b/test/tint/bug/tint/951.spvasm.expected.glsl
@@ -55,9 +55,11 @@
   if ((x_63 < x_70)) {
     float x_75 = getAAtOutCoords_();
     a_1 = x_75;
-    param = a_1;
+    float x_77 = a_1;
+    param = x_77;
     float x_78 = unaryOperation_f1_(param);
-    param_1 = index;
+    int x_80 = index;
+    param_1 = x_80;
     param_2 = x_78;
     setOutput_i1_f1_(param_1, param_2);
   }
diff --git a/test/tint/bug/tint/977.spvasm.expected.dxc.hlsl b/test/tint/bug/tint/977.spvasm.expected.dxc.hlsl
index a3d4ec9..edecf62 100644
--- a/test/tint/bug/tint/977.spvasm.expected.dxc.hlsl
+++ b/test/tint/bug/tint/977.spvasm.expected.dxc.hlsl
@@ -23,7 +23,8 @@
     const float x_38 = b;
     x_26 = (sign(x_34) * pow(abs(x_36), x_38));
   }
-  return x_26;
+  const float x_41 = x_26;
+  return x_41;
 }
 
 void main_1() {
diff --git a/test/tint/bug/tint/977.spvasm.expected.fxc.hlsl b/test/tint/bug/tint/977.spvasm.expected.fxc.hlsl
index a3d4ec9..edecf62 100644
--- a/test/tint/bug/tint/977.spvasm.expected.fxc.hlsl
+++ b/test/tint/bug/tint/977.spvasm.expected.fxc.hlsl
@@ -23,7 +23,8 @@
     const float x_38 = b;
     x_26 = (sign(x_34) * pow(abs(x_36), x_38));
   }
-  return x_26;
+  const float x_41 = x_26;
+  return x_41;
 }
 
 void main_1() {
diff --git a/test/tint/bug/tint/977.spvasm.expected.glsl b/test/tint/bug/tint/977.spvasm.expected.glsl
index 8715d9e..84fa621 100644
--- a/test/tint/bug/tint/977.spvasm.expected.glsl
+++ b/test/tint/bug/tint/977.spvasm.expected.glsl
@@ -28,7 +28,8 @@
     float x_38 = b;
     x_26 = (sign(x_34) * pow(abs(x_36), x_38));
   }
-  return x_26;
+  float x_41 = x_26;
+  return x_41;
 }
 
 void main_1() {
diff --git a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.dxc.hlsl
index 16f5d2e..5c461fe 100644
--- a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.dxc.hlsl
@@ -4,10 +4,19 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 6u))); idx = (idx + 1u)) {
-      uint atomic_result = 0u;
-      InterlockedExchange(wg[(idx / 2u)][(idx % 2u)][(idx % 1u)], 0u, atomic_result);
+  [loop] while (true) {
+    const uint x_25 = idx;
+    if (!((x_25 < 6u))) {
+      break;
+    }
+    const uint x_31 = idx;
+    const uint x_33 = idx;
+    const uint x_35 = idx;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg[(x_31 / 2u)][(x_33 % 2u)][(x_35 % 1u)], 0u, atomic_result);
+    {
+      const uint x_42 = idx;
+      idx = (x_42 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -17,7 +26,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_57 = local_invocation_index_1;
+  compute_main_inner(x_57);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.fxc.hlsl
index 16f5d2e..5c461fe 100644
--- a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.fxc.hlsl
@@ -4,10 +4,19 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 6u))); idx = (idx + 1u)) {
-      uint atomic_result = 0u;
-      InterlockedExchange(wg[(idx / 2u)][(idx % 2u)][(idx % 1u)], 0u, atomic_result);
+  [loop] while (true) {
+    const uint x_25 = idx;
+    if (!((x_25 < 6u))) {
+      break;
+    }
+    const uint x_31 = idx;
+    const uint x_33 = idx;
+    const uint x_35 = idx;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg[(x_31 / 2u)][(x_33 % 2u)][(x_35 % 1u)], 0u, atomic_result);
+    {
+      const uint x_42 = idx;
+      idx = (x_42 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -17,7 +26,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_57 = local_invocation_index_1;
+  compute_main_inner(x_57);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.glsl b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.glsl
index 4cdd505..f73d1c9 100644
--- a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.glsl
@@ -5,9 +5,18 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    for(; !(!((idx < 6u))); idx = (idx + 1u)) {
-      atomicExchange(wg[(idx / 2u)][(idx % 2u)][(idx % 1u)], 0u);
+  while (true) {
+    uint x_25 = idx;
+    if (!((x_25 < 6u))) {
+      break;
+    }
+    uint x_31 = idx;
+    uint x_33 = idx;
+    uint x_35 = idx;
+    atomicExchange(wg[(x_31 / 2u)][(x_33 % 2u)][(x_35 % 1u)], 0u);
+    {
+      uint x_42 = idx;
+      idx = (x_42 + 1u);
     }
   }
   barrier();
@@ -16,7 +25,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_57 = local_invocation_index_1;
+  compute_main_inner(x_57);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/array/array.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomicStore/array/array.spvasm.expected.dxc.hlsl
index 76ff725..aecd8c7 100644
--- a/test/tint/builtins/atomicStore/array/array.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/array/array.spvasm.expected.dxc.hlsl
@@ -4,10 +4,17 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 4u))); idx = (idx + 1u)) {
-      uint atomic_result = 0u;
-      InterlockedExchange(wg[idx], 0u, atomic_result);
+  [loop] while (true) {
+    const uint x_21 = idx;
+    if (!((x_21 < 4u))) {
+      break;
+    }
+    const uint x_26 = idx;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg[x_26], 0u, atomic_result);
+    {
+      const uint x_33 = idx;
+      idx = (x_33 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -17,7 +24,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_47 = local_invocation_index_1;
+  compute_main_inner(x_47);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/array/array.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomicStore/array/array.spvasm.expected.fxc.hlsl
index 76ff725..aecd8c7 100644
--- a/test/tint/builtins/atomicStore/array/array.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/array/array.spvasm.expected.fxc.hlsl
@@ -4,10 +4,17 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 4u))); idx = (idx + 1u)) {
-      uint atomic_result = 0u;
-      InterlockedExchange(wg[idx], 0u, atomic_result);
+  [loop] while (true) {
+    const uint x_21 = idx;
+    if (!((x_21 < 4u))) {
+      break;
+    }
+    const uint x_26 = idx;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg[x_26], 0u, atomic_result);
+    {
+      const uint x_33 = idx;
+      idx = (x_33 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -17,7 +24,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_47 = local_invocation_index_1;
+  compute_main_inner(x_47);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/array/array.spvasm.expected.glsl b/test/tint/builtins/atomicStore/array/array.spvasm.expected.glsl
index a8c2193..bf89cae 100644
--- a/test/tint/builtins/atomicStore/array/array.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/array/array.spvasm.expected.glsl
@@ -5,9 +5,16 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    for(; !(!((idx < 4u))); idx = (idx + 1u)) {
-      atomicExchange(wg[idx], 0u);
+  while (true) {
+    uint x_21 = idx;
+    if (!((x_21 < 4u))) {
+      break;
+    }
+    uint x_26 = idx;
+    atomicExchange(wg[x_26], 0u);
+    {
+      uint x_33 = idx;
+      idx = (x_33 + 1u);
     }
   }
   barrier();
@@ -16,7 +23,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_47 = local_invocation_index_1;
+  compute_main_inner(x_47);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.dxc.hlsl
index 16f5d2e..5c461fe 100644
--- a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.dxc.hlsl
@@ -4,10 +4,19 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 6u))); idx = (idx + 1u)) {
-      uint atomic_result = 0u;
-      InterlockedExchange(wg[(idx / 2u)][(idx % 2u)][(idx % 1u)], 0u, atomic_result);
+  [loop] while (true) {
+    const uint x_25 = idx;
+    if (!((x_25 < 6u))) {
+      break;
+    }
+    const uint x_31 = idx;
+    const uint x_33 = idx;
+    const uint x_35 = idx;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg[(x_31 / 2u)][(x_33 % 2u)][(x_35 % 1u)], 0u, atomic_result);
+    {
+      const uint x_42 = idx;
+      idx = (x_42 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -17,7 +26,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_57 = local_invocation_index_1;
+  compute_main_inner(x_57);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.fxc.hlsl
index 16f5d2e..5c461fe 100644
--- a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.fxc.hlsl
@@ -4,10 +4,19 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 6u))); idx = (idx + 1u)) {
-      uint atomic_result = 0u;
-      InterlockedExchange(wg[(idx / 2u)][(idx % 2u)][(idx % 1u)], 0u, atomic_result);
+  [loop] while (true) {
+    const uint x_25 = idx;
+    if (!((x_25 < 6u))) {
+      break;
+    }
+    const uint x_31 = idx;
+    const uint x_33 = idx;
+    const uint x_35 = idx;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg[(x_31 / 2u)][(x_33 % 2u)][(x_35 % 1u)], 0u, atomic_result);
+    {
+      const uint x_42 = idx;
+      idx = (x_42 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -17,7 +26,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_57 = local_invocation_index_1;
+  compute_main_inner(x_57);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.glsl b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.glsl
index 4cdd505..f73d1c9 100644
--- a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.glsl
@@ -5,9 +5,18 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    for(; !(!((idx < 6u))); idx = (idx + 1u)) {
-      atomicExchange(wg[(idx / 2u)][(idx % 2u)][(idx % 1u)], 0u);
+  while (true) {
+    uint x_25 = idx;
+    if (!((x_25 < 6u))) {
+      break;
+    }
+    uint x_31 = idx;
+    uint x_33 = idx;
+    uint x_35 = idx;
+    atomicExchange(wg[(x_31 / 2u)][(x_33 % 2u)][(x_35 % 1u)], 0u);
+    {
+      uint x_42 = idx;
+      idx = (x_42 + 1u);
     }
   }
   barrier();
@@ -16,7 +25,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_57 = local_invocation_index_1;
+  compute_main_inner(x_57);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.dxc.hlsl
index 9d31dd1..b3b714a 100644
--- a/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.dxc.hlsl
@@ -10,13 +10,19 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 10u))); idx = (idx + 1u)) {
-      const uint x_28 = idx;
-      wg[x_28].x = 0;
-      uint atomic_result = 0u;
-      InterlockedExchange(wg[x_28].a, 0u, atomic_result);
-      wg[x_28].y = 0u;
+  [loop] while (true) {
+    const uint x_23 = idx;
+    if (!((x_23 < 10u))) {
+      break;
+    }
+    const uint x_28 = idx;
+    wg[x_28].x = 0;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg[x_28].a, 0u, atomic_result);
+    wg[x_28].y = 0u;
+    {
+      const uint x_41 = idx;
+      idx = (x_41 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -26,7 +32,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_53 = local_invocation_index_1;
+  compute_main_inner(x_53);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.fxc.hlsl
index 9d31dd1..b3b714a 100644
--- a/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.fxc.hlsl
@@ -10,13 +10,19 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 10u))); idx = (idx + 1u)) {
-      const uint x_28 = idx;
-      wg[x_28].x = 0;
-      uint atomic_result = 0u;
-      InterlockedExchange(wg[x_28].a, 0u, atomic_result);
-      wg[x_28].y = 0u;
+  [loop] while (true) {
+    const uint x_23 = idx;
+    if (!((x_23 < 10u))) {
+      break;
+    }
+    const uint x_28 = idx;
+    wg[x_28].x = 0;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg[x_28].a, 0u, atomic_result);
+    wg[x_28].y = 0u;
+    {
+      const uint x_41 = idx;
+      idx = (x_41 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -26,7 +32,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_53 = local_invocation_index_1;
+  compute_main_inner(x_53);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.glsl
index 4f23cb9..6252580 100644
--- a/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.glsl
@@ -17,12 +17,18 @@
 void compute_main_inner(uint local_invocation_index) {
   uint idx = 0u;
   idx = local_invocation_index;
-  {
-    for(; !(!((idx < 10u))); idx = (idx + 1u)) {
-      uint x_28 = idx;
-      wg[x_28].x = 0;
-      atomicExchange(wg[x_28].a, 0u);
-      wg[x_28].y = 0u;
+  while (true) {
+    uint x_23 = idx;
+    if (!((x_23 < 10u))) {
+      break;
+    }
+    uint x_28 = idx;
+    wg[x_28].x = 0;
+    atomicExchange(wg[x_28].a, 0u);
+    wg[x_28].y = 0u;
+    {
+      uint x_41 = idx;
+      idx = (x_41 + 1u);
     }
   }
   barrier();
@@ -31,7 +37,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_53 = local_invocation_index_1;
+  compute_main_inner(x_53);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.dxc.hlsl
index cb340f2..aa81130 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.dxc.hlsl
@@ -22,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_39 = local_invocation_index_1;
+  compute_main_inner(x_39);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.fxc.hlsl
index cb340f2..aa81130 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.fxc.hlsl
@@ -22,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_39 = local_invocation_index_1;
+  compute_main_inner(x_39);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.glsl
index 4d0836e..0b67618 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.glsl
@@ -25,7 +25,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_39 = local_invocation_index_1;
+  compute_main_inner(x_39);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.dxc.hlsl
index 403d1fb..2245126 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_35 = local_invocation_index_1;
+  compute_main_inner(x_35);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.fxc.hlsl
index 403d1fb..2245126 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_35 = local_invocation_index_1;
+  compute_main_inner(x_35);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.glsl
index 2b03ef6..4116efd 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.glsl
@@ -24,7 +24,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_35 = local_invocation_index_1;
+  compute_main_inner(x_35);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.dxc.hlsl
index 4449c42..8a073d1 100644
--- a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.dxc.hlsl
@@ -39,7 +39,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_44 = local_invocation_index_1;
+  compute_main_inner(x_44);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.fxc.hlsl
index 4449c42..8a073d1 100644
--- a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.fxc.hlsl
@@ -39,7 +39,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_44 = local_invocation_index_1;
+  compute_main_inner(x_44);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.glsl
index 1d63b30..c0e09d0 100644
--- a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.glsl
@@ -61,7 +61,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_44 = local_invocation_index_1;
+  compute_main_inner(x_44);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.dxc.hlsl
index beb2810..eedfde2 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.dxc.hlsl
@@ -12,10 +12,17 @@
   wg.x = 0;
   wg.y = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 10u))); idx = (idx + 1u)) {
-      uint atomic_result = 0u;
-      InterlockedExchange(wg.a[idx], 0u, atomic_result);
+  [loop] while (true) {
+    const uint x_30 = idx;
+    if (!((x_30 < 10u))) {
+      break;
+    }
+    const uint x_35 = idx;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg.a[x_35], 0u, atomic_result);
+    {
+      const uint x_41 = idx;
+      idx = (x_41 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -25,7 +32,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_53 = local_invocation_index_1;
+  compute_main_inner(x_53);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.fxc.hlsl
index beb2810..eedfde2 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.fxc.hlsl
@@ -12,10 +12,17 @@
   wg.x = 0;
   wg.y = 0u;
   idx = local_invocation_index;
-  {
-    [loop] for(; !(!((idx < 10u))); idx = (idx + 1u)) {
-      uint atomic_result = 0u;
-      InterlockedExchange(wg.a[idx], 0u, atomic_result);
+  [loop] while (true) {
+    const uint x_30 = idx;
+    if (!((x_30 < 10u))) {
+      break;
+    }
+    const uint x_35 = idx;
+    uint atomic_result = 0u;
+    InterlockedExchange(wg.a[x_35], 0u, atomic_result);
+    {
+      const uint x_41 = idx;
+      idx = (x_41 + 1u);
     }
   }
   GroupMemoryBarrierWithGroupSync();
@@ -25,7 +32,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_53 = local_invocation_index_1;
+  compute_main_inner(x_53);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.glsl
index 0a37b13..b6add35 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.glsl
@@ -19,9 +19,16 @@
   wg.x = 0;
   wg.y = 0u;
   idx = local_invocation_index;
-  {
-    for(; !(!((idx < 10u))); idx = (idx + 1u)) {
-      atomicExchange(wg.a[idx], 0u);
+  while (true) {
+    uint x_30 = idx;
+    if (!((x_30 < 10u))) {
+      break;
+    }
+    uint x_35 = idx;
+    atomicExchange(wg.a[x_35], 0u);
+    {
+      uint x_41 = idx;
+      idx = (x_41 + 1u);
     }
   }
   barrier();
@@ -30,7 +37,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_53 = local_invocation_index_1;
+  compute_main_inner(x_53);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.dxc.hlsl
index 403d1fb..2245126 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_35 = local_invocation_index_1;
+  compute_main_inner(x_35);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.fxc.hlsl
index 403d1fb..2245126 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_35 = local_invocation_index_1;
+  compute_main_inner(x_35);
   return;
 }
 
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.glsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.glsl
index 2b03ef6..4116efd 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.glsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.glsl
@@ -24,7 +24,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_35 = local_invocation_index_1;
+  compute_main_inner(x_35);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.dxc.hlsl
index ccdf1ad..89a6a35 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.fxc.hlsl
index ccdf1ad..89a6a35 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.glsl
index b745861..c95c6a9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.dxc.hlsl
index c36ae57..d1179cc 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.fxc.hlsl
index c36ae57..d1179cc 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.glsl
index 97c0c6f..5a5b50b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.dxc.hlsl
index 2e86713..c3e91bf 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.fxc.hlsl
index 2e86713..c3e91bf 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.glsl
index f914b2f..601ae32 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.dxc.hlsl
index fb9b516..b215600 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.fxc.hlsl
index fb9b516..b215600 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.glsl
index 92c68d7..9b6741b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.dxc.hlsl
index dae580e..44cf740 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -33,7 +33,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_36 = local_invocation_index_1;
+  compute_main_inner(x_36);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.fxc.hlsl
index dae580e..44cf740 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -33,7 +33,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_36 = local_invocation_index_1;
+  compute_main_inner(x_36);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
index 6ccd038..a4305e7 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
@@ -34,7 +34,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_36 = local_invocation_index_1;
+  compute_main_inner(x_36);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.dxc.hlsl
index b4fbb77..1e87d0a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -33,7 +33,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_35 = local_invocation_index_1;
+  compute_main_inner(x_35);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.fxc.hlsl
index b4fbb77..1e87d0a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -33,7 +33,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_35 = local_invocation_index_1;
+  compute_main_inner(x_35);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
index 7bd1617e..680871b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
@@ -34,7 +34,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_35 = local_invocation_index_1;
+  compute_main_inner(x_35);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.dxc.hlsl
index b994cfe..92f0f6e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.fxc.hlsl
index b994cfe..92f0f6e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.glsl
index 3775b8f..e836943 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.dxc.hlsl
index 926f18e..d04f2e8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.fxc.hlsl
index 926f18e..d04f2e8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.glsl
index 7bfe69f..49abca3 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.dxc.hlsl
index 1593c13..3e2674e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.fxc.hlsl
index 1593c13..3e2674e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.glsl
index e0c158b..351d2dc 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.dxc.hlsl
index 803eadd..3aa482d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_29 = local_invocation_index_1;
+  compute_main_inner(x_29);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.fxc.hlsl
index 803eadd..3aa482d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_29 = local_invocation_index_1;
+  compute_main_inner(x_29);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.glsl
index 8bd40a6..2ad60db 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_29 = local_invocation_index_1;
+  compute_main_inner(x_29);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.dxc.hlsl
index bdcfb2a..a508d4e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.fxc.hlsl
index bdcfb2a..a508d4e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.glsl
index 44e03cf..f76a297 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.dxc.hlsl
index 9c405cb..3100cbf 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.fxc.hlsl
index 9c405cb..3100cbf 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.glsl
index dc7354c..3af9a65 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.dxc.hlsl
index 72197d7..69c3b10 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.fxc.hlsl
index 72197d7..69c3b10 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.glsl
index f8151e3..ff9d11f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.dxc.hlsl
index f91f02a..688677a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.fxc.hlsl
index f91f02a..688677a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.glsl
index 466b141..9360d13 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.dxc.hlsl
index 9f15c6c..85146d8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.fxc.hlsl
index 9f15c6c..85146d8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.glsl
index 4fdf338..db9f5ee 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.dxc.hlsl
index 22393c1..178bc59 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.fxc.hlsl
index 22393c1..178bc59 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.glsl
index e9191a7..371b0f9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.dxc.hlsl
index c2dbd19..8b0fd82 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -16,7 +16,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_29 = local_invocation_index_1;
+  compute_main_inner(x_29);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.fxc.hlsl
index c2dbd19..8b0fd82 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -16,7 +16,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_29 = local_invocation_index_1;
+  compute_main_inner(x_29);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.glsl
index cc9e431..7804c73 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.glsl
@@ -15,7 +15,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_29 = local_invocation_index_1;
+  compute_main_inner(x_29);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.dxc.hlsl
index 309c7df..55b8f78 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -16,7 +16,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_28 = local_invocation_index_1;
+  compute_main_inner(x_28);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.fxc.hlsl
index 309c7df..55b8f78 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -16,7 +16,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_28 = local_invocation_index_1;
+  compute_main_inner(x_28);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.glsl
index 678f189..825825c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.glsl
@@ -15,7 +15,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_28 = local_invocation_index_1;
+  compute_main_inner(x_28);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.dxc.hlsl
index 75a1b4a..4d80582 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.fxc.hlsl
index 75a1b4a..4d80582 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.glsl
index 0583afc..f600cd5 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.dxc.hlsl
index e6f8372..dba0df9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.fxc.hlsl
index e6f8372..dba0df9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.glsl
index 49553d0..cec1ba9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.dxc.hlsl
index 5ffbd31..3cec31a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.fxc.hlsl
index 5ffbd31..3cec31a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.glsl
index b260d4d..cfcab07 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.dxc.hlsl
index 8296d86..2e953e9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.fxc.hlsl
index 8296d86..2e953e9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.glsl
index a15719a..639b4ce 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.dxc.hlsl
index 09f225c..04ff6d8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.fxc.hlsl
index 09f225c..04ff6d8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
index b745861..c95c6a9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.dxc.hlsl
index 33bfa08..88c04ad 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.fxc.hlsl
index 33bfa08..88c04ad 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
index 97c0c6f..5a5b50b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.dxc.hlsl
index ccdf1ad..89a6a35 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.fxc.hlsl
index ccdf1ad..89a6a35 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
index b745861..c95c6a9 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.dxc.hlsl
index c36ae57..d1179cc 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.fxc.hlsl
index c36ae57..d1179cc 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
index 97c0c6f..5a5b50b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.dxc.hlsl
index 1b338c9..c8e31ae 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicAdd(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicAdd(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.fxc.hlsl
index 1b338c9..c8e31ae 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicAdd(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicAdd(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.glsl
index d0daed9..631f6f9 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicAdd(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicAdd(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicAdd(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicAdd(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.dxc.hlsl
index 845d1f7..e655ec0 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicAdd(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicAdd(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.fxc.hlsl
index 845d1f7..e655ec0 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicAdd(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicAdd(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.glsl
index 7e082b7..eaa0443 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicAdd(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicAdd(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicAdd(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicAdd(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.dxc.hlsl
index 0cfd696..35cf5f1 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedAdd(arg_0, arg_1, atomic_result);
+  InterlockedAdd(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.fxc.hlsl
index 0cfd696..35cf5f1 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedAdd(arg_0, arg_1, atomic_result);
+  InterlockedAdd(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.glsl
index 89a4577..aa80ede 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_15 = atomicAdd(arg_0, arg_1);
+  int x_19 = arg_1;
+  int x_15 = atomicAdd(arg_0, x_19);
   res = x_15;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.dxc.hlsl
index 380a1a5..8aae75d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedAdd(arg_0, arg_1, atomic_result);
+  InterlockedAdd(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.fxc.hlsl
index 380a1a5..8aae75d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedAdd(arg_0, arg_1, atomic_result);
+  InterlockedAdd(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.glsl
index 07177c9..dbfc37a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_14 = atomicAdd(arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_14 = atomicAdd(arg_0, x_18);
   res = x_14;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.dxc.hlsl
index ea4a0f8..fc213fb 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicAnd(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicAnd(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.fxc.hlsl
index ea4a0f8..fc213fb 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicAnd(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicAnd(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.glsl
index f27eaef..732aecc 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicAnd(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicAnd(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicAnd(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicAnd(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.dxc.hlsl
index 44c8b7d..e8e9bef 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicAnd(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicAnd(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.fxc.hlsl
index 44c8b7d..e8e9bef 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicAnd(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicAnd(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.glsl
index 1d3eb24..9ca3126 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicAnd(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicAnd(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicAnd(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicAnd(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.dxc.hlsl
index cd9a7b7..39a733b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedAnd(arg_0, arg_1, atomic_result);
+  InterlockedAnd(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.fxc.hlsl
index cd9a7b7..39a733b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedAnd(arg_0, arg_1, atomic_result);
+  InterlockedAnd(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.glsl
index cc74ce6..564bc63 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_15 = atomicAnd(arg_0, arg_1);
+  int x_19 = arg_1;
+  int x_15 = atomicAnd(arg_0, x_19);
   res = x_15;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.dxc.hlsl
index 37f4fee..8134062 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedAnd(arg_0, arg_1, atomic_result);
+  InterlockedAnd(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.fxc.hlsl
index 37f4fee..8134062 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedAnd(arg_0, arg_1, atomic_result);
+  InterlockedAnd(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.glsl
index 39b8c3e..2c7ded0 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_14 = atomicAnd(arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_14 = atomicAnd(arg_0, x_18);
   res = x_14;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.dxc.hlsl
index d2d0b54..43cd8a8 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.dxc.hlsl
@@ -25,7 +25,8 @@
   arg_1 = 1;
   arg_2 = 1;
   const int x_23 = arg_2;
-  const atomic_compare_exchange_weak_ret_type tint_symbol = tint_atomicCompareExchangeWeak(sb_rw, 0u, arg_1, x_23);
+  const int x_24 = arg_1;
+  const atomic_compare_exchange_weak_ret_type tint_symbol = tint_atomicCompareExchangeWeak(sb_rw, 0u, x_24, x_23);
   const int old_value_1 = tint_symbol.old_value;
   const int x_25 = old_value_1;
   const x__atomic_compare_exchange_resulti32 tint_symbol_1 = {x_25, (x_25 == x_23)};
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.fxc.hlsl
index d2d0b54..43cd8a8 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.fxc.hlsl
@@ -25,7 +25,8 @@
   arg_1 = 1;
   arg_2 = 1;
   const int x_23 = arg_2;
-  const atomic_compare_exchange_weak_ret_type tint_symbol = tint_atomicCompareExchangeWeak(sb_rw, 0u, arg_1, x_23);
+  const int x_24 = arg_1;
+  const atomic_compare_exchange_weak_ret_type tint_symbol = tint_atomicCompareExchangeWeak(sb_rw, 0u, x_24, x_23);
   const int old_value_1 = tint_symbol.old_value;
   const int x_25 = old_value_1;
   const x__atomic_compare_exchange_resulti32 tint_symbol_1 = {x_25, (x_25 == x_23)};
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.glsl
index b19348c..9a5806f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.glsl
@@ -27,9 +27,10 @@
   arg_1 = 1;
   arg_2 = 1;
   int x_23 = arg_2;
+  int x_24 = arg_1;
   atomic_compare_exchange_resulti32 atomic_compare_result;
-  atomic_compare_result.old_value = atomicCompSwap(sb_rw.arg_0, arg_1, x_23);
-  atomic_compare_result.exchanged = atomic_compare_result.old_value == arg_1;
+  atomic_compare_result.old_value = atomicCompSwap(sb_rw.arg_0, x_24, x_23);
+  atomic_compare_result.exchanged = atomic_compare_result.old_value == x_24;
   atomic_compare_exchange_resulti32 tint_symbol = atomic_compare_result;
   int old_value_1 = tint_symbol.old_value;
   int x_25 = old_value_1;
@@ -79,9 +80,10 @@
   arg_1 = 1;
   arg_2 = 1;
   int x_23 = arg_2;
+  int x_24 = arg_1;
   atomic_compare_exchange_resulti32 atomic_compare_result;
-  atomic_compare_result.old_value = atomicCompSwap(sb_rw.arg_0, arg_1, x_23);
-  atomic_compare_result.exchanged = atomic_compare_result.old_value == arg_1;
+  atomic_compare_result.old_value = atomicCompSwap(sb_rw.arg_0, x_24, x_23);
+  atomic_compare_result.exchanged = atomic_compare_result.old_value == x_24;
   atomic_compare_exchange_resulti32 tint_symbol = atomic_compare_result;
   int old_value_1 = tint_symbol.old_value;
   int x_25 = old_value_1;
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.dxc.hlsl
index b219eb1..c273046 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.dxc.hlsl
@@ -25,7 +25,8 @@
   arg_1 = 1u;
   arg_2 = 1u;
   const uint x_21 = arg_2;
-  const atomic_compare_exchange_weak_ret_type tint_symbol = tint_atomicCompareExchangeWeak(sb_rw, 0u, arg_1, x_21);
+  const uint x_22 = arg_1;
+  const atomic_compare_exchange_weak_ret_type tint_symbol = tint_atomicCompareExchangeWeak(sb_rw, 0u, x_22, x_21);
   const uint old_value_1 = tint_symbol.old_value;
   const uint x_23 = old_value_1;
   const x__atomic_compare_exchange_resultu32 tint_symbol_1 = {x_23, (x_23 == x_21)};
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.fxc.hlsl
index b219eb1..c273046 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.fxc.hlsl
@@ -25,7 +25,8 @@
   arg_1 = 1u;
   arg_2 = 1u;
   const uint x_21 = arg_2;
-  const atomic_compare_exchange_weak_ret_type tint_symbol = tint_atomicCompareExchangeWeak(sb_rw, 0u, arg_1, x_21);
+  const uint x_22 = arg_1;
+  const atomic_compare_exchange_weak_ret_type tint_symbol = tint_atomicCompareExchangeWeak(sb_rw, 0u, x_22, x_21);
   const uint old_value_1 = tint_symbol.old_value;
   const uint x_23 = old_value_1;
   const x__atomic_compare_exchange_resultu32 tint_symbol_1 = {x_23, (x_23 == x_21)};
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.glsl
index 43fa00c..56d1454 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.glsl
@@ -27,9 +27,10 @@
   arg_1 = 1u;
   arg_2 = 1u;
   uint x_21 = arg_2;
+  uint x_22 = arg_1;
   atomic_compare_exchange_resultu32 atomic_compare_result;
-  atomic_compare_result.old_value = atomicCompSwap(sb_rw.arg_0, arg_1, x_21);
-  atomic_compare_result.exchanged = atomic_compare_result.old_value == arg_1;
+  atomic_compare_result.old_value = atomicCompSwap(sb_rw.arg_0, x_22, x_21);
+  atomic_compare_result.exchanged = atomic_compare_result.old_value == x_22;
   atomic_compare_exchange_resultu32 tint_symbol = atomic_compare_result;
   uint old_value_1 = tint_symbol.old_value;
   uint x_23 = old_value_1;
@@ -79,9 +80,10 @@
   arg_1 = 1u;
   arg_2 = 1u;
   uint x_21 = arg_2;
+  uint x_22 = arg_1;
   atomic_compare_exchange_resultu32 atomic_compare_result;
-  atomic_compare_result.old_value = atomicCompSwap(sb_rw.arg_0, arg_1, x_21);
-  atomic_compare_result.exchanged = atomic_compare_result.old_value == arg_1;
+  atomic_compare_result.old_value = atomicCompSwap(sb_rw.arg_0, x_22, x_21);
+  atomic_compare_result.exchanged = atomic_compare_result.old_value == x_22;
   atomic_compare_exchange_resultu32 tint_symbol = atomic_compare_result;
   uint old_value_1 = tint_symbol.old_value;
   uint x_23 = old_value_1;
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.dxc.hlsl
index afd64c0..e9f292a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -17,8 +17,9 @@
   arg_1 = 1;
   arg_2 = 1;
   const int x_22 = arg_2;
+  const int x_23 = arg_1;
   atomic_compare_exchange_resulti32 atomic_result = (atomic_compare_exchange_resulti32)0;
-  int atomic_compare_value = arg_1;
+  int atomic_compare_value = x_23;
   InterlockedCompareExchange(arg_0, atomic_compare_value, x_22, atomic_result.old_value);
   atomic_result.exchanged = atomic_result.old_value == atomic_compare_value;
   const atomic_compare_exchange_resulti32 tint_symbol_2 = atomic_result;
@@ -38,7 +39,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_41 = local_invocation_index_1;
+  compute_main_inner(x_41);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.fxc.hlsl
index afd64c0..e9f292a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -17,8 +17,9 @@
   arg_1 = 1;
   arg_2 = 1;
   const int x_22 = arg_2;
+  const int x_23 = arg_1;
   atomic_compare_exchange_resulti32 atomic_result = (atomic_compare_exchange_resulti32)0;
-  int atomic_compare_value = arg_1;
+  int atomic_compare_value = x_23;
   InterlockedCompareExchange(arg_0, atomic_compare_value, x_22, atomic_result.old_value);
   atomic_result.exchanged = atomic_result.old_value == atomic_compare_value;
   const atomic_compare_exchange_resulti32 tint_symbol_2 = atomic_result;
@@ -38,7 +39,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_41 = local_invocation_index_1;
+  compute_main_inner(x_41);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
index c370e71..14a7d5a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.glsl
@@ -20,9 +20,10 @@
   arg_1 = 1;
   arg_2 = 1;
   int x_22 = arg_2;
+  int x_23 = arg_1;
   atomic_compare_exchange_resulti32 atomic_compare_result;
-  atomic_compare_result.old_value = atomicCompSwap(arg_0, arg_1, x_22);
-  atomic_compare_result.exchanged = atomic_compare_result.old_value == arg_1;
+  atomic_compare_result.old_value = atomicCompSwap(arg_0, x_23, x_22);
+  atomic_compare_result.exchanged = atomic_compare_result.old_value == x_23;
   atomic_compare_exchange_resulti32 tint_symbol = atomic_compare_result;
   int old_value_1 = tint_symbol.old_value;
   int x_24 = old_value_1;
@@ -39,7 +40,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_41 = local_invocation_index_1;
+  compute_main_inner(x_41);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.dxc.hlsl
index 0a1e026..419b817 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -17,8 +17,9 @@
   arg_1 = 1u;
   arg_2 = 1u;
   const uint x_21 = arg_2;
+  const uint x_22 = arg_1;
   atomic_compare_exchange_resultu32 atomic_result = (atomic_compare_exchange_resultu32)0;
-  uint atomic_compare_value = arg_1;
+  uint atomic_compare_value = x_22;
   InterlockedCompareExchange(arg_0, atomic_compare_value, x_21, atomic_result.old_value);
   atomic_result.exchanged = atomic_result.old_value == atomic_compare_value;
   const atomic_compare_exchange_resultu32 tint_symbol_2 = atomic_result;
@@ -38,7 +39,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_40 = local_invocation_index_1;
+  compute_main_inner(x_40);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.fxc.hlsl
index 0a1e026..419b817 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -17,8 +17,9 @@
   arg_1 = 1u;
   arg_2 = 1u;
   const uint x_21 = arg_2;
+  const uint x_22 = arg_1;
   atomic_compare_exchange_resultu32 atomic_result = (atomic_compare_exchange_resultu32)0;
-  uint atomic_compare_value = arg_1;
+  uint atomic_compare_value = x_22;
   InterlockedCompareExchange(arg_0, atomic_compare_value, x_21, atomic_result.old_value);
   atomic_result.exchanged = atomic_result.old_value == atomic_compare_value;
   const atomic_compare_exchange_resultu32 tint_symbol_2 = atomic_result;
@@ -38,7 +39,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_40 = local_invocation_index_1;
+  compute_main_inner(x_40);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
index 645a53e..8dd64fc 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.glsl
@@ -20,9 +20,10 @@
   arg_1 = 1u;
   arg_2 = 1u;
   uint x_21 = arg_2;
+  uint x_22 = arg_1;
   atomic_compare_exchange_resultu32 atomic_compare_result;
-  atomic_compare_result.old_value = atomicCompSwap(arg_0, arg_1, x_21);
-  atomic_compare_result.exchanged = atomic_compare_result.old_value == arg_1;
+  atomic_compare_result.old_value = atomicCompSwap(arg_0, x_22, x_21);
+  atomic_compare_result.exchanged = atomic_compare_result.old_value == x_22;
   atomic_compare_exchange_resultu32 tint_symbol = atomic_compare_result;
   uint old_value_1 = tint_symbol.old_value;
   uint x_23 = old_value_1;
@@ -39,7 +40,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_40 = local_invocation_index_1;
+  compute_main_inner(x_40);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.dxc.hlsl
index 32a2a70..2ad41c1 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicExchange(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicExchange(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.fxc.hlsl
index 32a2a70..2ad41c1 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicExchange(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicExchange(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.glsl
index e70784d..712d91d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicExchange(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicExchange(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicExchange(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicExchange(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.dxc.hlsl
index 84b133b..aa54a99 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicExchange(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicExchange(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.fxc.hlsl
index 84b133b..aa54a99 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicExchange(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicExchange(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.glsl
index e949e68..9e2be9f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicExchange(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicExchange(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicExchange(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicExchange(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.dxc.hlsl
index d0e30a4..18bc9ab 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedExchange(arg_0, arg_1, atomic_result);
+  InterlockedExchange(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.fxc.hlsl
index d0e30a4..18bc9ab 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedExchange(arg_0, arg_1, atomic_result);
+  InterlockedExchange(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.glsl
index 03a22c2..32a7fcc 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_15 = atomicExchange(arg_0, arg_1);
+  int x_19 = arg_1;
+  int x_15 = atomicExchange(arg_0, x_19);
   res = x_15;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.dxc.hlsl
index f5ff3f7..cef446b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedExchange(arg_0, arg_1, atomic_result);
+  InterlockedExchange(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.fxc.hlsl
index f5ff3f7..cef446b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedExchange(arg_0, arg_1, atomic_result);
+  InterlockedExchange(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.glsl
index 32711c9..e4d06e3 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_14 = atomicExchange(arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_14 = atomicExchange(arg_0, x_18);
   res = x_14;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.dxc.hlsl
index 1593c13..3e2674e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.fxc.hlsl
index 1593c13..3e2674e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.glsl
index e0c158b..351d2dc 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_30 = local_invocation_index_1;
+  compute_main_inner(x_30);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.dxc.hlsl
index 803eadd..3aa482d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_29 = local_invocation_index_1;
+  compute_main_inner(x_29);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.fxc.hlsl
index 803eadd..3aa482d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_29 = local_invocation_index_1;
+  compute_main_inner(x_29);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.glsl
index 8bd40a6..2ad60db 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.glsl
@@ -17,7 +17,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_29 = local_invocation_index_1;
+  compute_main_inner(x_29);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.dxc.hlsl
index 9b64baf..6ae98c5 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicMax(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicMax(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.fxc.hlsl
index 9b64baf..6ae98c5 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicMax(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicMax(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.glsl
index 32e30cd..d47f3bb 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicMax(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicMax(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicMax(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicMax(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.dxc.hlsl
index e9a8f84..209772a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicMax(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicMax(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.fxc.hlsl
index e9a8f84..209772a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicMax(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicMax(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.glsl
index 680684b..2df58c3 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicMax(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicMax(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicMax(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicMax(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.dxc.hlsl
index 3020cf2..3c35b63d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedMax(arg_0, arg_1, atomic_result);
+  InterlockedMax(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.fxc.hlsl
index 3020cf2..3c35b63d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedMax(arg_0, arg_1, atomic_result);
+  InterlockedMax(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.glsl
index ce19147..9d9a766 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_15 = atomicMax(arg_0, arg_1);
+  int x_19 = arg_1;
+  int x_15 = atomicMax(arg_0, x_19);
   res = x_15;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.dxc.hlsl
index b87186d..d2eef23 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedMax(arg_0, arg_1, atomic_result);
+  InterlockedMax(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.fxc.hlsl
index b87186d..d2eef23 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedMax(arg_0, arg_1, atomic_result);
+  InterlockedMax(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.glsl
index f209644..c060e4f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_14 = atomicMax(arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_14 = atomicMax(arg_0, x_18);
   res = x_14;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.dxc.hlsl
index e169190..b28650b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicMin(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicMin(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.fxc.hlsl
index e169190..b28650b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicMin(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicMin(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.glsl
index e982a9b..04a49bb 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicMin(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicMin(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicMin(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicMin(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.dxc.hlsl
index 76447ef..d46a572 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicMin(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicMin(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.fxc.hlsl
index 76447ef..d46a572 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicMin(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicMin(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.glsl
index f3397bb..f5333a7 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicMin(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicMin(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicMin(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicMin(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.dxc.hlsl
index cfc09f2..686e2bb 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedMin(arg_0, arg_1, atomic_result);
+  InterlockedMin(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.fxc.hlsl
index cfc09f2..686e2bb 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedMin(arg_0, arg_1, atomic_result);
+  InterlockedMin(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.glsl
index abb7ad0..9f7f342 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_15 = atomicMin(arg_0, arg_1);
+  int x_19 = arg_1;
+  int x_15 = atomicMin(arg_0, x_19);
   res = x_15;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.dxc.hlsl
index 64c8150..dab7853 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedMin(arg_0, arg_1, atomic_result);
+  InterlockedMin(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.fxc.hlsl
index 64c8150..dab7853 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedMin(arg_0, arg_1, atomic_result);
+  InterlockedMin(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.glsl
index b5b3a4a..5dbe9c9 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_14 = atomicMin(arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_14 = atomicMin(arg_0, x_18);
   res = x_14;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.dxc.hlsl
index 1daeac4..a937978 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicOr(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicOr(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.fxc.hlsl
index 1daeac4..a937978 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicOr(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicOr(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.glsl
index 0e9f155..d351cf9 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicOr(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicOr(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicOr(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicOr(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.dxc.hlsl
index 2268f30..781fb34 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicOr(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicOr(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.fxc.hlsl
index 2268f30..781fb34 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicOr(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicOr(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.glsl
index b918b88..32c5ab6 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicOr(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicOr(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicOr(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicOr(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.dxc.hlsl
index a4a9b58..2c6edf2 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedOr(arg_0, arg_1, atomic_result);
+  InterlockedOr(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.fxc.hlsl
index a4a9b58..2c6edf2 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedOr(arg_0, arg_1, atomic_result);
+  InterlockedOr(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.glsl
index b045e75..b9e8b77 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_15 = atomicOr(arg_0, arg_1);
+  int x_19 = arg_1;
+  int x_15 = atomicOr(arg_0, x_19);
   res = x_15;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.dxc.hlsl
index 7a4ad50..962ffd8 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedOr(arg_0, arg_1, atomic_result);
+  InterlockedOr(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.fxc.hlsl
index 7a4ad50..962ffd8 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedOr(arg_0, arg_1, atomic_result);
+  InterlockedOr(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.glsl
index 2894885..42de63e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_14 = atomicOr(arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_14 = atomicOr(arg_0, x_18);
   res = x_14;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.dxc.hlsl
index 4151049..4cd4ba7 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.dxc.hlsl
@@ -9,7 +9,8 @@
 void atomicStore_d1e9a6() {
   int arg_1 = 0;
   arg_1 = 1;
-  tint_atomicStore(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  tint_atomicStore(sb_rw, 0u, x_20);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.fxc.hlsl
index 4151049..4cd4ba7 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.fxc.hlsl
@@ -9,7 +9,8 @@
 void atomicStore_d1e9a6() {
   int arg_1 = 0;
   arg_1 = 1;
-  tint_atomicStore(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  tint_atomicStore(sb_rw, 0u, x_20);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.glsl
index 3e9839e..f0bb282 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.glsl
@@ -12,7 +12,8 @@
 void atomicStore_d1e9a6() {
   int arg_1 = 0;
   arg_1 = 1;
-  atomicExchange(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  atomicExchange(sb_rw.arg_0, x_20);
   return;
 }
 
@@ -42,7 +43,8 @@
 void atomicStore_d1e9a6() {
   int arg_1 = 0;
   arg_1 = 1;
-  atomicExchange(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  atomicExchange(sb_rw.arg_0, x_20);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.dxc.hlsl
index 4550cdd..f8b4de8 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.dxc.hlsl
@@ -9,7 +9,8 @@
 void atomicStore_cdc29e() {
   uint arg_1 = 0u;
   arg_1 = 1u;
-  tint_atomicStore(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  tint_atomicStore(sb_rw, 0u, x_18);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.fxc.hlsl
index 4550cdd..f8b4de8 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.fxc.hlsl
@@ -9,7 +9,8 @@
 void atomicStore_cdc29e() {
   uint arg_1 = 0u;
   arg_1 = 1u;
-  tint_atomicStore(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  tint_atomicStore(sb_rw, 0u, x_18);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.glsl
index 7628fb4..a6c5b1f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.glsl
@@ -12,7 +12,8 @@
 void atomicStore_cdc29e() {
   uint arg_1 = 0u;
   arg_1 = 1u;
-  atomicExchange(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  atomicExchange(sb_rw.arg_0, x_18);
   return;
 }
 
@@ -42,7 +43,8 @@
 void atomicStore_cdc29e() {
   uint arg_1 = 0u;
   arg_1 = 1u;
-  atomicExchange(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  atomicExchange(sb_rw.arg_0, x_18);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.dxc.hlsl
index 68704dd..068a480 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -4,8 +4,9 @@
 void atomicStore_8bea94() {
   int arg_1 = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedExchange(arg_0, arg_1, atomic_result);
+  InterlockedExchange(arg_0, x_19, atomic_result);
   return;
 }
 
@@ -18,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.fxc.hlsl
index 68704dd..068a480 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -4,8 +4,9 @@
 void atomicStore_8bea94() {
   int arg_1 = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedExchange(arg_0, arg_1, atomic_result);
+  InterlockedExchange(arg_0, x_19, atomic_result);
   return;
 }
 
@@ -18,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.glsl
index 89e564c..927d791 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.glsl
@@ -5,7 +5,8 @@
 void atomicStore_8bea94() {
   int arg_1 = 0;
   arg_1 = 1;
-  atomicExchange(arg_0, arg_1);
+  int x_19 = arg_1;
+  atomicExchange(arg_0, x_19);
   return;
 }
 
@@ -17,7 +18,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.dxc.hlsl
index 5c41763..177a508 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -4,8 +4,9 @@
 void atomicStore_726882() {
   uint arg_1 = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedExchange(arg_0, arg_1, atomic_result);
+  InterlockedExchange(arg_0, x_18, atomic_result);
   return;
 }
 
@@ -18,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.fxc.hlsl
index 5c41763..177a508 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -4,8 +4,9 @@
 void atomicStore_726882() {
   uint arg_1 = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedExchange(arg_0, arg_1, atomic_result);
+  InterlockedExchange(arg_0, x_18, atomic_result);
   return;
 }
 
@@ -18,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.glsl
index dcceb31..3b5c030 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.glsl
@@ -5,7 +5,8 @@
 void atomicStore_726882() {
   uint arg_1 = 0u;
   arg_1 = 1u;
-  atomicExchange(arg_0, arg_1);
+  uint x_18 = arg_1;
+  atomicExchange(arg_0, x_18);
   return;
 }
 
@@ -17,7 +18,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_31 = local_invocation_index_1;
+  compute_main_inner(x_31);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.dxc.hlsl
index fca2ec1..791ca18 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicSub(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicSub(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.fxc.hlsl
index fca2ec1..791ca18 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicSub(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicSub(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.glsl
index c6aa9c3..cb32a5c 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicAdd(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicAdd(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicAdd(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicAdd(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.dxc.hlsl
index f036c90..daceb1f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicSub(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicSub(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.fxc.hlsl
index f036c90..daceb1f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicSub(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicSub(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.glsl
index c5f6b9e..850f62f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicAdd(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicAdd(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicAdd(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicAdd(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.dxc.hlsl
index 988dbad..6e2702e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedAdd(arg_0, -arg_1, atomic_result);
+  InterlockedAdd(arg_0, -x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.fxc.hlsl
index 988dbad..6e2702e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedAdd(arg_0, -arg_1, atomic_result);
+  InterlockedAdd(arg_0, -x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.glsl
index e08bb7b..d02e98d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_15 = atomicAdd(arg_0, arg_1);
+  int x_19 = arg_1;
+  int x_15 = atomicAdd(arg_0, x_19);
   res = x_15;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.dxc.hlsl
index eb60c8a..a60453f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedAdd(arg_0, -arg_1, atomic_result);
+  InterlockedAdd(arg_0, -x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.fxc.hlsl
index eb60c8a..a60453f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedAdd(arg_0, -arg_1, atomic_result);
+  InterlockedAdd(arg_0, -x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.glsl
index a11a53e..30e8f51 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_14 = atomicAdd(arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_14 = atomicAdd(arg_0, x_18);
   res = x_14;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.dxc.hlsl
index 195284c..5560d57 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicXor(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicXor(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.fxc.hlsl
index 195284c..5560d57 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  const int x_13 = tint_atomicXor(sb_rw, 0u, arg_1);
+  const int x_20 = arg_1;
+  const int x_13 = tint_atomicXor(sb_rw, 0u, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.glsl
index 71a8526..f599a8f 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicXor(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicXor(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_13 = atomicXor(sb_rw.arg_0, arg_1);
+  int x_20 = arg_1;
+  int x_13 = atomicXor(sb_rw.arg_0, x_20);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.dxc.hlsl
index 36ccd47..664d5ba 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.dxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicXor(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicXor(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.fxc.hlsl
index 36ccd47..664d5ba 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.fxc.hlsl
@@ -11,7 +11,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  const uint x_13 = tint_atomicXor(sb_rw, 0u, arg_1);
+  const uint x_18 = arg_1;
+  const uint x_13 = tint_atomicXor(sb_rw, 0u, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.glsl
index c03bbbb..71759fa 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.glsl
@@ -13,7 +13,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicXor(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicXor(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
@@ -45,7 +46,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_13 = atomicXor(sb_rw.arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_13 = atomicXor(sb_rw.arg_0, x_18);
   res = x_13;
   return;
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.dxc.hlsl
index 2c71c9a..fc1b4cc 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedXor(arg_0, arg_1, atomic_result);
+  InterlockedXor(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.fxc.hlsl
index 2c71c9a..fc1b4cc 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
+  const int x_19 = arg_1;
   int atomic_result = 0;
-  InterlockedXor(arg_0, arg_1, atomic_result);
+  InterlockedXor(arg_0, x_19, atomic_result);
   const int x_15 = atomic_result;
   res = x_15;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.glsl
index f568517..bdb9b79 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   int arg_1 = 0;
   int res = 0;
   arg_1 = 1;
-  int x_15 = atomicXor(arg_0, arg_1);
+  int x_19 = arg_1;
+  int x_15 = atomicXor(arg_0, x_19);
   res = x_15;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.dxc.hlsl
index e7ceab2..21c9ae0 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedXor(arg_0, arg_1, atomic_result);
+  InterlockedXor(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.fxc.hlsl
index e7ceab2..21c9ae0 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -5,8 +5,9 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
+  const uint x_18 = arg_1;
   uint atomic_result = 0u;
-  InterlockedXor(arg_0, arg_1, atomic_result);
+  InterlockedXor(arg_0, x_18, atomic_result);
   const uint x_14 = atomic_result;
   res = x_14;
   return;
@@ -21,7 +22,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.glsl
index 2c88781..ad695ee 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.glsl
@@ -6,7 +6,8 @@
   uint arg_1 = 0u;
   uint res = 0u;
   arg_1 = 1u;
-  uint x_14 = atomicXor(arg_0, arg_1);
+  uint x_18 = arg_1;
+  uint x_14 = atomicXor(arg_0, x_18);
   res = x_14;
   return;
 }
@@ -19,7 +20,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.dxc.hlsl
index 181873a..f839d4c 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -21,7 +21,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.fxc.hlsl
index 181873a..f839d4c 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -21,7 +21,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
index ef3ffb1..f0f8f83 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.glsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.dxc.hlsl
index 16aaa1c..dff6e7e 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -21,7 +21,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.fxc.hlsl
index 16aaa1c..dff6e7e 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -21,7 +21,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
index b9c2faf..a59e2dc 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.glsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.dxc.hlsl
index 6270b9d..41d2c6e 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.dxc.hlsl
@@ -21,7 +21,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.fxc.hlsl
index 6270b9d..41d2c6e 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.fxc.hlsl
@@ -21,7 +21,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
index ef3ffb1..f0f8f83 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.glsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_33 = local_invocation_index_1;
+  compute_main_inner(x_33);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.dxc.hlsl
index d2a0213..3824cc7 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.dxc.hlsl
@@ -21,7 +21,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.fxc.hlsl
index d2a0213..3824cc7 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.fxc.hlsl
@@ -21,7 +21,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  const uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
index b9c2faf..a59e2dc 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.glsl
@@ -19,7 +19,8 @@
 }
 
 void compute_main_1() {
-  compute_main_inner(local_invocation_index_1);
+  uint x_32 = local_invocation_index_1;
+  compute_main_inner(x_32);
   return;
 }
 
diff --git a/test/tint/builtins/degrees.spvasm.expected.dxc.hlsl b/test/tint/builtins/degrees.spvasm.expected.dxc.hlsl
index ef4fff8..ca48301 100644
--- a/test/tint/builtins/degrees.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/degrees.spvasm.expected.dxc.hlsl
@@ -6,7 +6,8 @@
   float a = 0.0f;
   float b = 0.0f;
   a = 42.0f;
-  b = tint_degrees(a);
+  const float x_11 = a;
+  b = tint_degrees(x_11);
   return;
 }
 
diff --git a/test/tint/builtins/degrees.spvasm.expected.fxc.hlsl b/test/tint/builtins/degrees.spvasm.expected.fxc.hlsl
index ef4fff8..ca48301 100644
--- a/test/tint/builtins/degrees.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/degrees.spvasm.expected.fxc.hlsl
@@ -6,7 +6,8 @@
   float a = 0.0f;
   float b = 0.0f;
   a = 42.0f;
-  b = tint_degrees(a);
+  const float x_11 = a;
+  b = tint_degrees(x_11);
   return;
 }
 
diff --git a/test/tint/builtins/degrees.spvasm.expected.glsl b/test/tint/builtins/degrees.spvasm.expected.glsl
index 6ec82b3..59705a2 100644
--- a/test/tint/builtins/degrees.spvasm.expected.glsl
+++ b/test/tint/builtins/degrees.spvasm.expected.glsl
@@ -9,7 +9,8 @@
   float a = 0.0f;
   float b = 0.0f;
   a = 42.0f;
-  b = tint_degrees(a);
+  float x_11 = a;
+  b = tint_degrees(x_11);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.dxc.hlsl
index fa2d12f..5857151 100644
--- a/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.dxc.hlsl
@@ -10,7 +10,10 @@
   int v = 0;
   uint offset_1 = 0u;
   uint count = 0u;
-  const int x_14 = tint_extract_bits(v, offset_1, count);
+  const int x_16 = v;
+  const uint x_17 = offset_1;
+  const uint x_18 = count;
+  const int x_14 = tint_extract_bits(x_16, x_17, x_18);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.fxc.hlsl
index fa2d12f..5857151 100644
--- a/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.fxc.hlsl
@@ -10,7 +10,10 @@
   int v = 0;
   uint offset_1 = 0u;
   uint count = 0u;
-  const int x_14 = tint_extract_bits(v, offset_1, count);
+  const int x_16 = v;
+  const uint x_17 = offset_1;
+  const uint x_18 = count;
+  const int x_14 = tint_extract_bits(x_16, x_17, x_18);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.glsl b/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.glsl
index 05127a3..64cf629 100644
--- a/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.glsl
+++ b/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.glsl
@@ -10,7 +10,10 @@
   int v = 0;
   uint offset_1 = 0u;
   uint count = 0u;
-  int x_14 = tint_extract_bits(v, offset_1, count);
+  int x_16 = v;
+  uint x_17 = offset_1;
+  uint x_18 = count;
+  int x_14 = tint_extract_bits(x_16, x_17, x_18);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.dxc.hlsl
index 310ab2e..c82dd86 100644
--- a/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.dxc.hlsl
@@ -10,7 +10,10 @@
   uint v = 0u;
   uint offset_1 = 0u;
   uint count = 0u;
-  const uint x_11 = tint_extract_bits(v, offset_1, count);
+  const uint x_13 = v;
+  const uint x_14 = offset_1;
+  const uint x_15 = count;
+  const uint x_11 = tint_extract_bits(x_13, x_14, x_15);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.fxc.hlsl
index 310ab2e..c82dd86 100644
--- a/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.fxc.hlsl
@@ -10,7 +10,10 @@
   uint v = 0u;
   uint offset_1 = 0u;
   uint count = 0u;
-  const uint x_11 = tint_extract_bits(v, offset_1, count);
+  const uint x_13 = v;
+  const uint x_14 = offset_1;
+  const uint x_15 = count;
+  const uint x_11 = tint_extract_bits(x_13, x_14, x_15);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.glsl b/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.glsl
index e62cd8f..6b12f35 100644
--- a/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.glsl
+++ b/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.glsl
@@ -10,7 +10,10 @@
   uint v = 0u;
   uint offset_1 = 0u;
   uint count = 0u;
-  uint x_11 = tint_extract_bits(v, offset_1, count);
+  uint x_13 = v;
+  uint x_14 = offset_1;
+  uint x_15 = count;
+  uint x_11 = tint_extract_bits(x_13, x_14, x_15);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.dxc.hlsl
index 99dbb88..ec89a7c 100644
--- a/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.dxc.hlsl
@@ -10,7 +10,10 @@
   int3 v = (0).xxx;
   uint offset_1 = 0u;
   uint count = 0u;
-  const int3 x_15 = tint_extract_bits(v, offset_1, count);
+  const int3 x_17 = v;
+  const uint x_18 = offset_1;
+  const uint x_19 = count;
+  const int3 x_15 = tint_extract_bits(x_17, x_18, x_19);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.fxc.hlsl
index 99dbb88..ec89a7c 100644
--- a/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.fxc.hlsl
@@ -10,7 +10,10 @@
   int3 v = (0).xxx;
   uint offset_1 = 0u;
   uint count = 0u;
-  const int3 x_15 = tint_extract_bits(v, offset_1, count);
+  const int3 x_17 = v;
+  const uint x_18 = offset_1;
+  const uint x_19 = count;
+  const int3 x_15 = tint_extract_bits(x_17, x_18, x_19);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.glsl b/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.glsl
index 960ed2f..d7aebca 100644
--- a/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.glsl
+++ b/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.glsl
@@ -10,7 +10,10 @@
   ivec3 v = ivec3(0);
   uint offset_1 = 0u;
   uint count = 0u;
-  ivec3 x_15 = tint_extract_bits(v, offset_1, count);
+  ivec3 x_17 = v;
+  uint x_18 = offset_1;
+  uint x_19 = count;
+  ivec3 x_15 = tint_extract_bits(x_17, x_18, x_19);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.dxc.hlsl
index 5c0b0cb..c9b84dc 100644
--- a/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.dxc.hlsl
@@ -10,7 +10,10 @@
   uint3 v = (0u).xxx;
   uint offset_1 = 0u;
   uint count = 0u;
-  const uint3 x_14 = tint_extract_bits(v, offset_1, count);
+  const uint3 x_16 = v;
+  const uint x_17 = offset_1;
+  const uint x_18 = count;
+  const uint3 x_14 = tint_extract_bits(x_16, x_17, x_18);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.fxc.hlsl
index 5c0b0cb..c9b84dc 100644
--- a/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.fxc.hlsl
@@ -10,7 +10,10 @@
   uint3 v = (0u).xxx;
   uint offset_1 = 0u;
   uint count = 0u;
-  const uint3 x_14 = tint_extract_bits(v, offset_1, count);
+  const uint3 x_16 = v;
+  const uint x_17 = offset_1;
+  const uint x_18 = count;
+  const uint3 x_14 = tint_extract_bits(x_16, x_17, x_18);
   return;
 }
 
diff --git a/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.glsl b/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.glsl
index c5150f2..6cdca4f 100644
--- a/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.glsl
+++ b/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.glsl
@@ -10,7 +10,10 @@
   uvec3 v = uvec3(0u);
   uint offset_1 = 0u;
   uint count = 0u;
-  uvec3 x_14 = tint_extract_bits(v, offset_1, count);
+  uvec3 x_16 = v;
+  uint x_17 = offset_1;
+  uint x_18 = count;
+  uvec3 x_14 = tint_extract_bits(x_16, x_17, x_18);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.dxc.hlsl
index 8819221..7c8f828 100644
--- a/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.dxc.hlsl
@@ -10,7 +10,11 @@
   int n = 0;
   uint offset_1 = 0u;
   uint count = 0u;
-  const int x_15 = tint_insert_bits(v, n, offset_1, count);
+  const int x_17 = v;
+  const int x_18 = n;
+  const uint x_19 = offset_1;
+  const uint x_20 = count;
+  const int x_15 = tint_insert_bits(x_17, x_18, x_19, x_20);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.fxc.hlsl
index 8819221..7c8f828 100644
--- a/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.fxc.hlsl
@@ -10,7 +10,11 @@
   int n = 0;
   uint offset_1 = 0u;
   uint count = 0u;
-  const int x_15 = tint_insert_bits(v, n, offset_1, count);
+  const int x_17 = v;
+  const int x_18 = n;
+  const uint x_19 = offset_1;
+  const uint x_20 = count;
+  const int x_15 = tint_insert_bits(x_17, x_18, x_19, x_20);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.glsl b/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.glsl
index 049dbe1..f7bd6b4 100644
--- a/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.glsl
+++ b/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.glsl
@@ -11,7 +11,11 @@
   int n = 0;
   uint offset_1 = 0u;
   uint count = 0u;
-  int x_15 = tint_insert_bits(v, n, offset_1, count);
+  int x_17 = v;
+  int x_18 = n;
+  uint x_19 = offset_1;
+  uint x_20 = count;
+  int x_15 = tint_insert_bits(x_17, x_18, x_19, x_20);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.dxc.hlsl
index 3d759c7..d416185 100644
--- a/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.dxc.hlsl
@@ -10,7 +10,11 @@
   uint n = 0u;
   uint offset_1 = 0u;
   uint count = 0u;
-  const uint x_12 = tint_insert_bits(v, n, offset_1, count);
+  const uint x_14 = v;
+  const uint x_15 = n;
+  const uint x_16 = offset_1;
+  const uint x_17 = count;
+  const uint x_12 = tint_insert_bits(x_14, x_15, x_16, x_17);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.fxc.hlsl
index 3d759c7..d416185 100644
--- a/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.fxc.hlsl
@@ -10,7 +10,11 @@
   uint n = 0u;
   uint offset_1 = 0u;
   uint count = 0u;
-  const uint x_12 = tint_insert_bits(v, n, offset_1, count);
+  const uint x_14 = v;
+  const uint x_15 = n;
+  const uint x_16 = offset_1;
+  const uint x_17 = count;
+  const uint x_12 = tint_insert_bits(x_14, x_15, x_16, x_17);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.glsl b/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.glsl
index a69f516..1389839 100644
--- a/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.glsl
+++ b/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.glsl
@@ -11,7 +11,11 @@
   uint n = 0u;
   uint offset_1 = 0u;
   uint count = 0u;
-  uint x_12 = tint_insert_bits(v, n, offset_1, count);
+  uint x_14 = v;
+  uint x_15 = n;
+  uint x_16 = offset_1;
+  uint x_17 = count;
+  uint x_12 = tint_insert_bits(x_14, x_15, x_16, x_17);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.dxc.hlsl b/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.dxc.hlsl
index 6591510..d7f1951 100644
--- a/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.dxc.hlsl
@@ -10,7 +10,11 @@
   int3 n = (0).xxx;
   uint offset_1 = 0u;
   uint count = 0u;
-  const int3 x_16 = tint_insert_bits(v, n, offset_1, count);
+  const int3 x_18 = v;
+  const int3 x_19 = n;
+  const uint x_20 = offset_1;
+  const uint x_21 = count;
+  const int3 x_16 = tint_insert_bits(x_18, x_19, x_20, x_21);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.fxc.hlsl b/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.fxc.hlsl
index 6591510..d7f1951 100644
--- a/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.fxc.hlsl
@@ -10,7 +10,11 @@
   int3 n = (0).xxx;
   uint offset_1 = 0u;
   uint count = 0u;
-  const int3 x_16 = tint_insert_bits(v, n, offset_1, count);
+  const int3 x_18 = v;
+  const int3 x_19 = n;
+  const uint x_20 = offset_1;
+  const uint x_21 = count;
+  const int3 x_16 = tint_insert_bits(x_18, x_19, x_20, x_21);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.glsl b/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.glsl
index 8fd8ecd..cf758ec 100644
--- a/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.glsl
+++ b/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.glsl
@@ -11,7 +11,11 @@
   ivec3 n = ivec3(0);
   uint offset_1 = 0u;
   uint count = 0u;
-  ivec3 x_16 = tint_insert_bits(v, n, offset_1, count);
+  ivec3 x_18 = v;
+  ivec3 x_19 = n;
+  uint x_20 = offset_1;
+  uint x_21 = count;
+  ivec3 x_16 = tint_insert_bits(x_18, x_19, x_20, x_21);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.dxc.hlsl b/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.dxc.hlsl
index 9d91483..ebd4fb3 100644
--- a/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.dxc.hlsl
@@ -10,7 +10,11 @@
   uint3 n = (0u).xxx;
   uint offset_1 = 0u;
   uint count = 0u;
-  const uint3 x_15 = tint_insert_bits(v, n, offset_1, count);
+  const uint3 x_17 = v;
+  const uint3 x_18 = n;
+  const uint x_19 = offset_1;
+  const uint x_20 = count;
+  const uint3 x_15 = tint_insert_bits(x_17, x_18, x_19, x_20);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.fxc.hlsl b/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.fxc.hlsl
index 9d91483..ebd4fb3 100644
--- a/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.fxc.hlsl
@@ -10,7 +10,11 @@
   uint3 n = (0u).xxx;
   uint offset_1 = 0u;
   uint count = 0u;
-  const uint3 x_15 = tint_insert_bits(v, n, offset_1, count);
+  const uint3 x_17 = v;
+  const uint3 x_18 = n;
+  const uint x_19 = offset_1;
+  const uint x_20 = count;
+  const uint3 x_15 = tint_insert_bits(x_17, x_18, x_19, x_20);
   return;
 }
 
diff --git a/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.glsl b/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.glsl
index 186da21..590f791 100644
--- a/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.glsl
+++ b/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.glsl
@@ -11,7 +11,11 @@
   uvec3 n = uvec3(0u);
   uint offset_1 = 0u;
   uint count = 0u;
-  uvec3 x_15 = tint_insert_bits(v, n, offset_1, count);
+  uvec3 x_17 = v;
+  uvec3 x_18 = n;
+  uint x_19 = offset_1;
+  uint x_20 = count;
+  uvec3 x_15 = tint_insert_bits(x_17, x_18, x_19, x_20);
   return;
 }
 
diff --git a/test/tint/builtins/radians.spvasm.expected.dxc.hlsl b/test/tint/builtins/radians.spvasm.expected.dxc.hlsl
index b573cec..26b810c 100644
--- a/test/tint/builtins/radians.spvasm.expected.dxc.hlsl
+++ b/test/tint/builtins/radians.spvasm.expected.dxc.hlsl
@@ -6,7 +6,8 @@
   float a = 0.0f;
   float b = 0.0f;
   a = 42.0f;
-  b = tint_radians(a);
+  const float x_11 = a;
+  b = tint_radians(x_11);
   return;
 }
 
diff --git a/test/tint/builtins/radians.spvasm.expected.fxc.hlsl b/test/tint/builtins/radians.spvasm.expected.fxc.hlsl
index b573cec..26b810c 100644
--- a/test/tint/builtins/radians.spvasm.expected.fxc.hlsl
+++ b/test/tint/builtins/radians.spvasm.expected.fxc.hlsl
@@ -6,7 +6,8 @@
   float a = 0.0f;
   float b = 0.0f;
   a = 42.0f;
-  b = tint_radians(a);
+  const float x_11 = a;
+  b = tint_radians(x_11);
   return;
 }
 
diff --git a/test/tint/builtins/radians.spvasm.expected.glsl b/test/tint/builtins/radians.spvasm.expected.glsl
index eafeefe..4475334 100644
--- a/test/tint/builtins/radians.spvasm.expected.glsl
+++ b/test/tint/builtins/radians.spvasm.expected.glsl
@@ -9,7 +9,8 @@
   float a = 0.0f;
   float b = 0.0f;
   a = 42.0f;
-  b = tint_radians(a);
+  float x_11 = a;
+  b = tint_radians(x_11);
   return;
 }
 
diff --git a/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.dxc.hlsl
index 14fbe55..c767515 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float16_t r = float16_t(3.0h);
+  const float16_t a = float16_t(1.0h);
+  const float16_t b = float16_t(2.0h);
+  const float16_t r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.glsl
index 5cf03c7..0d0e6d4 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.glsl
@@ -2,7 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void f() {
-  float16_t r = 3.0hf;
+  float16_t a = 1.0hf;
+  float16_t b = 2.0hf;
+  float16_t r = (a + b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.dxc.hlsl
index 66a8434..616cf37 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = 3.0f;
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.fxc.hlsl
index 66a8434..616cf37 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = 3.0f;
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
index 75e8dd6..a70398e 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  float r = 3.0f;
+  float a = 1.0f;
+  float b = 2.0f;
+  float r = (a + b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 6202d8b..2fbde52 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 3;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 6202d8b..2fbde52 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 3;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
index aa5e335..99270ca 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = 3;
+  int a = 1;
+  int b = 2;
+  int r = (a + b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 8a5e655..ae5fbd3 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 3u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 8a5e655..ae5fbd3 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 3u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
index 936c36d..9dfbdfd 100644
--- a/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = 3u;
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a + b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.dxc.hlsl
index 84ade7b..d473658 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const vector<float16_t, 3> a = vector<float16_t, 3>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h));
-  const vector<float16_t, 3> r = (a + float16_t(4.0h));
+  const float16_t b = float16_t(4.0h);
+  const vector<float16_t, 3> r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.glsl
index 1cfdba2..118f5b2 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.glsl
@@ -3,7 +3,8 @@
 
 void f() {
   f16vec3 a = f16vec3(1.0hf, 2.0hf, 3.0hf);
-  f16vec3 r = (a + 4.0hf);
+  float16_t b = 4.0hf;
+  f16vec3 r = (a + b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.dxc.hlsl
index a7fe143..d7fa2f6 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a + 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.fxc.hlsl
index a7fe143..d7fa2f6 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a + 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
index 599cb04..2fe1ddc 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   vec3 a = vec3(1.0f, 2.0f, 3.0f);
-  vec3 r = (a + 4.0f);
+  float b = 4.0f;
+  vec3 r = (a + b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.dxc.hlsl
index 5875ef7..c878711 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a + 4);
+  const int b = 4;
+  const int3 r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.fxc.hlsl
index 5875ef7..c878711 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a + 4);
+  const int b = 4;
+  const int3 r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
index e9e5f02..451711e 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   ivec3 a = ivec3(1, 2, 3);
-  ivec3 r = (a + 4);
+  int b = 4;
+  ivec3 r = (a + b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.dxc.hlsl
index 056ee37..3bb2b6a 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a + 4u);
+  const uint b = 4u;
+  const uint3 r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.fxc.hlsl
index 056ee37..3bb2b6a 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a + 4u);
+  const uint b = 4u;
+  const uint3 r = (a + b);
   return;
 }
diff --git a/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
index 2388aab..2215b3e 100644
--- a/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   uvec3 a = uvec3(1u, 2u, 3u);
-  uvec3 r = (a + 4u);
+  uint b = 4u;
+  uvec3 r = (a + b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.dxc.hlsl
index aa8153e..8999047 100644
--- a/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const bool r = false;
+  const bool a = true;
+  const bool b = false;
+  const bool r = (a & b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.fxc.hlsl
index aa8153e..8999047 100644
--- a/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const bool r = false;
+  const bool a = true;
+  const bool b = false;
+  const bool r = (a & b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.glsl b/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.glsl
index a1296f8..208c024 100644
--- a/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  bool r = false;
+  bool a = true;
+  bool b = false;
+  bool r = bool(uint(a) & uint(b));
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 06dda3a..8987967 100644
--- a/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 0;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a & b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 06dda3a..8987967 100644
--- a/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 0;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a & b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
index a12de41..772a296 100644
--- a/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = 0;
+  int a = 1;
+  int b = 2;
+  int r = (a & b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 263908a..f95c605 100644
--- a/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 0u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a & b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 263908a..f95c605 100644
--- a/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 0u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a & b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
index dece736..227553e 100644
--- a/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = 0u;
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a & b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 6202d8b..84018dc 100644
--- a/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 3;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a | b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 6202d8b..84018dc 100644
--- a/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 3;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a | b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
index aa5e335..fcc9b47 100644
--- a/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = 3;
+  int a = 1;
+  int b = 2;
+  int r = (a | b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 8a5e655..b054689 100644
--- a/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 3u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a | b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 8a5e655..b054689 100644
--- a/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 3u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a | b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
index 936c36d..df468a6 100644
--- a/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = 3u;
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a | b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 6202d8b..ab8989a 100644
--- a/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 3;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a ^ b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 6202d8b..ab8989a 100644
--- a/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 3;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a ^ b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
index aa5e335..916186d 100644
--- a/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = 3;
+  int a = 1;
+  int b = 2;
+  int r = (a ^ b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 8a5e655..fdcdb9c 100644
--- a/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 3u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a ^ b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 8a5e655..fdcdb9c 100644
--- a/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 3u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a ^ b);
   return;
 }
diff --git a/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
index 936c36d..fe1ffd8 100644
--- a/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = 3u;
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a ^ b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.dxc.hlsl
index bc9e347..7481ca5 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float16_t r = float16_t(0.5h);
+  const float16_t a = float16_t(1.0h);
+  const float16_t b = float16_t(2.0h);
+  const float16_t r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.glsl
index 23604ba..c9cf7bb 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.glsl
@@ -2,7 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void f() {
-  float16_t r = 0.5hf;
+  float16_t a = 1.0hf;
+  float16_t b = 2.0hf;
+  float16_t r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.dxc.hlsl
index 3231de6..bcc6e3b 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = 0.5f;
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.fxc.hlsl
index 3231de6..bcc6e3b 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = 0.5f;
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
index 63663f6..8c74a7a 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  float r = 0.5f;
+  float a = 1.0f;
+  float b = 2.0f;
+  float r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 06dda3a..14717d6 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 0;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 06dda3a..14717d6 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 0;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
index a12de41..3af5945 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = 0;
+  int a = 1;
+  int b = 2;
+  int r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 263908a..668387a 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 0u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a / (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 263908a..668387a 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 0u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a / (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
index dece736..5780a27 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = 0u;
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.dxc.hlsl
index 5d6ce5f..257d05a 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const vector<float16_t, 3> a = vector<float16_t, 3>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h));
-  const vector<float16_t, 3> r = (a / float16_t(4.0h));
+  const float16_t b = float16_t(4.0h);
+  const vector<float16_t, 3> r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.glsl
index f596b49..d167c7d 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.glsl
@@ -3,7 +3,8 @@
 
 void f() {
   f16vec3 a = f16vec3(1.0hf, 2.0hf, 3.0hf);
-  f16vec3 r = (a / 4.0hf);
+  float16_t b = 4.0hf;
+  f16vec3 r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.dxc.hlsl
index f1645a2..cd0d2ee 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a / 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.fxc.hlsl
index f1645a2..cd0d2ee 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a / 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
index 822a74d..533291f 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   vec3 a = vec3(1.0f, 2.0f, 3.0f);
-  vec3 r = (a / 4.0f);
+  float b = 4.0f;
+  vec3 r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.dxc.hlsl
index 672f46e..8278e3b 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a / 4);
+  const int b = 4;
+  const int3 r = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.fxc.hlsl
index 672f46e..8278e3b 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a / 4);
+  const int b = 4;
+  const int3 r = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
index 8656015..a690f5f 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   ivec3 a = ivec3(1, 2, 3);
-  ivec3 r = (a / 4);
+  int b = 4;
+  ivec3 r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.dxc.hlsl
index 2f4dc9c..7c2f924 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a / 4u);
+  const uint b = 4u;
+  const uint3 r = (a / (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.fxc.hlsl
index 2f4dc9c..7c2f924 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a / 4u);
+  const uint b = 4u;
+  const uint3 r = (a / (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
index fbe58d4..abcbfa7b 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   uvec3 a = uvec3(1u, 2u, 3u);
-  uvec3 r = (a / 4u);
+  uint b = 4u;
+  uvec3 r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.dxc.hlsl
index f383c54..eb1346c 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float16_t r = float16_t(0.0h /* inf */);
+  const float16_t a = float16_t(1.0h);
+  const float16_t b = float16_t(0.0h);
+  const float16_t r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.glsl
index 559b92b..833b48f 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.glsl
@@ -2,7 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void f() {
-  float16_t r = 0.0hf /* inf */;
+  float16_t a = 1.0hf;
+  float16_t b = 0.0hf;
+  float16_t r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.dxc.hlsl
index 27bbecd..facb5ed 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = 0.0f /* inf */;
+  const float a = 1.0f;
+  const float b = 0.0f;
+  const float r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.fxc.hlsl
index 27bbecd..facb5ed 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = 0.0f /* inf */;
+  const float a = 1.0f;
+  const float b = 0.0f;
+  const float r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
index 7f869ee..1e0dcfe 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  float r = 0.0f /* inf */;
+  float a = 1.0f;
+  float b = 0.0f;
+  float r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 15cea75c..1969e5f 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 1;
+  const int a = 1;
+  const int b = 0;
+  const int r = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 15cea75c..1969e5f 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 1;
+  const int a = 1;
+  const int b = 0;
+  const int r = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
index db428ec..8ec81fd 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = 1;
+  int a = 1;
+  int b = 0;
+  int r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 01cbfa3..ce15f24 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 1u;
+  const uint a = 1u;
+  const uint b = 0u;
+  const uint r = (a / (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 01cbfa3..ce15f24 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 1u;
+  const uint a = 1u;
+  const uint b = 0u;
+  const uint r = (a / (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
index 9a9d0ad..aee0413 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = 1u;
+  uint a = 1u;
+  uint b = 0u;
+  uint r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.dxc.hlsl
index 3a50c61..4a755ea 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const vector<float16_t, 3> a = vector<float16_t, 3>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h));
-  const vector<float16_t, 3> r = (a / float16_t(0.0h));
+  const float16_t b = float16_t(0.0h);
+  const vector<float16_t, 3> r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.glsl
index ce7bfcc..57bba7b 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.glsl
@@ -3,7 +3,8 @@
 
 void f() {
   f16vec3 a = f16vec3(1.0hf, 2.0hf, 3.0hf);
-  f16vec3 r = (a / 0.0hf);
+  float16_t b = 0.0hf;
+  f16vec3 r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.dxc.hlsl
index c661ab1..8e1e300 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a / 0.0f);
+  const float b = 0.0f;
+  const float3 r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.fxc.hlsl
index c661ab1..8e1e300 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a / 0.0f);
+  const float b = 0.0f;
+  const float3 r = (a / b);
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.glsl
index 3596677..4544df7 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   vec3 a = vec3(1.0f, 2.0f, 3.0f);
-  vec3 r = (a / 0.0f);
+  float b = 0.0f;
+  vec3 r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.dxc.hlsl
index 8a44ac5..7029295b 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a / 1);
+  const int b = 0;
+  const int3 r = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.fxc.hlsl
index 8a44ac5..7029295b 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a / 1);
+  const int b = 0;
+  const int3 r = (a / (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
index 6be0898..0c7f6a9 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   ivec3 a = ivec3(1, 2, 3);
-  ivec3 r = (a / 0);
+  int b = 0;
+  ivec3 r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.dxc.hlsl
index 18d1da5..bfe9e02 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a / 1u);
+  const uint b = 0u;
+  const uint3 r = (a / (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.fxc.hlsl
index 18d1da5..bfe9e02 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a / 1u);
+  const uint b = 0u;
+  const uint3 r = (a / (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
index ba0d9a3..05bca8a 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   uvec3 a = uvec3(1u, 2u, 3u);
-  uvec3 r = (a / 0u);
+  uint b = 0u;
+  uvec3 r = (a / b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 9b54fe4..50ecc21 100644
--- a/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = (1 << 2u);
+  const int a = 1;
+  const uint b = 2u;
+  const int r = (a << b);
   return;
 }
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 9b54fe4..50ecc21 100644
--- a/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = (1 << 2u);
+  const int a = 1;
+  const uint b = 2u;
+  const int r = (a << b);
   return;
 }
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
index 5b843a6..67be9ed 100644
--- a/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = (1 << 2u);
+  int a = 1;
+  uint b = 2u;
+  int r = (a << b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 3195ab7..9134587 100644
--- a/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = (1u << 2u);
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a << b);
   return;
 }
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 3195ab7..9134587 100644
--- a/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = (1u << 2u);
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a << b);
   return;
 }
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
index d3d24b4..9fc3402 100644
--- a/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = (1u << 2u);
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a << b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.dxc.hlsl
index 7956edf..9ce6ac8 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float16_t r = (float16_t(1.0h) % float16_t(2.0h));
+  const float16_t a = float16_t(1.0h);
+  const float16_t b = float16_t(2.0h);
+  const float16_t r = (a % b);
   return;
 }
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.glsl
index 13400ac..dfb935f 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.glsl
@@ -7,7 +7,9 @@
 
 
 void f() {
-  float16_t r = tint_float_modulo(1.0hf, 2.0hf);
+  float16_t a = 1.0hf;
+  float16_t b = 2.0hf;
+  float16_t r = tint_float_modulo(a, b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.dxc.hlsl
index 2d9e671..7e166b7 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = (1.0f % 2.0f);
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a % b);
   return;
 }
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.fxc.hlsl
index 2d9e671..7e166b7 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = (1.0f % 2.0f);
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a % b);
   return;
 }
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
index bf3ed5b..312f44d 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
@@ -6,7 +6,9 @@
 
 
 void f() {
-  float r = tint_float_modulo(1.0f, 2.0f);
+  float a = 1.0f;
+  float b = 2.0f;
+  float r = tint_float_modulo(a, b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 9088e51..e5e75d3 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = (1 % 2);
+  const int a = 1;
+  const int b = 2;
+  const int r = (a % (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 9088e51..e5e75d3 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = (1 % 2);
+  const int a = 1;
+  const int b = 2;
+  const int r = (a % (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
index b67b7fd..8c12815 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = (1 % 2);
+  int a = 1;
+  int b = 2;
+  int r = (a % b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index e5e11c5..ea912bd 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = (1u % 2u);
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a % (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index e5e11c5..ea912bd 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = (1u % 2u);
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a % (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
index c7eb024..485ed72 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = (1u % 2u);
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a % b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.dxc.hlsl
index 2c8708a..4c54522 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const vector<float16_t, 3> a = vector<float16_t, 3>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h));
-  const vector<float16_t, 3> r = (a % float16_t(4.0h));
+  const float16_t b = float16_t(4.0h);
+  const vector<float16_t, 3> r = (a % b);
   return;
 }
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.glsl
index 79d21f1..d91e928 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.glsl
@@ -8,7 +8,8 @@
 
 void f() {
   f16vec3 a = f16vec3(1.0hf, 2.0hf, 3.0hf);
-  f16vec3 r = tint_float_modulo(a, 4.0hf);
+  float16_t b = 4.0hf;
+  f16vec3 r = tint_float_modulo(a, b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.dxc.hlsl
index 3aca50d..147b45c 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a % 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a % b);
   return;
 }
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.fxc.hlsl
index 3aca50d..147b45c 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a % 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a % b);
   return;
 }
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.glsl
index 8aef558..1a1102c 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.glsl
@@ -7,7 +7,8 @@
 
 void f() {
   vec3 a = vec3(1.0f, 2.0f, 3.0f);
-  vec3 r = tint_float_modulo(a, 4.0f);
+  float b = 4.0f;
+  vec3 r = tint_float_modulo(a, b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.dxc.hlsl
index 1abee48..469e7c0 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a % 4);
+  const int b = 4;
+  const int3 r = (a % (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.fxc.hlsl
index 1abee48..469e7c0 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a % 4);
+  const int b = 4;
+  const int3 r = (a % (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.glsl
index 4ffb72d..3ae9594 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   ivec3 a = ivec3(1, 2, 3);
-  ivec3 r = (a % 4);
+  int b = 4;
+  ivec3 r = (a % b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.dxc.hlsl
index c2d051d..6a481d4 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a % 4u);
+  const uint b = 4u;
+  const uint3 r = (a % (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.fxc.hlsl
index c2d051d..6a481d4 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a % 4u);
+  const uint b = 4u;
+  const uint3 r = (a % (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.glsl
index e4ac530..40204d3 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   uvec3 a = uvec3(1u, 2u, 3u);
-  uvec3 r = (a % 4u);
+  uint b = 4u;
+  uvec3 r = (a % b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.dxc.hlsl
index 7659631..87f2c8f 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float16_t r = (float16_t(1.0h) % float16_t(0.0h));
+  const float16_t a = float16_t(1.0h);
+  const float16_t b = float16_t(0.0h);
+  const float16_t r = (a % b);
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.glsl
index 674512d..59db7a7 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.glsl
@@ -7,7 +7,9 @@
 
 
 void f() {
-  float16_t r = tint_float_modulo(1.0hf, 0.0hf);
+  float16_t a = 1.0hf;
+  float16_t b = 0.0hf;
+  float16_t r = tint_float_modulo(a, b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.dxc.hlsl
index d3de7db..80448b1 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = (1.0f % 0.0f);
+  const float a = 1.0f;
+  const float b = 0.0f;
+  const float r = (a % b);
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.fxc.hlsl
index d3de7db..80448b1 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = (1.0f % 0.0f);
+  const float a = 1.0f;
+  const float b = 0.0f;
+  const float r = (a % b);
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
index fa3aedc..e768a19 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
@@ -6,7 +6,9 @@
 
 
 void f() {
-  float r = tint_float_modulo(1.0f, 0.0f);
+  float a = 1.0f;
+  float b = 0.0f;
+  float r = tint_float_modulo(a, b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index b79aad9..7511c96 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = (1 % 1);
+  const int a = 1;
+  const int b = 0;
+  const int r = (a % (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index b79aad9..7511c96 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = (1 % 1);
+  const int a = 1;
+  const int b = 0;
+  const int r = (a % (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
index ae3fe55..1f7158f 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = (1 % 0);
+  int a = 1;
+  int b = 0;
+  int r = (a % b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 241c5f5..16b133d 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = (1u % 1u);
+  const uint a = 1u;
+  const uint b = 0u;
+  const uint r = (a % (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 241c5f5..16b133d 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = (1u % 1u);
+  const uint a = 1u;
+  const uint b = 0u;
+  const uint r = (a % (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
index dfd9096..d30fde8 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = (1u % 0u);
+  uint a = 1u;
+  uint b = 0u;
+  uint r = (a % b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.dxc.hlsl
index 6906266..63e5792 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a % 1);
+  const int b = 0;
+  const int3 r = (a % (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.fxc.hlsl
index 6906266..63e5792 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a % 1);
+  const int b = 0;
+  const int3 r = (a % (b == 0 ? 1 : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
index c2e9b36..d74047a 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   ivec3 a = ivec3(1, 2, 3);
-  ivec3 r = (a % 0);
+  int b = 0;
+  ivec3 r = (a % b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.dxc.hlsl
index 4d8b0b4..4da3d28 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a % 1u);
+  const uint b = 0u;
+  const uint3 r = (a % (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.fxc.hlsl
index 4d8b0b4..4da3d28 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a % 1u);
+  const uint b = 0u;
+  const uint3 r = (a % (b == 0u ? 1u : b));
   return;
 }
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
index 47e19a3..d84b14b1 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   uvec3 a = uvec3(1u, 2u, 3u);
-  uvec3 r = (a % 0u);
+  uint b = 0u;
+  uvec3 r = (a % b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.dxc.hlsl
index f832a2f..af1c812 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float16_t r = float16_t(2.0h);
+  const float16_t a = float16_t(1.0h);
+  const float16_t b = float16_t(2.0h);
+  const float16_t r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.glsl
index 5d151fa..7228d78 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.glsl
@@ -2,7 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void f() {
-  float16_t r = 2.0hf;
+  float16_t a = 1.0hf;
+  float16_t b = 2.0hf;
+  float16_t r = (a * b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.dxc.hlsl
index 0f4b84f..733835b 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = 2.0f;
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.fxc.hlsl
index 0f4b84f..733835b 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = 2.0f;
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
index d9a5099..8a82a91 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  float r = 2.0f;
+  float a = 1.0f;
+  float b = 2.0f;
+  float r = (a * b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 1207f53..f5d7618 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 2;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 1207f53..f5d7618 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = 2;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
index bde0122..ec82eaf 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = 2;
+  int a = 1;
+  int b = 2;
+  int r = (a * b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 7816c13..11c3fed 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 2u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 7816c13..11c3fed 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 2u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
index 57feb4d..e2a78f4 100644
--- a/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = 2u;
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a * b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.dxc.hlsl
index f65d60d..7a87bd8 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const vector<float16_t, 3> a = vector<float16_t, 3>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h));
-  const vector<float16_t, 3> r = (a * float16_t(4.0h));
+  const float16_t b = float16_t(4.0h);
+  const vector<float16_t, 3> r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.glsl
index 5a9325c..74c32df 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.glsl
@@ -3,7 +3,8 @@
 
 void f() {
   f16vec3 a = f16vec3(1.0hf, 2.0hf, 3.0hf);
-  f16vec3 r = (a * 4.0hf);
+  float16_t b = 4.0hf;
+  f16vec3 r = (a * b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.dxc.hlsl
index 646399d..b465c95 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a * 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.fxc.hlsl
index 646399d..b465c95 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a * 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
index 1e5e9c4..1652458 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   vec3 a = vec3(1.0f, 2.0f, 3.0f);
-  vec3 r = (a * 4.0f);
+  float b = 4.0f;
+  vec3 r = (a * b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.dxc.hlsl
index e86c189..c100909 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a * 4);
+  const int b = 4;
+  const int3 r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.fxc.hlsl
index e86c189..c100909 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a * 4);
+  const int b = 4;
+  const int3 r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
index daadb77..c6eed1a 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   ivec3 a = ivec3(1, 2, 3);
-  ivec3 r = (a * 4);
+  int b = 4;
+  ivec3 r = (a * b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.dxc.hlsl
index d61b59a..ab2bd78 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a * 4u);
+  const uint b = 4u;
+  const uint3 r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.fxc.hlsl
index d61b59a..ab2bd78 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a * 4u);
+  const uint b = 4u;
+  const uint3 r = (a * b);
   return;
 }
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
index 847015b..25d9d70 100644
--- a/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   uvec3 a = uvec3(1u, 2u, 3u);
-  uvec3 r = (a * 4u);
+  uint b = 4u;
+  uvec3 r = (a * b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 861995c..afd6087 100644
--- a/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = (1 >> 2u);
+  const int a = 1;
+  const uint b = 2u;
+  const int r = (a >> b);
   return;
 }
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 861995c..afd6087 100644
--- a/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = (1 >> 2u);
+  const int a = 1;
+  const uint b = 2u;
+  const int r = (a >> b);
   return;
 }
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
index 2018d24..b51d4f3 100644
--- a/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = (1 >> 2u);
+  int a = 1;
+  uint b = 2u;
+  int r = (a >> b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index 4e90e73..b97620f 100644
--- a/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = (1u >> 2u);
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a >> b);
   return;
 }
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index 4e90e73..b97620f 100644
--- a/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = (1u >> 2u);
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a >> b);
   return;
 }
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
index 232726a..d81e2de 100644
--- a/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = (1u >> 2u);
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a >> b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.dxc.hlsl
index 754b2e2..692f1ad 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float16_t r = float16_t(-1.0h);
+  const float16_t a = float16_t(1.0h);
+  const float16_t b = float16_t(2.0h);
+  const float16_t r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.glsl
index 17f9f5d..30fc61f 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.glsl
@@ -2,7 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void f() {
-  float16_t r = -1.0hf;
+  float16_t a = 1.0hf;
+  float16_t b = 2.0hf;
+  float16_t r = (a - b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.dxc.hlsl
index 671ced5..3da8f71 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = -1.0f;
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.fxc.hlsl
index 671ced5..3da8f71 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float r = -1.0f;
+  const float a = 1.0f;
+  const float b = 2.0f;
+  const float r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
index 6906c48..8e69008 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  float r = -1.0f;
+  float a = 1.0f;
+  float b = 2.0f;
+  float r = (a - b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.dxc.hlsl
index 716d120..d31ae60 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = -1;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.fxc.hlsl
index 716d120..d31ae60 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int r = -1;
+  const int a = 1;
+  const int b = 2;
+  const int r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
index 689a770..961b7f6 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  int r = -1;
+  int a = 1;
+  int b = 2;
+  int r = (a - b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.dxc.hlsl
index fafd6aa..52af93e 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 4294967295u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.fxc.hlsl
index fafd6aa..52af93e 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint r = 4294967295u;
+  const uint a = 1u;
+  const uint b = 2u;
+  const uint r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
index ce3479e..4c925c8 100644
--- a/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
@@ -1,7 +1,9 @@
 #version 310 es
 
 void f() {
-  uint r = 4294967295u;
+  uint a = 1u;
+  uint b = 2u;
+  uint r = (a - b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.dxc.hlsl
index 3738c63..ac64c79 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const vector<float16_t, 3> a = vector<float16_t, 3>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h));
-  const vector<float16_t, 3> r = (a - float16_t(4.0h));
+  const float16_t b = float16_t(4.0h);
+  const vector<float16_t, 3> r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.glsl b/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.glsl
index d9cea5f..1f92c96 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.glsl
@@ -3,7 +3,8 @@
 
 void f() {
   f16vec3 a = f16vec3(1.0hf, 2.0hf, 3.0hf);
-  f16vec3 r = (a - 4.0hf);
+  float16_t b = 4.0hf;
+  f16vec3 r = (a - b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.dxc.hlsl
index 0476c62..d3deb7b 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a - 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.fxc.hlsl
index 0476c62..d3deb7b 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const float3 a = float3(1.0f, 2.0f, 3.0f);
-  const float3 r = (a - 4.0f);
+  const float b = 4.0f;
+  const float3 r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl b/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
index 0eee275..4318e63 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   vec3 a = vec3(1.0f, 2.0f, 3.0f);
-  vec3 r = (a - 4.0f);
+  float b = 4.0f;
+  vec3 r = (a - b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.dxc.hlsl
index 8db37c9..defd761 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a - 4);
+  const int b = 4;
+  const int3 r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.fxc.hlsl
index 8db37c9..defd761 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const int3 a = int3(1, 2, 3);
-  const int3 r = (a - 4);
+  const int b = 4;
+  const int3 r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl b/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
index bdb3b3d..0094a72 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   ivec3 a = ivec3(1, 2, 3);
-  ivec3 r = (a - 4);
+  int b = 4;
+  ivec3 r = (a - b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.dxc.hlsl
index 6a9b7ee..794336d 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.dxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a - 4u);
+  const uint b = 4u;
+  const uint3 r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.fxc.hlsl
index 6a9b7ee..794336d 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.fxc.hlsl
@@ -1,6 +1,7 @@
 [numthreads(1, 1, 1)]
 void f() {
   const uint3 a = uint3(1u, 2u, 3u);
-  const uint3 r = (a - 4u);
+  const uint b = 4u;
+  const uint3 r = (a - b);
   return;
 }
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl b/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
index 75a50ae..ab7ea60 100644
--- a/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 void f() {
   uvec3 a = uvec3(1u, 2u, 3u);
-  uvec3 r = (a - 4u);
+  uint b = 4u;
+  uvec3 r = (a - b);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.dxc.hlsl
index 2e5fee6..3812633 100644
--- a/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float b = asfloat(1.0f);
+  const float a = 1.0f;
+  const float b = asfloat(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.fxc.hlsl
index 2e5fee6..3812633 100644
--- a/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float b = asfloat(1.0f);
+  const float a = 1.0f;
+  const float b = asfloat(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl b/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl
index 59c93e0..04cce1f 100644
--- a/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void f() {
-  float b = 1.0f;
+  float a = 1.0f;
+  float b = a;
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.dxc.hlsl
index e7f1a21..17af44a 100644
--- a/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int b = asint(1.0f);
+  const float a = 1.0f;
+  const int b = asint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.fxc.hlsl
index e7f1a21..17af44a 100644
--- a/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int b = asint(1.0f);
+  const float a = 1.0f;
+  const int b = asint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl b/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl
index ddf9429..af1d8fa 100644
--- a/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void f() {
-  int b = floatBitsToInt(1.0f);
+  float a = 1.0f;
+  int b = floatBitsToInt(a);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.dxc.hlsl
index 289a1d5..2b80226 100644
--- a/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint b = asuint(1.0f);
+  const float a = 1.0f;
+  const uint b = asuint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.fxc.hlsl
index 289a1d5..2b80226 100644
--- a/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint b = asuint(1.0f);
+  const float a = 1.0f;
+  const uint b = asuint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl b/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl
index 5c2fd32..10cce94 100644
--- a/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void f() {
-  uint b = floatBitsToUint(1.0f);
+  float a = 1.0f;
+  uint b = floatBitsToUint(a);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.dxc.hlsl
index 2fcce4f..4f38be2 100644
--- a/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float b = asfloat(1);
+  const int a = 1;
+  const float b = asfloat(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.fxc.hlsl
index 2fcce4f..4f38be2 100644
--- a/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float b = asfloat(1);
+  const int a = 1;
+  const float b = asfloat(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl b/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl
index 7899523..0ca0530 100644
--- a/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void f() {
-  float b = intBitsToFloat(1);
+  int a = 1;
+  float b = intBitsToFloat(a);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.dxc.hlsl
index 4fc4846..0b7fac2 100644
--- a/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int b = asint(1);
+  const int a = 1;
+  const int b = asint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.fxc.hlsl
index 4fc4846..0b7fac2 100644
--- a/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int b = asint(1);
+  const int a = 1;
+  const int b = asint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl b/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl
index 6b06bb5..941a76a 100644
--- a/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void f() {
-  int b = 1;
+  int a = 1;
+  int b = a;
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.dxc.hlsl
index d85da9a..757dc34 100644
--- a/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint b = asuint(1);
+  const int a = 1;
+  const uint b = asuint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.fxc.hlsl
index d85da9a..757dc34 100644
--- a/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint b = asuint(1);
+  const int a = 1;
+  const uint b = asuint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl b/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl
index e336b38..7b03936 100644
--- a/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void f() {
-  uint b = uint(1);
+  int a = 1;
+  uint b = uint(a);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.dxc.hlsl b/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.dxc.hlsl
index 1a00f3b..ef47ffc 100644
--- a/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float b = asfloat(1u);
+  const uint a = 1u;
+  const float b = asfloat(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.fxc.hlsl b/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.fxc.hlsl
index 1a00f3b..ef47ffc 100644
--- a/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const float b = asfloat(1u);
+  const uint a = 1u;
+  const float b = asfloat(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl b/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl
index 787d6f7..a55f5bf 100644
--- a/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl
+++ b/test/tint/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void f() {
-  float b = uintBitsToFloat(1u);
+  uint a = 1u;
+  float b = uintBitsToFloat(a);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.dxc.hlsl
index 2650dff..e5d73a2 100644
--- a/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int b = asint(1u);
+  const uint a = 1u;
+  const int b = asint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.fxc.hlsl
index 2650dff..e5d73a2 100644
--- a/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const int b = asint(1u);
+  const uint a = 1u;
+  const int b = asint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl b/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl
index 8c280a8..4c83dbe 100644
--- a/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void f() {
-  int b = int(1u);
+  uint a = 1u;
+  int b = int(a);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.dxc.hlsl
index 62d26be..58cd23c 100644
--- a/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint b = asuint(1u);
+  const uint a = 1u;
+  const uint b = asuint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.fxc.hlsl
index 62d26be..58cd23c 100644
--- a/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.fxc.hlsl
@@ -1,5 +1,6 @@
 [numthreads(1, 1, 1)]
 void f() {
-  const uint b = asuint(1u);
+  const uint a = 1u;
+  const uint b = asuint(a);
   return;
 }
diff --git a/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl b/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl
index c8a3121..d971697 100644
--- a/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl
@@ -1,7 +1,8 @@
 #version 310 es
 
 void f() {
-  uint b = 1u;
+  uint a = 1u;
+  uint b = a;
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.dxc.hlsl
index 7174cfa..2ed4f95 100644
--- a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 int f() {
   const int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[1];
+  const int i = 1;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.fxc.hlsl
index 7174cfa..2ed4f95 100644
--- a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 int f() {
   const int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[1];
+  const int i = 1;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.glsl b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.glsl
index 3761f17..924d504 100644
--- a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.glsl
+++ b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 int f() {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
-  return a[1];
+  int i = 1;
+  return a[i];
 }
 
diff --git a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.dxc.hlsl
index ad2d36b..ebc3718 100644
--- a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f() {
   const float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[1];
+  const int i = 1;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.fxc.hlsl
index ad2d36b..ebc3718 100644
--- a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f() {
   const float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[1];
+  const int i = 1;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.glsl b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.glsl
index 1b66086..3648af7 100644
--- a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.glsl
+++ b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 vec3 f() {
   mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
-  return m[1];
+  int i = 1;
+  return m[i];
 }
 
diff --git a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.dxc.hlsl
index ede6118..0c1a30d 100644
--- a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float f() {
   const float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[1];
+  const int i = 1;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.fxc.hlsl
index ede6118..0c1a30d 100644
--- a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float f() {
   const float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[1];
+  const int i = 1;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.glsl b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.glsl
index 0f24df5..fdd4cf8 100644
--- a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.glsl
+++ b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 float f() {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
-  return v[1];
+  int i = 1;
+  return v[i];
 }
 
diff --git a/test/tint/expressions/index/let/let/param/array.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/let/let/param/array.wgsl.expected.dxc.hlsl
index 520cdf8..94ea5f2 100644
--- a/test/tint/expressions/index/let/let/param/array.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/let/let/param/array.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 int f(int x) {
   const int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[x];
+  const int i = x;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/let/let/param/array.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/let/let/param/array.wgsl.expected.fxc.hlsl
index 520cdf8..94ea5f2 100644
--- a/test/tint/expressions/index/let/let/param/array.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/let/let/param/array.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 int f(int x) {
   const int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[x];
+  const int i = x;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/let/let/param/array.wgsl.expected.glsl b/test/tint/expressions/index/let/let/param/array.wgsl.expected.glsl
index 575406a..a01b796 100644
--- a/test/tint/expressions/index/let/let/param/array.wgsl.expected.glsl
+++ b/test/tint/expressions/index/let/let/param/array.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 int f(int x) {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
-  return a[x];
+  int i = x;
+  return a[i];
 }
 
diff --git a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.dxc.hlsl
index 332312c..8fa2ccd 100644
--- a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f(int x) {
   const float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[x];
+  const int i = x;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.fxc.hlsl
index 332312c..8fa2ccd 100644
--- a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f(int x) {
   const float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[x];
+  const int i = x;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.glsl b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.glsl
index 358024a..9b1bfc1 100644
--- a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.glsl
+++ b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 vec3 f(int x) {
   mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
-  return m[x];
+  int i = x;
+  return m[i];
 }
 
diff --git a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.dxc.hlsl
index 5629258..07ed90e 100644
--- a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float f(int x) {
   const float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[x];
+  const int i = x;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.fxc.hlsl
index 5629258..07ed90e 100644
--- a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float f(int x) {
   const float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[x];
+  const int i = x;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.glsl b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.glsl
index 53eb8d8..7dddab7 100644
--- a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.glsl
+++ b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 float f(int x) {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
-  return v[x];
+  int i = x;
+  return v[i];
 }
 
diff --git a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.dxc.hlsl
index 4338718..4c1df88 100644
--- a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 int f() {
   int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[1];
+  const int i = 1;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.fxc.hlsl
index 4338718..4c1df88 100644
--- a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 int f() {
   int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[1];
+  const int i = 1;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.glsl b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.glsl
index 3761f17..924d504 100644
--- a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.glsl
+++ b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 int f() {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
-  return a[1];
+  int i = 1;
+  return a[i];
 }
 
diff --git a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.dxc.hlsl
index 7b1ea5a..fac0dab 100644
--- a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f() {
   float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[1];
+  const int i = 1;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.fxc.hlsl
index 7b1ea5a..fac0dab 100644
--- a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f() {
   float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[1];
+  const int i = 1;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.glsl b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.glsl
index 1b66086..3648af7 100644
--- a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.glsl
+++ b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 vec3 f() {
   mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
-  return m[1];
+  int i = 1;
+  return m[i];
 }
 
diff --git a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.dxc.hlsl
index 7297f63..90a7801 100644
--- a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float f() {
   float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[1];
+  const int i = 1;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.fxc.hlsl
index 7297f63..90a7801 100644
--- a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float f() {
   float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[1];
+  const int i = 1;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.glsl b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.glsl
index 0f24df5..fdd4cf8 100644
--- a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.glsl
+++ b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 float f() {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
-  return v[1];
+  int i = 1;
+  return v[i];
 }
 
diff --git a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.dxc.hlsl
index 4338718..4c1df88 100644
--- a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 int f() {
   int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[1];
+  const int i = 1;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.fxc.hlsl
index 4338718..4c1df88 100644
--- a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 int f() {
   int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[1];
+  const int i = 1;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.glsl b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.glsl
index 3761f17..924d504 100644
--- a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.glsl
+++ b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 int f() {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
-  return a[1];
+  int i = 1;
+  return a[i];
 }
 
diff --git a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.dxc.hlsl
index 7b1ea5a..fac0dab 100644
--- a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f() {
   float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[1];
+  const int i = 1;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.fxc.hlsl
index 7b1ea5a..fac0dab 100644
--- a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f() {
   float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[1];
+  const int i = 1;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.glsl b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.glsl
index 1b66086..3648af7 100644
--- a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.glsl
+++ b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 vec3 f() {
   mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
-  return m[1];
+  int i = 1;
+  return m[i];
 }
 
diff --git a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.dxc.hlsl
index 7297f63..90a7801 100644
--- a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float f() {
   float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[1];
+  const int i = 1;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.fxc.hlsl
index 7297f63..90a7801 100644
--- a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float f() {
   float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[1];
+  const int i = 1;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.glsl b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.glsl
index 0f24df5..fdd4cf8 100644
--- a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.glsl
+++ b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 float f() {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
-  return v[1];
+  int i = 1;
+  return v[i];
 }
 
diff --git a/test/tint/expressions/index/var/let/param/array.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/var/let/param/array.wgsl.expected.dxc.hlsl
index 09ebc7d..fc6628b 100644
--- a/test/tint/expressions/index/var/let/param/array.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/var/let/param/array.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 int f(int x) {
   int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[x];
+  const int i = x;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/var/let/param/array.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/var/let/param/array.wgsl.expected.fxc.hlsl
index 09ebc7d..fc6628b 100644
--- a/test/tint/expressions/index/var/let/param/array.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/var/let/param/array.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 int f(int x) {
   int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-  return a[x];
+  const int i = x;
+  return a[i];
 }
diff --git a/test/tint/expressions/index/var/let/param/array.wgsl.expected.glsl b/test/tint/expressions/index/var/let/param/array.wgsl.expected.glsl
index 575406a..a01b796 100644
--- a/test/tint/expressions/index/var/let/param/array.wgsl.expected.glsl
+++ b/test/tint/expressions/index/var/let/param/array.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 int f(int x) {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
-  return a[x];
+  int i = x;
+  return a[i];
 }
 
diff --git a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.dxc.hlsl
index e71fa03..bd00d9f 100644
--- a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f(int x) {
   float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[x];
+  const int i = x;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.fxc.hlsl
index e71fa03..bd00d9f 100644
--- a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float3 f(int x) {
   float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  return m[x];
+  const int i = x;
+  return m[i];
 }
diff --git a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.glsl b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.glsl
index 358024a..9b1bfc1 100644
--- a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.glsl
+++ b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 vec3 f(int x) {
   mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
-  return m[x];
+  int i = x;
+  return m[i];
 }
 
diff --git a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.dxc.hlsl b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.dxc.hlsl
index 590b92e..d003aa1 100644
--- a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.dxc.hlsl
@@ -5,5 +5,6 @@
 
 float f(int x) {
   float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[x];
+  const int i = x;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.fxc.hlsl b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.fxc.hlsl
index 590b92e..d003aa1 100644
--- a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.fxc.hlsl
@@ -5,5 +5,6 @@
 
 float f(int x) {
   float3 v = float3(1.0f, 2.0f, 3.0f);
-  return v[x];
+  const int i = x;
+  return v[i];
 }
diff --git a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.glsl b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.glsl
index 53eb8d8..7dddab7 100644
--- a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.glsl
+++ b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 }
 float f(int x) {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
-  return v[x];
+  int i = x;
+  return v[i];
 }
 
diff --git a/test/tint/identifiers/underscore/double/let.wgsl.expected.dxc.hlsl b/test/tint/identifiers/underscore/double/let.wgsl.expected.dxc.hlsl
index b35994e..e17588b 100644
--- a/test/tint/identifiers/underscore/double/let.wgsl.expected.dxc.hlsl
+++ b/test/tint/identifiers/underscore/double/let.wgsl.expected.dxc.hlsl
@@ -5,6 +5,7 @@
 
 void f() {
   const int a = 1;
+  const int a__ = a;
   const int b = a;
-  const int b__ = a;
+  const int b__ = a__;
 }
diff --git a/test/tint/identifiers/underscore/double/let.wgsl.expected.fxc.hlsl b/test/tint/identifiers/underscore/double/let.wgsl.expected.fxc.hlsl
index b35994e..e17588b 100644
--- a/test/tint/identifiers/underscore/double/let.wgsl.expected.fxc.hlsl
+++ b/test/tint/identifiers/underscore/double/let.wgsl.expected.fxc.hlsl
@@ -5,6 +5,7 @@
 
 void f() {
   const int a = 1;
+  const int a__ = a;
   const int b = a;
-  const int b__ = a;
+  const int b__ = a__;
 }
diff --git a/test/tint/identifiers/underscore/double/let.wgsl.expected.glsl b/test/tint/identifiers/underscore/double/let.wgsl.expected.glsl
index 88072ea..f274d04 100644
--- a/test/tint/identifiers/underscore/double/let.wgsl.expected.glsl
+++ b/test/tint/identifiers/underscore/double/let.wgsl.expected.glsl
@@ -6,7 +6,8 @@
 }
 void f() {
   int a = 1;
+  int a__ = a;
   int b = a;
-  int b__ = a;
+  int b__ = a__;
 }
 
diff --git a/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.dxc.hlsl b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.dxc.hlsl
index 7698191..0dfc121 100644
--- a/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.dxc.hlsl
+++ b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.dxc.hlsl
@@ -5,6 +5,7 @@
 
 void f() {
   const int a = 1;
+  const int _a = a;
   const int b = a;
-  const int _b = a;
+  const int _b = _a;
 }
diff --git a/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.fxc.hlsl b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.fxc.hlsl
index 7698191..0dfc121 100644
--- a/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.fxc.hlsl
+++ b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.fxc.hlsl
@@ -5,6 +5,7 @@
 
 void f() {
   const int a = 1;
+  const int _a = a;
   const int b = a;
-  const int _b = a;
+  const int _b = _a;
 }
diff --git a/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.glsl b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.glsl
index 469fa8c..a64fda2 100644
--- a/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.glsl
+++ b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.glsl
@@ -6,7 +6,8 @@
 }
 void f() {
   int a = 1;
+  int _a = a;
   int b = a;
-  int _b = a;
+  int _b = _a;
 }
 
diff --git a/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.dxc.hlsl b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.dxc.hlsl
index 11ce076..215ddf9 100644
--- a/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.dxc.hlsl
+++ b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.dxc.hlsl
@@ -4,6 +4,8 @@
 }
 
 void f() {
-  const int B = 1;
-  const int _B = 2;
+  const int A = 1;
+  const int _A = 2;
+  const int B = A;
+  const int _B = _A;
 }
diff --git a/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.fxc.hlsl b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.fxc.hlsl
index 11ce076..215ddf9 100644
--- a/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.fxc.hlsl
+++ b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.fxc.hlsl
@@ -4,6 +4,8 @@
 }
 
 void f() {
-  const int B = 1;
-  const int _B = 2;
+  const int A = 1;
+  const int _A = 2;
+  const int B = A;
+  const int _B = _A;
 }
diff --git a/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.glsl b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.glsl
index 2ea9129..de5d463 100644
--- a/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.glsl
+++ b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.glsl
@@ -5,7 +5,9 @@
   return;
 }
 void f() {
-  int B = 1;
-  int _B = 2;
+  int A = 1;
+  int _A = 2;
+  int B = A;
+  int _B = _A;
 }
 
diff --git a/test/tint/ptr_ref/load/global/i32.spvasm.expected.dxc.hlsl b/test/tint/ptr_ref/load/global/i32.spvasm.expected.dxc.hlsl
index a75ddfa..949fd0b 100644
--- a/test/tint/ptr_ref/load/global/i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/ptr_ref/load/global/i32.spvasm.expected.dxc.hlsl
@@ -1,7 +1,8 @@
 static int I = 0;
 
 void main_1() {
-  const int x_11 = (I + 1);
+  const int x_9 = I;
+  const int x_11 = (x_9 + 1);
   return;
 }
 
diff --git a/test/tint/ptr_ref/load/global/i32.spvasm.expected.fxc.hlsl b/test/tint/ptr_ref/load/global/i32.spvasm.expected.fxc.hlsl
index a75ddfa..949fd0b 100644
--- a/test/tint/ptr_ref/load/global/i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/ptr_ref/load/global/i32.spvasm.expected.fxc.hlsl
@@ -1,7 +1,8 @@
 static int I = 0;
 
 void main_1() {
-  const int x_11 = (I + 1);
+  const int x_9 = I;
+  const int x_11 = (x_9 + 1);
   return;
 }
 
diff --git a/test/tint/ptr_ref/load/global/i32.spvasm.expected.glsl b/test/tint/ptr_ref/load/global/i32.spvasm.expected.glsl
index 5a32b52..5ce6b58 100644
--- a/test/tint/ptr_ref/load/global/i32.spvasm.expected.glsl
+++ b/test/tint/ptr_ref/load/global/i32.spvasm.expected.glsl
@@ -2,7 +2,8 @@
 
 int I = 0;
 void main_1() {
-  int x_11 = (I + 1);
+  int x_9 = I;
+  int x_11 = (x_9 + 1);
   return;
 }
 
diff --git a/test/tint/ptr_ref/load/global/i32.wgsl.expected.dxc.hlsl b/test/tint/ptr_ref/load/global/i32.wgsl.expected.dxc.hlsl
index ac07324..00e51eb 100644
--- a/test/tint/ptr_ref/load/global/i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/ptr_ref/load/global/i32.wgsl.expected.dxc.hlsl
@@ -2,6 +2,7 @@
 
 [numthreads(1, 1, 1)]
 void main() {
-  const int u = (I + 1);
+  const int i = I;
+  const int u = (i + 1);
   return;
 }
diff --git a/test/tint/ptr_ref/load/global/i32.wgsl.expected.fxc.hlsl b/test/tint/ptr_ref/load/global/i32.wgsl.expected.fxc.hlsl
index ac07324..00e51eb 100644
--- a/test/tint/ptr_ref/load/global/i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/ptr_ref/load/global/i32.wgsl.expected.fxc.hlsl
@@ -2,6 +2,7 @@
 
 [numthreads(1, 1, 1)]
 void main() {
-  const int u = (I + 1);
+  const int i = I;
+  const int u = (i + 1);
   return;
 }
diff --git a/test/tint/ptr_ref/load/global/i32.wgsl.expected.glsl b/test/tint/ptr_ref/load/global/i32.wgsl.expected.glsl
index 06c5a43..13870c2 100644
--- a/test/tint/ptr_ref/load/global/i32.wgsl.expected.glsl
+++ b/test/tint/ptr_ref/load/global/i32.wgsl.expected.glsl
@@ -2,7 +2,8 @@
 
 int I = 0;
 void tint_symbol() {
-  int u = (I + 1);
+  int i = I;
+  int u = (i + 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/ptr_ref/load/local/i32.spvasm.expected.dxc.hlsl b/test/tint/ptr_ref/load/local/i32.spvasm.expected.dxc.hlsl
index 3f9ee13..e93814c 100644
--- a/test/tint/ptr_ref/load/local/i32.spvasm.expected.dxc.hlsl
+++ b/test/tint/ptr_ref/load/local/i32.spvasm.expected.dxc.hlsl
@@ -1,7 +1,8 @@
 void main_1() {
   int i = 0;
   i = 123;
-  const int x_12 = (i + 1);
+  const int x_10 = i;
+  const int x_12 = (x_10 + 1);
   return;
 }
 
diff --git a/test/tint/ptr_ref/load/local/i32.spvasm.expected.fxc.hlsl b/test/tint/ptr_ref/load/local/i32.spvasm.expected.fxc.hlsl
index 3f9ee13..e93814c 100644
--- a/test/tint/ptr_ref/load/local/i32.spvasm.expected.fxc.hlsl
+++ b/test/tint/ptr_ref/load/local/i32.spvasm.expected.fxc.hlsl
@@ -1,7 +1,8 @@
 void main_1() {
   int i = 0;
   i = 123;
-  const int x_12 = (i + 1);
+  const int x_10 = i;
+  const int x_12 = (x_10 + 1);
   return;
 }
 
diff --git a/test/tint/ptr_ref/load/local/i32.spvasm.expected.glsl b/test/tint/ptr_ref/load/local/i32.spvasm.expected.glsl
index 5320612..4c49a4e 100644
--- a/test/tint/ptr_ref/load/local/i32.spvasm.expected.glsl
+++ b/test/tint/ptr_ref/load/local/i32.spvasm.expected.glsl
@@ -3,7 +3,8 @@
 void main_1() {
   int i = 0;
   i = 123;
-  int x_12 = (i + 1);
+  int x_10 = i;
+  int x_12 = (x_10 + 1);
   return;
 }
 
diff --git a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.dxc.hlsl b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.dxc.hlsl
index 2ddad5c..abdb81c 100644
--- a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.dxc.hlsl
+++ b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.dxc.hlsl
@@ -6,7 +6,8 @@
 void main_1() {
   int i = 0;
   i = 123;
-  const int x_18 = func(i, i);
+  const int x_19 = i;
+  const int x_18 = func(x_19, i);
   return;
 }
 
diff --git a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.fxc.hlsl b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.fxc.hlsl
index 2ddad5c..abdb81c 100644
--- a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.fxc.hlsl
+++ b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.fxc.hlsl
@@ -6,7 +6,8 @@
 void main_1() {
   int i = 0;
   i = 123;
-  const int x_18 = func(i, i);
+  const int x_19 = i;
+  const int x_18 = func(x_19, i);
   return;
 }
 
diff --git a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.glsl b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.glsl
index 71f3b3f..0423235 100644
--- a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.glsl
+++ b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.glsl
@@ -8,7 +8,8 @@
 void main_1() {
   int i = 0;
   i = 123;
-  int x_18 = func(i, i);
+  int x_19 = i;
+  int x_18 = func(x_19, i);
   return;
 }
 
diff --git a/test/tint/shadowing/function/let.wgsl.expected.dxc.hlsl b/test/tint/shadowing/function/let.wgsl.expected.dxc.hlsl
index 33c805b..3319c80 100644
--- a/test/tint/shadowing/function/let.wgsl.expected.dxc.hlsl
+++ b/test/tint/shadowing/function/let.wgsl.expected.dxc.hlsl
@@ -8,5 +8,6 @@
     int a_1 = 1;
     int b = a_1;
   }
-  const int b = 1;
+  const int a_2 = 1;
+  const int b = a_2;
 }
diff --git a/test/tint/shadowing/function/let.wgsl.expected.fxc.hlsl b/test/tint/shadowing/function/let.wgsl.expected.fxc.hlsl
index 33c805b..3319c80 100644
--- a/test/tint/shadowing/function/let.wgsl.expected.fxc.hlsl
+++ b/test/tint/shadowing/function/let.wgsl.expected.fxc.hlsl
@@ -8,5 +8,6 @@
     int a_1 = 1;
     int b = a_1;
   }
-  const int b = 1;
+  const int a_2 = 1;
+  const int b = a_2;
 }
diff --git a/test/tint/shadowing/function/let.wgsl.expected.glsl b/test/tint/shadowing/function/let.wgsl.expected.glsl
index 93314ea..fc881e7 100644
--- a/test/tint/shadowing/function/let.wgsl.expected.glsl
+++ b/test/tint/shadowing/function/let.wgsl.expected.glsl
@@ -9,6 +9,7 @@
     int a_1 = 1;
     int b = a_1;
   }
-  int b = 1;
+  int a_2 = 1;
+  int b = a_2;
 }
 
diff --git a/test/tint/shadowing/param/let.wgsl.expected.dxc.hlsl b/test/tint/shadowing/param/let.wgsl.expected.dxc.hlsl
index ad522f3..b78fca1 100644
--- a/test/tint/shadowing/param/let.wgsl.expected.dxc.hlsl
+++ b/test/tint/shadowing/param/let.wgsl.expected.dxc.hlsl
@@ -5,6 +5,7 @@
 
 void f(int a) {
   {
-    const int b = a;
+    const int a_1 = a;
+    const int b = a_1;
   }
 }
diff --git a/test/tint/shadowing/param/let.wgsl.expected.fxc.hlsl b/test/tint/shadowing/param/let.wgsl.expected.fxc.hlsl
index ad522f3..b78fca1 100644
--- a/test/tint/shadowing/param/let.wgsl.expected.fxc.hlsl
+++ b/test/tint/shadowing/param/let.wgsl.expected.fxc.hlsl
@@ -5,6 +5,7 @@
 
 void f(int a) {
   {
-    const int b = a;
+    const int a_1 = a;
+    const int b = a_1;
   }
 }
diff --git a/test/tint/shadowing/param/let.wgsl.expected.glsl b/test/tint/shadowing/param/let.wgsl.expected.glsl
index b182178..c3dc873 100644
--- a/test/tint/shadowing/param/let.wgsl.expected.glsl
+++ b/test/tint/shadowing/param/let.wgsl.expected.glsl
@@ -6,7 +6,8 @@
 }
 void f(int a) {
   {
-    int b = a;
+    int a_1 = a;
+    int b = a_1;
   }
 }