diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index db3665e..c1c73b2 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -84,8 +84,9 @@
     return false;
   }
 
-  out_ << "#include <metal_stdlib>" << std::endl << std::endl;
-  out_ << "using namespace metal;" << std::endl;
+  line() << "#include <metal_stdlib>";
+  line();
+  line() << "using namespace metal;";
 
   for (auto* const type_decl : program_->AST().TypeDecls()) {
     if (!type_decl->Is<ast::Alias>()) {
@@ -96,7 +97,7 @@
   }
 
   if (!program_->AST().TypeDecls().empty()) {
-    out_ << std::endl;
+    line();
   }
 
   for (auto* var : program_->AST().GlobalVariables()) {
@@ -130,14 +131,13 @@
         return false;
       }
     }
+    line();
   }
 
   return true;
 }
 
 bool GeneratorImpl::EmitTypeDecl(const sem::Type* ty) {
-  make_indent();
-
   if (auto* str = ty->As<sem::Struct>()) {
     if (!EmitStructType(str)) {
       return false;
@@ -151,159 +151,161 @@
   return true;
 }
 
-bool GeneratorImpl::EmitArrayAccessor(ast::ArrayAccessorExpression* expr) {
+bool GeneratorImpl::EmitArrayAccessor(std::ostream& out,
+                                      ast::ArrayAccessorExpression* expr) {
   bool paren_lhs =
       !expr->array()
            ->IsAnyOf<ast::ArrayAccessorExpression, ast::CallExpression,
                      ast::IdentifierExpression, ast::MemberAccessorExpression,
                      ast::TypeConstructorExpression>();
+
   if (paren_lhs) {
-    out_ << "(";
+    out << "(";
   }
-  if (!EmitExpression(expr->array())) {
+  if (!EmitExpression(out, expr->array())) {
     return false;
   }
   if (paren_lhs) {
-    out_ << ")";
+    out << ")";
   }
 
-  out_ << "[";
+  out << "[";
 
-  if (!EmitExpression(expr->idx_expr())) {
+  if (!EmitExpression(out, expr->idx_expr())) {
     return false;
   }
-  out_ << "]";
+  out << "]";
 
   return true;
 }
 
-bool GeneratorImpl::EmitBitcast(ast::BitcastExpression* expr) {
-  out_ << "as_type<";
-  if (!EmitType(TypeOf(expr)->UnwrapRef(), "")) {
+bool GeneratorImpl::EmitBitcast(std::ostream& out,
+                                ast::BitcastExpression* expr) {
+  out << "as_type<";
+  if (!EmitType(out, TypeOf(expr)->UnwrapRef(), "")) {
     return false;
   }
 
-  out_ << ">(";
-  if (!EmitExpression(expr->expr())) {
+  out << ">(";
+  if (!EmitExpression(out, expr->expr())) {
     return false;
   }
 
-  out_ << ")";
+  out << ")";
   return true;
 }
 
 bool GeneratorImpl::EmitAssign(ast::AssignmentStatement* stmt) {
-  make_indent();
+  auto out = line();
 
-  if (!EmitExpression(stmt->lhs())) {
+  if (!EmitExpression(out, stmt->lhs())) {
     return false;
   }
 
-  out_ << " = ";
+  out << " = ";
 
-  if (!EmitExpression(stmt->rhs())) {
+  if (!EmitExpression(out, stmt->rhs())) {
     return false;
   }
 
-  out_ << ";" << std::endl;
+  out << ";";
 
   return true;
 }
 
-bool GeneratorImpl::EmitBinary(ast::BinaryExpression* expr) {
-  out_ << "(";
+bool GeneratorImpl::EmitBinary(std::ostream& out, ast::BinaryExpression* expr) {
+  out << "(";
 
-  if (!EmitExpression(expr->lhs())) {
+  if (!EmitExpression(out, expr->lhs())) {
     return false;
   }
-  out_ << " ";
+  out << " ";
 
   switch (expr->op()) {
     case ast::BinaryOp::kAnd:
-      out_ << "&";
+      out << "&";
       break;
     case ast::BinaryOp::kOr:
-      out_ << "|";
+      out << "|";
       break;
     case ast::BinaryOp::kXor:
-      out_ << "^";
+      out << "^";
       break;
     case ast::BinaryOp::kLogicalAnd:
-      out_ << "&&";
+      out << "&&";
       break;
     case ast::BinaryOp::kLogicalOr:
-      out_ << "||";
+      out << "||";
       break;
     case ast::BinaryOp::kEqual:
-      out_ << "==";
+      out << "==";
       break;
     case ast::BinaryOp::kNotEqual:
-      out_ << "!=";
+      out << "!=";
       break;
     case ast::BinaryOp::kLessThan:
-      out_ << "<";
+      out << "<";
       break;
     case ast::BinaryOp::kGreaterThan:
-      out_ << ">";
+      out << ">";
       break;
     case ast::BinaryOp::kLessThanEqual:
-      out_ << "<=";
+      out << "<=";
       break;
     case ast::BinaryOp::kGreaterThanEqual:
-      out_ << ">=";
+      out << ">=";
       break;
     case ast::BinaryOp::kShiftLeft:
-      out_ << "<<";
+      out << "<<";
       break;
     case ast::BinaryOp::kShiftRight:
       // TODO(dsinclair): MSL is based on C++14, and >> in C++14 has
       // implementation-defined behaviour for negative LHS.  We may have to
       // generate extra code to implement WGSL-specified behaviour for negative
       // LHS.
-      out_ << R"(>>)";
+      out << R"(>>)";
       break;
 
     case ast::BinaryOp::kAdd:
-      out_ << "+";
+      out << "+";
       break;
     case ast::BinaryOp::kSubtract:
-      out_ << "-";
+      out << "-";
       break;
     case ast::BinaryOp::kMultiply:
-      out_ << "*";
+      out << "*";
       break;
     case ast::BinaryOp::kDivide:
-      out_ << "/";
+      out << "/";
       break;
     case ast::BinaryOp::kModulo:
-      out_ << "%";
+      out << "%";
       break;
     case ast::BinaryOp::kNone:
       diagnostics_.add_error(diag::System::Writer,
                              "missing binary operation type");
       return false;
   }
-  out_ << " ";
+  out << " ";
 
-  if (!EmitExpression(expr->rhs())) {
+  if (!EmitExpression(out, expr->rhs())) {
     return false;
   }
 
-  out_ << ")";
+  out << ")";
   return true;
 }
 
 bool GeneratorImpl::EmitBreak(ast::BreakStatement*) {
-  make_indent();
-  out_ << "break;" << std::endl;
+  line() << "break;";
   return true;
 }
 
-bool GeneratorImpl::EmitCall(ast::CallExpression* expr) {
+bool GeneratorImpl::EmitCall(std::ostream& out, ast::CallExpression* expr) {
   auto* ident = expr->func();
   auto* call = program_->Sem().Get(expr);
   if (auto* intrinsic = call->Target()->As<sem::Intrinsic>()) {
-    return EmitIntrinsicCall(expr, intrinsic);
+    return EmitIntrinsicCall(out, expr, intrinsic);
   }
 
   auto* func = program_->AST().Functions().Find(ident->symbol());
@@ -314,81 +316,79 @@
     return false;
   }
 
-  out_ << program_->Symbols().NameFor(ident->symbol()) << "(";
+  out << program_->Symbols().NameFor(ident->symbol()) << "(";
 
   bool first = true;
   auto* func_sem = program_->Sem().Get(func);
   for (const auto& data : func_sem->ReferencedUniformVariables()) {
     auto* var = data.first;
     if (!first) {
-      out_ << ", ";
+      out << ", ";
     }
     first = false;
-    out_ << program_->Symbols().NameFor(var->Declaration()->symbol());
+    out << program_->Symbols().NameFor(var->Declaration()->symbol());
   }
 
   for (const auto& data : func_sem->ReferencedStorageBufferVariables()) {
     auto* var = data.first;
     if (!first) {
-      out_ << ", ";
+      out << ", ";
     }
     first = false;
-    out_ << program_->Symbols().NameFor(var->Declaration()->symbol());
+    out << program_->Symbols().NameFor(var->Declaration()->symbol());
   }
 
   const auto& params = expr->params();
   for (auto* param : params) {
     if (!first) {
-      out_ << ", ";
+      out << ", ";
     }
     first = false;
 
-    if (!EmitExpression(param)) {
+    if (!EmitExpression(out, param)) {
       return false;
     }
   }
 
-  out_ << ")";
+  out << ")";
 
   return true;
 }
 
-bool GeneratorImpl::EmitIntrinsicCall(ast::CallExpression* expr,
+bool GeneratorImpl::EmitIntrinsicCall(std::ostream& out,
+                                      ast::CallExpression* expr,
                                       const sem::Intrinsic* intrinsic) {
   if (intrinsic->IsTexture()) {
-    return EmitTextureCall(expr, intrinsic);
+    return EmitTextureCall(out, expr, intrinsic);
   }
 
   switch (intrinsic->Type()) {
     case sem::IntrinsicType::kPack2x16float:
     case sem::IntrinsicType::kUnpack2x16float: {
-      make_indent();
       if (intrinsic->Type() == sem::IntrinsicType::kPack2x16float) {
-        out_ << "as_type<uint>(half2(";
+        out << "as_type<uint>(half2(";
       } else {
-        out_ << "float2(as_type<half2>(";
+        out << "float2(as_type<half2>(";
       }
-      if (!EmitExpression(expr->params()[0])) {
+      if (!EmitExpression(out, expr->params()[0])) {
         return false;
       }
-      out_ << "))";
+      out << "))";
       return true;
     }
     // TODO(crbug.com/tint/661): Combine sequential barriers to a single
     // instruction.
     case sem::IntrinsicType::kStorageBarrier: {
-      make_indent();
-      out_ << "threadgroup_barrier(mem_flags::mem_device)";
+      out << "threadgroup_barrier(mem_flags::mem_device)";
       return true;
     }
     case sem::IntrinsicType::kWorkgroupBarrier: {
-      make_indent();
-      out_ << "threadgroup_barrier(mem_flags::mem_threadgroup)";
+      out << "threadgroup_barrier(mem_flags::mem_threadgroup)";
       return true;
     }
     case sem::IntrinsicType::kIgnore: {
-      out_ << "(void) ";
-      if (!EmitExpression(expr->params()[0])) {
+      out << "(void) ";
+      if (!EmitExpression(out, expr->params()[0])) {
         return false;
       }
       return true;
@@ -402,27 +402,27 @@
     return false;
   }
 
-  make_indent();
-  out_ << name << "(";
+  out << name << "(";
 
   bool first = true;
   const auto& params = expr->params();
   for (auto* param : params) {
     if (!first) {
-      out_ << ", ";
+      out << ", ";
     }
     first = false;
 
-    if (!EmitExpression(param)) {
+    if (!EmitExpression(out, param)) {
       return false;
     }
   }
 
-  out_ << ")";
+  out << ")";
   return true;
 }
 
-bool GeneratorImpl::EmitTextureCall(ast::CallExpression* expr,
+bool GeneratorImpl::EmitTextureCall(std::ostream& out,
+                                    ast::CallExpression* expr,
                                     const sem::Intrinsic* intrinsic) {
   using Usage = sem::ParameterUsage;
 
@@ -453,13 +453,13 @@
                        ast::IdentifierExpression, ast::MemberAccessorExpression,
                        ast::TypeConstructorExpression>();
     if (paren_lhs) {
-      out_ << "(";
+      out << "(";
     }
-    if (!EmitExpression(texture)) {
+    if (!EmitExpression(out, texture)) {
       return false;
     }
     if (paren_lhs) {
-      out_ << ")";
+      out << ")";
     }
     return true;
   };
@@ -490,55 +490,55 @@
         if (!texture_expr()) {
           return false;
         }
-        out_ << ".get_" << name << "(";
+        out << ".get_" << name << "(";
         if (auto* level = arg(Usage::kLevel)) {
-          if (!EmitExpression(level)) {
+          if (!EmitExpression(out, level)) {
             return false;
           }
         }
-        out_ << ")";
+        out << ")";
         return true;
       };
 
       if (dims.size() == 1) {
-        out_ << "int(";
+        out << "int(";
         get_dim(dims[0]);
-        out_ << ")";
+        out << ")";
       } else {
-        EmitType(TypeOf(expr)->UnwrapRef(), "");
-        out_ << "(";
+        EmitType(out, TypeOf(expr)->UnwrapRef(), "");
+        out << "(";
         for (size_t i = 0; i < dims.size(); i++) {
           if (i > 0) {
-            out_ << ", ";
+            out << ", ";
           }
           get_dim(dims[i]);
         }
-        out_ << ")";
+        out << ")";
       }
       return true;
     }
     case sem::IntrinsicType::kTextureNumLayers: {
-      out_ << "int(";
+      out << "int(";
       if (!texture_expr()) {
         return false;
       }
-      out_ << ".get_array_size())";
+      out << ".get_array_size())";
       return true;
     }
     case sem::IntrinsicType::kTextureNumLevels: {
-      out_ << "int(";
+      out << "int(";
       if (!texture_expr()) {
         return false;
       }
-      out_ << ".get_num_mip_levels())";
+      out << ".get_num_mip_levels())";
       return true;
     }
     case sem::IntrinsicType::kTextureNumSamples: {
-      out_ << "int(";
+      out << "int(";
       if (!texture_expr()) {
         return false;
       }
-      out_ << ".get_num_samples())";
+      out << ".get_num_samples())";
       return true;
     }
     default:
@@ -556,18 +556,18 @@
     case sem::IntrinsicType::kTextureSampleBias:
     case sem::IntrinsicType::kTextureSampleLevel:
     case sem::IntrinsicType::kTextureSampleGrad:
-      out_ << ".sample(";
+      out << ".sample(";
       break;
     case sem::IntrinsicType::kTextureSampleCompare:
     case sem::IntrinsicType::kTextureSampleCompareLevel:
-      out_ << ".sample_compare(";
+      out << ".sample_compare(";
       break;
     case sem::IntrinsicType::kTextureLoad:
-      out_ << ".read(";
+      out << ".read(";
       lod_param_is_named = false;
       break;
     case sem::IntrinsicType::kTextureStore:
-      out_ << ".write(";
+      out << ".write(";
       break;
     default:
       TINT_UNREACHABLE(Writer, diagnostics_)
@@ -578,7 +578,7 @@
   bool first_arg = true;
   auto maybe_write_comma = [&] {
     if (!first_arg) {
-      out_ << ", ";
+      out << ", ";
     }
     first_arg = false;
   };
@@ -598,14 +598,14 @@
         casted = true;
         switch (texture_type->dim()) {
           case ast::TextureDimension::k1d:
-            out_ << "uint(";
+            out << "uint(";
             break;
           case ast::TextureDimension::k2d:
           case ast::TextureDimension::k2dArray:
-            out_ << "uint2(";
+            out << "uint2(";
             break;
           case ast::TextureDimension::k3d:
-            out_ << "uint3(";
+            out << "uint3(";
             break;
           default:
             TINT_ICE(Writer, diagnostics_)
@@ -614,38 +614,38 @@
         }
       }
 
-      if (!EmitExpression(e))
+      if (!EmitExpression(out, e))
         return false;
 
       if (casted) {
-        out_ << ")";
+        out << ")";
       }
     }
   }
 
   if (auto* bias = arg(Usage::kBias)) {
     maybe_write_comma();
-    out_ << "bias(";
-    if (!EmitExpression(bias)) {
+    out << "bias(";
+    if (!EmitExpression(out, bias)) {
       return false;
     }
-    out_ << ")";
+    out << ")";
   }
   if (auto* level = arg(Usage::kLevel)) {
     maybe_write_comma();
     if (lod_param_is_named) {
-      out_ << "level(";
+      out << "level(";
     }
-    if (!EmitExpression(level)) {
+    if (!EmitExpression(out, level)) {
       return false;
     }
     if (lod_param_is_named) {
-      out_ << ")";
+      out << ")";
     }
   }
   if (intrinsic->Type() == sem::IntrinsicType::kTextureSampleCompareLevel) {
     maybe_write_comma();
-    out_ << "level(0)";
+    out << "level(0)";
   }
   if (auto* ddx = arg(Usage::kDdx)) {
     auto dim = texture_type->dim();
@@ -653,16 +653,16 @@
       case ast::TextureDimension::k2d:
       case ast::TextureDimension::k2dArray:
         maybe_write_comma();
-        out_ << "gradient2d(";
+        out << "gradient2d(";
         break;
       case ast::TextureDimension::k3d:
         maybe_write_comma();
-        out_ << "gradient3d(";
+        out << "gradient3d(";
         break;
       case ast::TextureDimension::kCube:
       case ast::TextureDimension::kCubeArray:
         maybe_write_comma();
-        out_ << "gradientcube(";
+        out << "gradientcube(";
         break;
       default: {
         std::stringstream err;
@@ -671,24 +671,24 @@
         return false;
       }
     }
-    if (!EmitExpression(ddx)) {
+    if (!EmitExpression(out, ddx)) {
       return false;
     }
-    out_ << ", ";
-    if (!EmitExpression(arg(Usage::kDdy))) {
+    out << ", ";
+    if (!EmitExpression(out, arg(Usage::kDdy))) {
       return false;
     }
-    out_ << ")";
+    out << ")";
   }
 
   if (auto* offset = arg(Usage::kOffset)) {
     maybe_write_comma();
-    if (!EmitExpression(offset)) {
+    if (!EmitExpression(out, offset)) {
       return false;
     }
   }
 
-  out_ << ")";
+  out << ")";
 
   return true;
 }
@@ -836,91 +836,85 @@
 }
 
 bool GeneratorImpl::EmitCase(ast::CaseStatement* stmt) {
-  make_indent();
-
   if (stmt->IsDefault()) {
-    out_ << "default:";
+    line() << "default: {";
   } else {
-    bool first = true;
     for (auto* selector : stmt->selectors()) {
-      if (!first) {
-        out_ << std::endl;
-        make_indent();
-      }
-      first = false;
-
-      out_ << "case ";
-      if (!EmitLiteral(selector)) {
+      auto out = line();
+      out << "case ";
+      if (!EmitLiteral(out, selector)) {
         return false;
       }
-      out_ << ":";
+      out << ":";
+      if (selector == stmt->selectors().back()) {
+        out << " {";
+      }
     }
   }
 
-  out_ << " {" << std::endl;
+  {
+    ScopedIndent si(this);
 
-  increment_indent();
+    for (auto* s : *stmt->body()) {
+      if (!EmitStatement(s)) {
+        return false;
+      }
+    }
 
-  for (auto* s : *stmt->body()) {
-    if (!EmitStatement(s)) {
-      return false;
+    if (!last_is_break_or_fallthrough(stmt->body())) {
+      line() << "break;";
     }
   }
 
-  if (!last_is_break_or_fallthrough(stmt->body())) {
-    make_indent();
-    out_ << "break;" << std::endl;
-  }
-
-  decrement_indent();
-  make_indent();
-  out_ << "}" << std::endl;
+  line() << "}";
 
   return true;
 }
 
-bool GeneratorImpl::EmitConstructor(ast::ConstructorExpression* expr) {
+bool GeneratorImpl::EmitConstructor(std::ostream& out,
+                                    ast::ConstructorExpression* expr) {
   if (auto* scalar = expr->As<ast::ScalarConstructorExpression>()) {
-    return EmitScalarConstructor(scalar);
+    return EmitScalarConstructor(out, scalar);
   }
-  return EmitTypeConstructor(expr->As<ast::TypeConstructorExpression>());
+  return EmitTypeConstructor(out, expr->As<ast::TypeConstructorExpression>());
 }
 
 bool GeneratorImpl::EmitContinue(ast::ContinueStatement*) {
   if (!emit_continuing_()) {
     return false;
   }
-  make_indent();
-  out_ << "continue;" << std::endl;
+
+  line() << "continue;";
   return true;
 }
 
-bool GeneratorImpl::EmitTypeConstructor(ast::TypeConstructorExpression* expr) {
+bool GeneratorImpl::EmitTypeConstructor(std::ostream& out,
+                                        ast::TypeConstructorExpression* expr) {
   auto* type = TypeOf(expr)->UnwrapRef();
 
   if (type->IsAnyOf<sem::Array, sem::Struct>()) {
-    out_ << "{";
+    out << "{";
   } else {
-    if (!EmitType(type, "")) {
+    if (!EmitType(out, type, "")) {
       return false;
     }
-    out_ << "(";
+    out << "(";
   }
 
   int i = 0;
   for (auto* e : expr->values()) {
     if (i > 0) {
-      out_ << ", ";
+      out << ", ";
     }
 
     if (auto* struct_ty = type->As<sem::Struct>()) {
       // Emit field designators for structures to account for padding members.
       auto* member = struct_ty->Members()[i]->Declaration();
       auto name = program_->Symbols().NameFor(member->symbol());
-      out_ << "." << name << "=";
+      out << "." << name << "=";
     }
 
-    if (!EmitExpression(e)) {
+    if (!EmitExpression(out, e)) {
       return false;
     }
 
@@ -928,41 +922,41 @@
   }
 
   if (type->IsAnyOf<sem::Array, sem::Struct>()) {
-    out_ << "}";
+    out << "}";
   } else {
-    out_ << ")";
+    out << ")";
   }
   return true;
 }
 
-bool GeneratorImpl::EmitZeroValue(const sem::Type* type) {
+bool GeneratorImpl::EmitZeroValue(std::ostream& out, const sem::Type* type) {
   if (type->Is<sem::Bool>()) {
-    out_ << "false";
+    out << "false";
   } else if (type->Is<sem::F32>()) {
-    out_ << "0.0f";
+    out << "0.0f";
   } else if (type->Is<sem::I32>()) {
-    out_ << "0";
+    out << "0";
   } else if (type->Is<sem::U32>()) {
-    out_ << "0u";
+    out << "0u";
   } else if (auto* vec = type->As<sem::Vector>()) {
-    return EmitZeroValue(vec->type());
+    return EmitZeroValue(out, vec->type());
   } else if (auto* mat = type->As<sem::Matrix>()) {
-    if (!EmitType(mat, "")) {
+    if (!EmitType(out, mat, "")) {
       return false;
     }
-    out_ << "(";
-    if (!EmitZeroValue(mat->type())) {
+    out << "(";
+    if (!EmitZeroValue(out, mat->type())) {
       return false;
     }
-    out_ << ")";
+    out << ")";
   } else if (auto* arr = type->As<sem::Array>()) {
-    out_ << "{";
-    if (!EmitZeroValue(arr->ElemType())) {
+    out << "{";
+    if (!EmitZeroValue(out, arr->ElemType())) {
       return false;
     }
-    out_ << "}";
+    out << "}";
   } else if (type->As<sem::Struct>()) {
-    out_ << "{}";
+    out << "{}";
   } else {
     diagnostics_.add_error(
         diag::System::Writer,
@@ -973,19 +967,20 @@
 }
 
 bool GeneratorImpl::EmitScalarConstructor(
+    std::ostream& out,
     ast::ScalarConstructorExpression* expr) {
-  return EmitLiteral(expr->literal());
+  return EmitLiteral(out, expr->literal());
 }
 
-bool GeneratorImpl::EmitLiteral(ast::Literal* lit) {
+bool GeneratorImpl::EmitLiteral(std::ostream& out, ast::Literal* lit) {
   if (auto* l = lit->As<ast::BoolLiteral>()) {
-    out_ << (l->IsTrue() ? "true" : "false");
+    out << (l->IsTrue() ? "true" : "false");
   } else if (auto* fl = lit->As<ast::FloatLiteral>()) {
-    out_ << FloatToString(fl->value()) << "f";
+    out << FloatToString(fl->value()) << "f";
   } else if (auto* sl = lit->As<ast::SintLiteral>()) {
-    out_ << sl->value();
+    out << sl->value();
   } else if (auto* ul = lit->As<ast::UintLiteral>()) {
-    out_ << ul->value() << "u";
+    out << ul->value() << "u";
   } else {
     diagnostics_.add_error(diag::System::Writer, "unknown literal type");
     return false;
@@ -993,30 +988,30 @@
   return true;
 }
 
-bool GeneratorImpl::EmitExpression(ast::Expression* expr) {
+bool GeneratorImpl::EmitExpression(std::ostream& out, ast::Expression* expr) {
   if (auto* a = expr->As<ast::ArrayAccessorExpression>()) {
-    return EmitArrayAccessor(a);
+    return EmitArrayAccessor(out, a);
   }
   if (auto* b = expr->As<ast::BinaryExpression>()) {
-    return EmitBinary(b);
+    return EmitBinary(out, b);
   }
   if (auto* b = expr->As<ast::BitcastExpression>()) {
-    return EmitBitcast(b);
+    return EmitBitcast(out, b);
   }
   if (auto* c = expr->As<ast::CallExpression>()) {
-    return EmitCall(c);
+    return EmitCall(out, c);
   }
   if (auto* c = expr->As<ast::ConstructorExpression>()) {
-    return EmitConstructor(c);
+    return EmitConstructor(out, c);
   }
   if (auto* i = expr->As<ast::IdentifierExpression>()) {
-    return EmitIdentifier(i);
+    return EmitIdentifier(out, i);
   }
   if (auto* m = expr->As<ast::MemberAccessorExpression>()) {
-    return EmitMemberAccessor(m);
+    return EmitMemberAccessor(out, m);
   }
   if (auto* u = expr->As<ast::UnaryOpExpression>()) {
-    return EmitUnaryOp(u);
+    return EmitUnaryOp(out, u);
   }
 
   diagnostics_.add_error(diag::System::Writer,
@@ -1024,16 +1019,16 @@
   return false;
 }
 
-void GeneratorImpl::EmitStage(ast::PipelineStage stage) {
+void GeneratorImpl::EmitStage(std::ostream& out, ast::PipelineStage stage) {
   switch (stage) {
     case ast::PipelineStage::kFragment:
-      out_ << "fragment";
+      out << "fragment";
       break;
     case ast::PipelineStage::kVertex:
-      out_ << "vertex";
+      out << "vertex";
       break;
     case ast::PipelineStage::kCompute:
-      out_ << "kernel";
+      out << "kernel";
       break;
     case ast::PipelineStage::kNone:
       break;
@@ -1042,75 +1037,76 @@
 }
 
 bool GeneratorImpl::EmitFunction(ast::Function* func) {
-  make_indent();
-
   auto* func_sem = program_->Sem().Get(func);
 
-  if (!EmitType(func_sem->ReturnType(), "")) {
-    return false;
-  }
-  out_ << " " << program_->Symbols().NameFor(func->symbol()) << "(";
-
-  bool first = true;
-  for (const auto& data : func_sem->ReferencedUniformVariables()) {
-    auto* var = data.first;
-    if (!first) {
-      out_ << ", ";
-    }
-    first = false;
-
-    out_ << "constant ";
-    // TODO(dsinclair): Can arrays be uniform? If so, fix this ...
-    if (!EmitType(var->Type()->UnwrapRef(), "")) {
+  {
+    auto out = line();
+    if (!EmitType(out, func_sem->ReturnType(), "")) {
       return false;
     }
-    out_ << "& " << program_->Symbols().NameFor(var->Declaration()->symbol());
+    out << " " << program_->Symbols().NameFor(func->symbol()) << "(";
+
+    bool first = true;
+    for (const auto& data : func_sem->ReferencedUniformVariables()) {
+      auto* var = data.first;
+      if (!first) {
+        out << ", ";
+      }
+      first = false;
+
+      out << "constant ";
+      // TODO(dsinclair): Can arrays be uniform? If so, fix this ...
+      if (!EmitType(out, var->Type()->UnwrapRef(), "")) {
+        return false;
+      }
+      out << "& " << program_->Symbols().NameFor(var->Declaration()->symbol());
+    }
+
+    for (const auto& data : func_sem->ReferencedStorageBufferVariables()) {
+      auto* var = data.first;
+      if (!first) {
+        out << ", ";
+      }
+      first = false;
+
+      if (var->Access() == ast::Access::kRead) {
+        out << "const ";
+      }
+
+      out << "device ";
+      if (!EmitType(out, var->Type()->UnwrapRef(), "")) {
+        return false;
+      }
+      out << "& " << program_->Symbols().NameFor(var->Declaration()->symbol());
+    }
+
+    for (auto* v : func->params()) {
+      if (!first) {
+        out << ", ";
+      }
+      first = false;
+
+      auto* type = program_->Sem().Get(v)->Type();
+
+      std::string param_name =
+          "const " + program_->Symbols().NameFor(v->symbol());
+      if (!EmitType(out, type, param_name)) {
+        return false;
+      }
+      // Parameter name is output as part of the type for arrays and pointers.
+      if (!type->Is<sem::Array>() && !type->Is<sem::Pointer>()) {
+        out << " " << program_->Symbols().NameFor(v->symbol());
+      }
+    }
+
+    out << ") {";
   }
 
-  for (const auto& data : func_sem->ReferencedStorageBufferVariables()) {
-    auto* var = data.first;
-    if (!first) {
-      out_ << ", ";
-    }
-    first = false;
-
-    if (var->Access() == ast::Access::kRead) {
-      out_ << "const ";
-    }
-
-    out_ << "device ";
-    if (!EmitType(var->Type()->UnwrapRef(), "")) {
-      return false;
-    }
-    out_ << "& " << program_->Symbols().NameFor(var->Declaration()->symbol());
-  }
-
-  for (auto* v : func->params()) {
-    if (!first) {
-      out_ << ", ";
-    }
-    first = false;
-
-    auto* type = program_->Sem().Get(v)->Type();
-
-    std::string param_name =
-        "const " + program_->Symbols().NameFor(v->symbol());
-    if (!EmitType(type, param_name)) {
-      return false;
-    }
-    // Parameter name is output as part of the type for arrays and pointers.
-    if (!type->Is<sem::Array>() && !type->Is<sem::Pointer>()) {
-      out_ << " " << program_->Symbols().NameFor(v->symbol());
-    }
-  }
-
-  out_ << ") ";
-
-  if (!EmitBlockAndNewline(func->body())) {
+  if (!EmitStatementsWithIndent(func->body()->statements())) {
     return false;
   }
 
-  out_ << std::endl;
+  line() << "}";
 
   return true;
 }
@@ -1148,249 +1144,258 @@
 bool GeneratorImpl::EmitEntryPointFunction(ast::Function* func) {
   auto* func_sem = program_->Sem().Get(func);
 
-  make_indent();
+  {
+    auto out = line();
 
-  EmitStage(func->pipeline_stage());
-  out_ << " " << func->return_type()->FriendlyName(program_->Symbols());
-  out_ << " " << program_->Symbols().NameFor(func->symbol()) << "(";
+    EmitStage(out, func->pipeline_stage());
+    out << " " << func->return_type()->FriendlyName(program_->Symbols());
+    out << " " << program_->Symbols().NameFor(func->symbol()) << "(";
 
-  // Emit entry point parameters.
-  bool first = true;
-  for (auto* var : func->params()) {
-    if (!first) {
-      out_ << ", ";
-    }
-    first = false;
+    // Emit entry point parameters.
+    bool first = true;
+    for (auto* var : func->params()) {
+      if (!first) {
+        out << ", ";
+      }
+      first = false;
 
-    auto* type = program_->Sem().Get(var)->Type()->UnwrapRef();
+      auto* type = program_->Sem().Get(var)->Type()->UnwrapRef();
 
-    if (!EmitType(type, "")) {
-      return false;
-    }
-
-    out_ << " " << program_->Symbols().NameFor(var->symbol());
-
-    if (type->Is<sem::Struct>()) {
-      out_ << " [[stage_in]]";
-    } else if (var->type()->is_handle()) {
-      auto* binding =
-          ast::GetDecoration<ast::BindingDecoration>(var->decorations());
-      if (binding == nullptr) {
-        TINT_ICE(Writer, diagnostics_)
-            << "missing binding attribute for entry point parameter";
+      if (!EmitType(out, type, "")) {
         return false;
       }
-      if (var->type()->Is<ast::Sampler>()) {
-        out_ << " [[sampler(" << binding->value() << ")]]";
-      } else if (var->type()->Is<ast::Texture>()) {
-        out_ << " [[texture(" << binding->value() << ")]]";
-      } else {
-        TINT_ICE(Writer, diagnostics_)
-            << "invalid handle type entry point parameter";
-        return false;
-      }
-    } else {
-      auto& decos = var->decorations();
-      bool builtin_found = false;
-      for (auto* deco : decos) {
-        auto* builtin = deco->As<ast::BuiltinDecoration>();
-        if (!builtin) {
-          continue;
-        }
 
-        builtin_found = true;
+      out << " " << program_->Symbols().NameFor(var->symbol());
 
-        auto attr = builtin_to_attribute(builtin->value());
-        if (attr.empty()) {
-          diagnostics_.add_error(diag::System::Writer, "unknown builtin");
+      if (type->Is<sem::Struct>()) {
+        out << " [[stage_in]]";
+      } else if (var->type()->is_handle()) {
+        auto* binding =
+            ast::GetDecoration<ast::BindingDecoration>(var->decorations());
+        if (binding == nullptr) {
+          TINT_ICE(Writer, diagnostics_)
+              << "missing binding attribute for entry point parameter";
           return false;
         }
-        out_ << " [[" << attr << "]]";
+        if (var->type()->Is<ast::Sampler>()) {
+          out << " [[sampler(" << binding->value() << ")]]";
+        } else if (var->type()->Is<ast::Texture>()) {
+          out << " [[texture(" << binding->value() << ")]]";
+        } else {
+          TINT_ICE(Writer, diagnostics_)
+              << "invalid handle type entry point parameter";
+          return false;
+        }
+      } else {
+        auto& decos = var->decorations();
+        bool builtin_found = false;
+        for (auto* deco : decos) {
+          auto* builtin = deco->As<ast::BuiltinDecoration>();
+          if (!builtin) {
+            continue;
+          }
+
+          builtin_found = true;
+
+          auto attr = builtin_to_attribute(builtin->value());
+          if (attr.empty()) {
+            diagnostics_.add_error(diag::System::Writer, "unknown builtin");
+            return false;
+          }
+          out << " [[" << attr << "]]";
+        }
+        if (!builtin_found) {
+          TINT_ICE(Writer, diagnostics_) << "Unsupported entry point parameter";
+        }
       }
-      if (!builtin_found) {
-        TINT_ICE(Writer, diagnostics_) << "Unsupported entry point parameter";
+    }
+
+    for (auto data : func_sem->ReferencedUniformVariables()) {
+      if (!first) {
+        out << ", ";
+      }
+      first = false;
+
+      auto* var = data.first;
+      // TODO(dsinclair): We're using the binding to make up the buffer number
+      // but we should instead be using a provided mapping that uses both buffer
+      // and set. https://bugs.chromium.org/p/tint/issues/detail?id=104
+      auto* binding = data.second.binding;
+      if (binding == nullptr) {
+        diagnostics_.add_error(
+            diag::System::Writer,
+            "unable to find binding information for uniform: " +
+                program_->Symbols().NameFor(var->Declaration()->symbol()));
+        return false;
+      }
+      // auto* set = data.second.set;
+
+      out << "constant ";
+      // TODO(dsinclair): Can you have a uniform array? If so, this needs to be
+      // updated to handle arrays property.
+      if (!EmitType(out, var->Type()->UnwrapRef(), "")) {
+        return false;
+      }
+      out << "& " << program_->Symbols().NameFor(var->Declaration()->symbol())
+          << " [[buffer(" << binding->value() << ")]]";
+    }
+
+    for (auto data : func_sem->ReferencedStorageBufferVariables()) {
+      if (!first) {
+        out << ", ";
+      }
+      first = false;
+
+      auto* var = data.first;
+      // TODO(dsinclair): We're using the binding to make up the buffer number
+      // but we should instead be using a provided mapping that uses both buffer
+      // and set. https://bugs.chromium.org/p/tint/issues/detail?id=104
+      auto* binding = data.second.binding;
+      // auto* set = data.second.set;
+
+      if (var->Access() == ast::Access::kRead) {
+        out << "const ";
+      }
+
+      out << "device ";
+      if (!EmitType(out, var->Type()->UnwrapRef(), "")) {
+        return false;
+      }
+      out << "& " << program_->Symbols().NameFor(var->Declaration()->symbol())
+          << " [[buffer(" << binding->value() << ")]]";
+    }
+
+    out << ") {";
+  }
+
+  {
+    ScopedIndent si(this);
+
+    if (!EmitStatements(func->body()->statements())) {
+      return false;
+    }
+
+    if (!Is<ast::ReturnStatement>(func->get_last_statement())) {
+      ast::ReturnStatement ret(ProgramID{}, Source{});
+      if (!EmitStatement(&ret)) {
+        return false;
       }
     }
   }
 
-  for (auto data : func_sem->ReferencedUniformVariables()) {
-    if (!first) {
-      out_ << ", ";
-    }
-    first = false;
-
-    auto* var = data.first;
-    // TODO(dsinclair): We're using the binding to make up the buffer number but
-    // we should instead be using a provided mapping that uses both buffer and
-    // set. https://bugs.chromium.org/p/tint/issues/detail?id=104
-    auto* binding = data.second.binding;
-    if (binding == nullptr) {
-      diagnostics_.add_error(
-          diag::System::Writer,
-          "unable to find binding information for uniform: " +
-              program_->Symbols().NameFor(var->Declaration()->symbol()));
-      return false;
-    }
-    // auto* set = data.second.set;
-
-    out_ << "constant ";
-    // TODO(dsinclair): Can you have a uniform array? If so, this needs to be
-    // updated to handle arrays property.
-    if (!EmitType(var->Type()->UnwrapRef(), "")) {
-      return false;
-    }
-    out_ << "& " << program_->Symbols().NameFor(var->Declaration()->symbol())
-         << " [[buffer(" << binding->value() << ")]]";
-  }
-
-  for (auto data : func_sem->ReferencedStorageBufferVariables()) {
-    if (!first) {
-      out_ << ", ";
-    }
-    first = false;
-
-    auto* var = data.first;
-    // TODO(dsinclair): We're using the binding to make up the buffer number but
-    // we should instead be using a provided mapping that uses both buffer and
-    // set. https://bugs.chromium.org/p/tint/issues/detail?id=104
-    auto* binding = data.second.binding;
-    // auto* set = data.second.set;
-
-    if (var->Access() == ast::Access::kRead) {
-      out_ << "const ";
-    }
-
-    out_ << "device ";
-    if (!EmitType(var->Type()->UnwrapRef(), "")) {
-      return false;
-    }
-    out_ << "& " << program_->Symbols().NameFor(var->Declaration()->symbol())
-         << " [[buffer(" << binding->value() << ")]]";
-  }
-
-  out_ << ") {" << std::endl;
-
-  increment_indent();
-
-  for (auto* s : *func->body()) {
-    if (!EmitStatement(s)) {
-      return false;
-    }
-  }
-  auto* last_statement = func->get_last_statement();
-  if (last_statement == nullptr ||
-      !last_statement->Is<ast::ReturnStatement>()) {
-    ast::ReturnStatement ret(ProgramID{}, Source{});
-    if (!EmitStatement(&ret)) {
-      return false;
-    }
-  }
-
-  decrement_indent();
-  make_indent();
-  out_ << "}" << std::endl << std::endl;
+  line() << "}";
   return true;
 }
 
-bool GeneratorImpl::EmitIdentifier(ast::IdentifierExpression* expr) {
-  out_ << program_->Symbols().NameFor(expr->symbol());
+bool GeneratorImpl::EmitIdentifier(std::ostream& out,
+                                   ast::IdentifierExpression* expr) {
+  out << program_->Symbols().NameFor(expr->symbol());
   return true;
 }
 
 bool GeneratorImpl::EmitLoop(ast::LoopStatement* stmt) {
-  make_indent();
-
   auto emit_continuing = [this, stmt]() {
     if (stmt->has_continuing()) {
-      make_indent();
       if (!EmitBlock(stmt->continuing())) {
         return false;
       }
-      out_ << std::endl;
     }
     return true;
   };
 
   TINT_SCOPED_ASSIGNMENT(emit_continuing_, emit_continuing);
-  bool ok = EmitBlockBraces("while (true)", [&] {
-    for (auto* s : stmt->body()->statements()) {
-      if (!EmitStatement(s)) {
-        return false;
-      }
+  line() << "while (true) {";
+  {
+    ScopedIndent si(this);
+    if (!EmitStatements(stmt->body()->statements())) {
+      return false;
     }
-    return emit_continuing();
-  });
-  out_ << std::endl;
-  return ok;
-}
+    if (!emit_continuing()) {
+      return false;
+    }
+  }
+  line() << "}";
 
-bool GeneratorImpl::EmitDiscard(ast::DiscardStatement*) {
-  make_indent();
-  // TODO(dsinclair): Verify this is correct when the discard semantics are
-  // defined for WGSL (https://github.com/gpuweb/gpuweb/issues/361)
-  out_ << "discard_fragment();" << std::endl;
   return true;
 }
 
-bool GeneratorImpl::EmitElse(ast::ElseStatement* stmt) {
-  if (stmt->HasCondition()) {
-    out_ << " else if (";
-    if (!EmitExpression(stmt->condition())) {
-      return false;
-    }
-    out_ << ") ";
-  } else {
-    out_ << " else ";
-  }
-
-  return EmitBlock(stmt->body());
+bool GeneratorImpl::EmitDiscard(ast::DiscardStatement*) {
+  // TODO(dsinclair): Verify this is correct when the discard semantics are
+  // defined for WGSL (https://github.com/gpuweb/gpuweb/issues/361)
+  line() << "discard_fragment();";
+  return true;
 }
 
 bool GeneratorImpl::EmitIf(ast::IfStatement* stmt) {
-  make_indent();
-
-  out_ << "if (";
-  if (!EmitExpression(stmt->condition())) {
-    return false;
+  {
+    auto out = line();
+    out << "if (";
+    if (!EmitExpression(out, stmt->condition())) {
+      return false;
+    }
+    out << ") {";
   }
-  out_ << ") ";
 
-  if (!EmitBlock(stmt->body())) {
+  if (!EmitStatementsWithIndent(stmt->body()->statements())) {
     return false;
   }
 
   for (auto* e : stmt->else_statements()) {
-    if (!EmitElse(e)) {
+    if (e->HasCondition()) {
+      line() << "} else {";
+      increment_indent();
+
+      {
+        auto out = line();
+        out << "if (";
+        if (!EmitExpression(out, e->condition())) {
+          return false;
+        }
+        out << ") {";
+      }
+    } else {
+      line() << "} else {";
+    }
+
+    if (!EmitStatementsWithIndent(e->body()->statements())) {
       return false;
     }
   }
-  out_ << std::endl;
 
+  line() << "}";
+
+  for (auto* e : stmt->else_statements()) {
+    if (e->HasCondition()) {
+      decrement_indent();
+      line() << "}";
+    }
+  }
   return true;
 }
 
-bool GeneratorImpl::EmitMemberAccessor(ast::MemberAccessorExpression* expr) {
+bool GeneratorImpl::EmitMemberAccessor(std::ostream& out,
+                                       ast::MemberAccessorExpression* expr) {
   bool paren_lhs =
       !expr->structure()
            ->IsAnyOf<ast::ArrayAccessorExpression, ast::CallExpression,
                      ast::IdentifierExpression, ast::MemberAccessorExpression,
                      ast::TypeConstructorExpression>();
   if (paren_lhs) {
-    out_ << "(";
+    out << "(";
   }
-  if (!EmitExpression(expr->structure())) {
+  if (!EmitExpression(out, expr->structure())) {
     return false;
   }
   if (paren_lhs) {
-    out_ << ")";
+    out << ")";
   }
 
-  out_ << ".";
+  out << ".";
 
   // Swizzles get written out directly
   if (program_->Sem().Get(expr)->Is<sem::Swizzle>()) {
-    out_ << program_->Symbols().NameFor(expr->member()->symbol());
-  } else if (!EmitExpression(expr->member())) {
+    out << program_->Symbols().NameFor(expr->member()->symbol());
+  } else if (!EmitExpression(out, expr->member())) {
     return false;
   }
 
@@ -1398,69 +1403,46 @@
 }
 
 bool GeneratorImpl::EmitReturn(ast::ReturnStatement* stmt) {
-  make_indent();
-
-  out_ << "return";
+  auto out = line();
+  out << "return";
   if (stmt->has_value()) {
-    out_ << " ";
-    if (!EmitExpression(stmt->value())) {
+    out << " ";
+    if (!EmitExpression(out, stmt->value())) {
       return false;
     }
   }
-  out_ << ";" << std::endl;
+  out << ";";
   return true;
 }
 
 bool GeneratorImpl::EmitBlock(const ast::BlockStatement* stmt) {
-  out_ << "{" << std::endl;
-  increment_indent();
+  line() << "{";
 
-  for (auto* s : *stmt) {
-    if (!EmitStatement(s)) {
-      return false;
-    }
+  if (!EmitStatementsWithIndent(stmt->statements())) {
+    return false;
   }
 
-  decrement_indent();
-  make_indent();
-  out_ << "}";
+  line() << "}";
 
   return true;
 }
 
-bool GeneratorImpl::EmitBlockAndNewline(const ast::BlockStatement* stmt) {
-  const bool result = EmitBlock(stmt);
-  if (result) {
-    out_ << std::endl;
-  }
-  return result;
-}
-
-bool GeneratorImpl::EmitIndentedBlockAndNewline(ast::BlockStatement* stmt) {
-  make_indent();
-  const bool result = EmitBlock(stmt);
-  if (result) {
-    out_ << std::endl;
-  }
-  return result;
-}
-
 bool GeneratorImpl::EmitStatement(ast::Statement* stmt) {
   if (auto* a = stmt->As<ast::AssignmentStatement>()) {
     return EmitAssign(a);
   }
   if (auto* b = stmt->As<ast::BlockStatement>()) {
-    return EmitIndentedBlockAndNewline(b);
+    return EmitBlock(b);
   }
   if (auto* b = stmt->As<ast::BreakStatement>()) {
     return EmitBreak(b);
   }
   if (auto* c = stmt->As<ast::CallStatement>()) {
-    make_indent();
-    if (!EmitCall(c->expr())) {
+    auto out = line();
+    if (!EmitCall(out, c->expr())) {
       return false;
     }
-    out_ << ";" << std::endl;
+    out << ";";
     return true;
   }
   if (auto* c = stmt->As<ast::ContinueStatement>()) {
@@ -1470,8 +1452,7 @@
     return EmitDiscard(d);
   }
   if (stmt->As<ast::FallthroughStatement>()) {
-    make_indent();
-    out_ << "/* fallthrough */" << std::endl;
+    line() << "/* fallthrough */";
     return true;
   }
   if (auto* i = stmt->As<ast::IfStatement>()) {
@@ -1496,31 +1477,47 @@
   return false;
 }
 
-bool GeneratorImpl::EmitSwitch(ast::SwitchStatement* stmt) {
-  make_indent();
-
-  out_ << "switch(";
-  if (!EmitExpression(stmt->condition())) {
-    return false;
-  }
-  out_ << ") {" << std::endl;
-
-  increment_indent();
-
-  for (auto* s : stmt->body()) {
-    if (!EmitCase(s)) {
+bool GeneratorImpl::EmitStatements(const ast::StatementList& stmts) {
+  for (auto* s : stmts) {
+    if (!EmitStatement(s)) {
       return false;
     }
   }
+  return true;
+}
 
-  decrement_indent();
-  make_indent();
-  out_ << "}" << std::endl;
+bool GeneratorImpl::EmitStatementsWithIndent(const ast::StatementList& stmts) {
+  ScopedIndent si(this);
+  return EmitStatements(stmts);
+}
+
+bool GeneratorImpl::EmitSwitch(ast::SwitchStatement* stmt) {
+  {
+    auto out = line();
+    out << "switch(";
+    if (!EmitExpression(out, stmt->condition())) {
+      return false;
+    }
+    out << ") {";
+  }
+
+  {
+    ScopedIndent si(this);
+    for (auto* s : stmt->body()) {
+      if (!EmitCase(s)) {
+        return false;
+      }
+    }
+  }
+
+  line() << "}";
 
   return true;
 }
 
-bool GeneratorImpl::EmitType(const sem::Type* type, const std::string& name) {
+bool GeneratorImpl::EmitType(std::ostream& out,
+                             const sem::Type* type,
+                             const std::string& name) {
   if (auto* ary = type->As<sem::Array>()) {
     const sem::Type* base_type = ary;
     std::vector<uint32_t> sizes;
@@ -1532,87 +1529,87 @@
       }
       base_type = arr->ElemType();
     }
-    if (!EmitType(base_type, "")) {
+    if (!EmitType(out, base_type, "")) {
       return false;
     }
     if (!name.empty()) {
-      out_ << " " << name;
+      out << " " << name;
     }
     for (uint32_t size : sizes) {
-      out_ << "[" << size << "]";
+      out << "[" << size << "]";
     }
   } else if (type->Is<sem::Bool>()) {
-    out_ << "bool";
+    out << "bool";
   } else if (type->Is<sem::F32>()) {
-    out_ << "float";
+    out << "float";
   } else if (type->Is<sem::I32>()) {
-    out_ << "int";
+    out << "int";
   } else if (auto* mat = type->As<sem::Matrix>()) {
-    if (!EmitType(mat->type(), "")) {
+    if (!EmitType(out, mat->type(), "")) {
       return false;
     }
-    out_ << mat->columns() << "x" << mat->rows();
+    out << mat->columns() << "x" << mat->rows();
   } else if (auto* ptr = type->As<sem::Pointer>()) {
     switch (ptr->StorageClass()) {
       case ast::StorageClass::kFunction:
       case ast::StorageClass::kPrivate:
       case ast::StorageClass::kUniformConstant:
-        out_ << "thread ";
+        out << "thread ";
         break;
       case ast::StorageClass::kWorkgroup:
-        out_ << "threadgroup ";
+        out << "threadgroup ";
         break;
       case ast::StorageClass::kStorage:
-        out_ << "device ";
+        out << "device ";
         break;
       case ast::StorageClass::kUniform:
-        out_ << "constant ";
+        out << "constant ";
         break;
       default:
         TINT_ICE(Writer, diagnostics_) << "unhandled storage class for pointer";
     }
     if (ptr->StoreType()->Is<sem::Array>()) {
       std::string inner = "(*" + name + ")";
-      if (!EmitType(ptr->StoreType(), inner)) {
+      if (!EmitType(out, ptr->StoreType(), inner)) {
         return false;
       }
     } else {
-      if (!EmitType(ptr->StoreType(), "")) {
+      if (!EmitType(out, ptr->StoreType(), "")) {
         return false;
       }
-      out_ << "* " << name;
+      out << "* " << name;
     }
   } else if (type->Is<sem::Sampler>()) {
-    out_ << "sampler";
+    out << "sampler";
   } else if (auto* str = type->As<sem::Struct>()) {
     // The struct type emits as just the name. The declaration would be emitted
     // as part of emitting the declared types.
-    out_ << program_->Symbols().NameFor(str->Declaration()->name());
+    out << program_->Symbols().NameFor(str->Declaration()->name());
   } else if (auto* tex = type->As<sem::Texture>()) {
     if (tex->Is<sem::DepthTexture>()) {
-      out_ << "depth";
+      out << "depth";
     } else {
-      out_ << "texture";
+      out << "texture";
     }
 
     switch (tex->dim()) {
       case ast::TextureDimension::k1d:
-        out_ << "1d";
+        out << "1d";
         break;
       case ast::TextureDimension::k2d:
-        out_ << "2d";
+        out << "2d";
         break;
       case ast::TextureDimension::k2dArray:
-        out_ << "2d_array";
+        out << "2d_array";
         break;
       case ast::TextureDimension::k3d:
-        out_ << "3d";
+        out << "3d";
         break;
       case ast::TextureDimension::kCube:
-        out_ << "cube";
+        out << "cube";
         break;
       case ast::TextureDimension::kCubeArray:
-        out_ << "cube_array";
+        out << "cube_array";
         break;
       default:
         diagnostics_.add_error(diag::System::Writer,
@@ -1620,51 +1617,51 @@
         return false;
     }
     if (tex->Is<sem::MultisampledTexture>()) {
-      out_ << "_ms";
+      out << "_ms";
     }
-    out_ << "<";
+    out << "<";
     if (tex->Is<sem::DepthTexture>()) {
-      out_ << "float, access::sample";
+      out << "float, access::sample";
     } else if (auto* storage = tex->As<sem::StorageTexture>()) {
-      if (!EmitType(storage->type(), "")) {
+      if (!EmitType(out, storage->type(), "")) {
         return false;
       }
 
       std::string access_str;
       if (storage->access() == ast::Access::kRead) {
-        out_ << ", access::read";
+        out << ", access::read";
       } else if (storage->access() == ast::Access::kWrite) {
-        out_ << ", access::write";
+        out << ", access::write";
       } else {
         diagnostics_.add_error(diag::System::Writer,
                                "Invalid access control for storage texture");
         return false;
       }
     } else if (auto* ms = tex->As<sem::MultisampledTexture>()) {
-      if (!EmitType(ms->type(), "")) {
+      if (!EmitType(out, ms->type(), "")) {
         return false;
       }
-      out_ << ", access::read";
+      out << ", access::read";
     } else if (auto* sampled = tex->As<sem::SampledTexture>()) {
-      if (!EmitType(sampled->type(), "")) {
+      if (!EmitType(out, sampled->type(), "")) {
         return false;
       }
-      out_ << ", access::sample";
+      out << ", access::sample";
     } else {
       diagnostics_.add_error(diag::System::Writer, "invalid texture type");
       return false;
     }
-    out_ << ">";
+    out << ">";
 
   } else if (type->Is<sem::U32>()) {
-    out_ << "uint";
+    out << "uint";
   } else if (auto* vec = type->As<sem::Vector>()) {
-    if (!EmitType(vec->type(), "")) {
+    if (!EmitType(out, vec->type(), "")) {
       return false;
     }
-    out_ << vec->size();
+    out << vec->size();
   } else if (type->Is<sem::Void>()) {
-    out_ << "void";
+    out << "void";
   } else {
     diagnostics_.add_error(diag::System::Writer,
                            "unknown type in EmitType: " + type->type_name());
@@ -1674,49 +1671,51 @@
   return true;
 }
 
-bool GeneratorImpl::EmitPackedType(const sem::Type* type,
+bool GeneratorImpl::EmitPackedType(std::ostream& out,
+                                   const sem::Type* type,
                                    const std::string& name) {
   if (auto* vec = type->As<sem::Vector>()) {
-    out_ << "packed_";
-    if (!EmitType(vec->type(), "")) {
+    out << "packed_";
+    if (!EmitType(out, vec->type(), "")) {
       return false;
     }
-    out_ << vec->size();
+    out << vec->size();
     return true;
   }
 
-  return EmitType(type, name);
+  return EmitType(out, type, name);
 }
 
 bool GeneratorImpl::EmitStructType(const sem::Struct* str) {
-  out_ << "struct " << program_->Symbols().NameFor(str->Declaration()->name())
-       << " {" << std::endl;
+  line() << "struct " << program_->Symbols().NameFor(str->Declaration()->name())
+         << " {";
 
   bool is_host_shareable = str->IsHostShareable();
 
   // Emits a `/* 0xnnnn */` byte offset comment for a struct member.
-  auto add_byte_offset_comment = [&](uint32_t offset) {
-    std::ios_base::fmtflags saved_flag_state(out_.flags());
-    out_ << "/* 0x" << std::hex << std::setfill('0') << std::setw(4) << offset
-         << " */ ";
-    out_.flags(saved_flag_state);
+  auto add_byte_offset_comment = [&](std::ostream& out, uint32_t offset) {
+    std::ios_base::fmtflags saved_flag_state(out.flags());
+    out << "/* 0x" << std::hex << std::setfill('0') << std::setw(4) << offset
+        << " */ ";
+    out.flags(saved_flag_state);
   };
 
   uint32_t pad_count = 0;
-  auto add_padding = [&](uint32_t size) {
+  auto add_padding = [&](uint32_t size, uint32_t msl_offset) {
     std::string name;
     do {
       name = "tint_pad_" + std::to_string(pad_count++);
     } while (str->FindMember(program_->Symbols().Get(name)));
 
-    out_ << "int8_t " << name << "[" << size << "];" << std::endl;
+    auto out = line();
+    add_byte_offset_comment(out, msl_offset);
+    out << "int8_t " << name << "[" << size << "];";
   };
 
   increment_indent();
   uint32_t msl_offset = 0;
   for (auto* mem : str->Members()) {
-    make_indent();
-
+    auto out = line();
     auto name = program_->Symbols().NameFor(mem->Declaration()->symbol());
     auto wgsl_offset = mem->Offset();
 
@@ -1731,19 +1730,17 @@
 
       // Generate padding if required
       if (auto padding = wgsl_offset - msl_offset) {
-        add_byte_offset_comment(msl_offset);
-        add_padding(padding);
+        add_padding(padding, msl_offset);
         msl_offset += padding;
-        make_indent();
       }
 
-      add_byte_offset_comment(msl_offset);
+      add_byte_offset_comment(out, msl_offset);
 
-      if (!EmitPackedType(mem->Type(), name)) {
+      if (!EmitPackedType(out, mem->Type(), name)) {
         return false;
       }
     } else {
-      if (!EmitType(mem->Type(), name)) {
+      if (!EmitType(out, mem->Type(), name)) {
         return false;
       }
     }
@@ -1752,7 +1749,7 @@
 
     // Array member name will be output with the type
     if (!ty->Is<sem::Array>()) {
-      out_ << " " << name;
+      out << " " << name;
     }
 
     // Emit decorations
@@ -1763,7 +1760,7 @@
           diagnostics_.add_error(diag::System::Writer, "unknown builtin");
           return false;
         }
-        out_ << " [[" << attr << "]]";
+        out << " [[" << attr << "]]";
       } else if (auto* loc = deco->As<ast::LocationDecoration>()) {
         auto& pipeline_stage_uses = str->PipelineStageUses();
         if (pipeline_stage_uses.size() != 1) {
@@ -1772,16 +1769,16 @@
         }
 
         if (pipeline_stage_uses.count(sem::PipelineStageUsage::kVertexInput)) {
-          out_ << " [[attribute(" + std::to_string(loc->value()) + ")]]";
+          out << " [[attribute(" + std::to_string(loc->value()) + ")]]";
         } else if (pipeline_stage_uses.count(
                        sem::PipelineStageUsage::kVertexOutput)) {
-          out_ << " [[user(locn" + std::to_string(loc->value()) + ")]]";
+          out << " [[user(locn" + std::to_string(loc->value()) + ")]]";
         } else if (pipeline_stage_uses.count(
                        sem::PipelineStageUsage::kFragmentInput)) {
-          out_ << " [[user(locn" + std::to_string(loc->value()) + ")]]";
+          out << " [[user(locn" + std::to_string(loc->value()) + ")]]";
         } else if (pipeline_stage_uses.count(
                        sem::PipelineStageUsage::kFragmentOutput)) {
-          out_ << " [[color(" + std::to_string(loc->value()) + ")]]";
+          out << " [[color(" + std::to_string(loc->value()) + ")]]";
         } else {
           TINT_ICE(Writer, diagnostics_)
               << "invalid use of location decoration";
@@ -1789,7 +1786,7 @@
       }
     }
 
-    out_ << ";" << std::endl;
+    out << ";";
 
     if (is_host_shareable) {
       // Calculate new MSL offset
@@ -1805,50 +1802,46 @@
   }
 
   if (is_host_shareable && str->Size() != msl_offset) {
-    make_indent();
-    add_byte_offset_comment(msl_offset);
-    add_padding(str->Size() - msl_offset);
+    add_padding(str->Size() - msl_offset, msl_offset);
   }
 
   decrement_indent();
-  make_indent();
 
-  out_ << "};" << std::endl;
+  line() << "};";
   return true;
 }
 
-bool GeneratorImpl::EmitUnaryOp(ast::UnaryOpExpression* expr) {
+bool GeneratorImpl::EmitUnaryOp(std::ostream& out,
+                                ast::UnaryOpExpression* expr) {
   switch (expr->op()) {
     case ast::UnaryOp::kAddressOf:
-      out_ << "&";
+      out << "&";
       break;
     case ast::UnaryOp::kComplement:
-      out_ << "~";
+      out << "~";
       break;
     case ast::UnaryOp::kIndirection:
-      out_ << "*";
+      out << "*";
       break;
     case ast::UnaryOp::kNot:
-      out_ << "!";
+      out << "!";
       break;
     case ast::UnaryOp::kNegation:
-      out_ << "-";
+      out << "-";
       break;
   }
-  out_ << "(";
+  out << "(";
 
-  if (!EmitExpression(expr->expr())) {
+  if (!EmitExpression(out, expr->expr())) {
     return false;
   }
 
-  out_ << ")";
+  out << ")";
 
   return true;
 }
 
 bool GeneratorImpl::EmitVariable(const sem::Variable* var) {
-  make_indent();
-
   auto* decl = var->Declaration();
 
   for (auto* deco : decl->decorations()) {
@@ -1858,16 +1851,18 @@
     }
   }
 
+  auto out = line();
+
   switch (var->StorageClass()) {
     case ast::StorageClass::kFunction:
     case ast::StorageClass::kUniformConstant:
     case ast::StorageClass::kNone:
       break;
     case ast::StorageClass::kPrivate:
-      out_ << "thread ";
+      out << "thread ";
       break;
     case ast::StorageClass::kWorkgroup:
-      out_ << "threadgroup ";
+      out << "threadgroup ";
       break;
     default:
       TINT_ICE(Writer, diagnostics_) << "unhandled variable storage class";
@@ -1880,35 +1875,33 @@
   if (decl->is_const()) {
     name = "const " + name;
   }
-  if (!EmitType(type, name)) {
+  if (!EmitType(out, type, name)) {
     return false;
   }
   // Variable name is output as part of the type for arrays and pointers.
   if (!type->Is<sem::Array>() && !type->Is<sem::Pointer>()) {
-    out_ << " " << name;
+    out << " " << name;
   }
 
   if (decl->constructor() != nullptr) {
-    out_ << " = ";
-    if (!EmitExpression(decl->constructor())) {
+    out << " = ";
+    if (!EmitExpression(out, decl->constructor())) {
       return false;
     }
   } else if (var->StorageClass() == ast::StorageClass::kPrivate ||
              var->StorageClass() == ast::StorageClass::kFunction ||
              var->StorageClass() == ast::StorageClass::kNone) {
-    out_ << " = ";
-    if (!EmitZeroValue(type)) {
+    out << " = ";
+    if (!EmitZeroValue(out, type)) {
       return false;
     }
   }
-  out_ << ";" << std::endl;
+  out << ";";
 
   return true;
 }
 
 bool GeneratorImpl::EmitProgramConstVariable(const ast::Variable* var) {
-  make_indent();
-
   for (auto* d : var->decorations()) {
     if (!d->Is<ast::OverrideDecoration>()) {
       diagnostics_.add_error(diag::System::Writer,
@@ -1921,25 +1914,26 @@
     return false;
   }
 
-  out_ << "constant ";
+  auto out = line();
+  out << "constant ";
   auto* type = program_->Sem().Get(var)->Type()->UnwrapRef();
-  if (!EmitType(type, program_->Symbols().NameFor(var->symbol()))) {
+  if (!EmitType(out, type, program_->Symbols().NameFor(var->symbol()))) {
     return false;
   }
   if (!type->Is<sem::Array>()) {
-    out_ << " " << program_->Symbols().NameFor(var->symbol());
+    out << " " << program_->Symbols().NameFor(var->symbol());
   }
 
   auto* sem_var = program_->Sem().Get(var);
   if (sem_var->IsPipelineConstant()) {
-    out_ << " [[function_constant(" << sem_var->ConstantId() << ")]]";
+    out << " [[function_constant(" << sem_var->ConstantId() << ")]]";
   } else if (var->constructor() != nullptr) {
-    out_ << " = ";
-    if (!EmitExpression(var->constructor())) {
+    out << " = ";
+    if (!EmitExpression(out, var->constructor())) {
       return false;
     }
   }
-  out_ << ";" << std::endl;
+  out << ";";
 
   return true;
 }
@@ -2009,21 +2003,6 @@
   return {};
 }
 
-template <typename F>
-bool GeneratorImpl::EmitBlockBraces(const std::string& prefix, F&& cb) {
-  out_ << prefix << (prefix.empty() ? "{" : " {") << std::endl;
-  increment_indent();
-
-  if (!cb()) {
-    return false;
-  }
-
-  decrement_indent();
-  make_indent();
-  out_ << "}";
-  return true;
-}
-
 }  // namespace msl
 }  // namespace writer
 }  // namespace tint
diff --git a/src/writer/msl/generator_impl.h b/src/writer/msl/generator_impl.h
index 7ce7a65..77b6675 100644
--- a/src/writer/msl/generator_impl.h
+++ b/src/writer/msl/generator_impl.h
@@ -64,62 +64,63 @@
   /// @returns true if the declared type was emitted
   bool EmitTypeDecl(const sem::Type* ty);
   /// Handles an array accessor expression
+  /// @param out the output of the expression stream
   /// @param expr the expression to emit
   /// @returns true if the array accessor was emitted
-  bool EmitArrayAccessor(ast::ArrayAccessorExpression* expr);
+  bool EmitArrayAccessor(std::ostream& out, ast::ArrayAccessorExpression* expr);
   /// Handles an assignment statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted successfully
   bool EmitAssign(ast::AssignmentStatement* stmt);
   /// Handles generating a binary expression
+  /// @param out the output of the expression stream
   /// @param expr the binary expression
   /// @returns true if the expression was emitted, false otherwise
-  bool EmitBinary(ast::BinaryExpression* expr);
+  bool EmitBinary(std::ostream& out, ast::BinaryExpression* expr);
   /// Handles generating a bitcast expression
+  /// @param out the output of the expression stream
   /// @param expr the bitcast expression
   /// @returns true if the bitcast was emitted
-  bool EmitBitcast(ast::BitcastExpression* expr);
+  bool EmitBitcast(std::ostream& out, ast::BitcastExpression* expr);
   /// Handles a block statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted successfully
   bool EmitBlock(const ast::BlockStatement* stmt);
-  /// Handles a block statement with a newline at the end
-  /// @param stmt the statement to emit
-  /// @returns true if the statement was emitted successfully
-  bool EmitIndentedBlockAndNewline(ast::BlockStatement* stmt);
-  /// Handles a block statement with a newline at the end
-  /// @param stmt the statement to emit
-  /// @returns true if the statement was emitted successfully
-  bool EmitBlockAndNewline(const ast::BlockStatement* stmt);
   /// Handles a break statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted successfully
   bool EmitBreak(ast::BreakStatement* stmt);
   /// Handles generating a call expression
+  /// @param out the output of the expression stream
   /// @param expr the call expression
   /// @returns true if the call expression is emitted
-  bool EmitCall(ast::CallExpression* expr);
+  bool EmitCall(std::ostream& out, ast::CallExpression* expr);
   /// Handles generating an intrinsic call expression
+  /// @param out the output of the expression stream
   /// @param expr the call expression
   /// @param intrinsic the intrinsic being called
   /// @returns true if the call expression is emitted
-  bool EmitIntrinsicCall(ast::CallExpression* expr,
+  bool EmitIntrinsicCall(std::ostream& out,
+                         ast::CallExpression* expr,
                          const sem::Intrinsic* intrinsic);
   /// Handles generating a call to a texture function (`textureSample`,
   /// `textureSampleGrad`, etc)
+  /// @param out the output of the expression stream
   /// @param expr the call expression
   /// @param intrinsic the semantic information for the texture intrinsic
   /// @returns true if the call expression is emitted
-  bool EmitTextureCall(ast::CallExpression* expr,
+  bool EmitTextureCall(std::ostream& out,
+                       ast::CallExpression* expr,
                        const sem::Intrinsic* intrinsic);
   /// Handles a case statement
   /// @param stmt the statement
   /// @returns true if the statement was emitted successfully
   bool EmitCase(ast::CaseStatement* stmt);
   /// Handles generating constructor expressions
+  /// @param out the output of the expression stream
   /// @param expr the constructor expression
   /// @returns true if the expression was emitted
-  bool EmitConstructor(ast::ConstructorExpression* expr);
+  bool EmitConstructor(std::ostream& out, ast::ConstructorExpression* expr);
   /// Handles a continue statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted successfully
@@ -128,85 +129,106 @@
   /// @param stmt the discard statement
   /// @returns true if the statement was successfully emitted
   bool EmitDiscard(ast::DiscardStatement* stmt);
-  /// Handles generating an else statement
-  /// @param stmt the statement to emit
-  /// @returns true if the statement was emitted
-  bool EmitElse(ast::ElseStatement* stmt);
   /// Handles emitting the entry point function
   /// @param func the entry point function
   /// @returns true if the entry point function was emitted
   bool EmitEntryPointFunction(ast::Function* func);
   /// Handles generate an Expression
+  /// @param out the output of the expression stream
   /// @param expr the expression
   /// @returns true if the expression was emitted
-  bool EmitExpression(ast::Expression* expr);
+  bool EmitExpression(std::ostream& out, ast::Expression* expr);
   /// Handles generating a function
   /// @param func the function to generate
   /// @returns true if the function was emitted
   bool EmitFunction(ast::Function* func);
   /// Handles generating an identifier expression
+  /// @param out the output of the expression stream
   /// @param expr the identifier expression
   /// @returns true if the identifier was emitted
-  bool EmitIdentifier(ast::IdentifierExpression* expr);
+  bool EmitIdentifier(std::ostream& out, ast::IdentifierExpression* expr);
   /// Handles an if statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was successfully emitted
   bool EmitIf(ast::IfStatement* stmt);
   /// Handles a literal
+  /// @param out the output of the expression stream
   /// @param lit the literal to emit
   /// @returns true if the literal was successfully emitted
-  bool EmitLiteral(ast::Literal* lit);
+  bool EmitLiteral(std::ostream& out, ast::Literal* lit);
   /// Handles a loop statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted
   bool EmitLoop(ast::LoopStatement* stmt);
   /// Handles a member accessor expression
+  /// @param out the output of the expression stream
   /// @param expr the member accessor expression
   /// @returns true if the member accessor was emitted
-  bool EmitMemberAccessor(ast::MemberAccessorExpression* expr);
+  bool EmitMemberAccessor(std::ostream& out,
+                          ast::MemberAccessorExpression* expr);
   /// Handles return statements
   /// @param stmt the statement to emit
   /// @returns true if the statement was successfully emitted
   bool EmitReturn(ast::ReturnStatement* stmt);
   /// Handles generating a scalar constructor
+  /// @param out the output of the expression stream
   /// @param expr the scalar constructor expression
   /// @returns true if the scalar constructor is emitted
-  bool EmitScalarConstructor(ast::ScalarConstructorExpression* expr);
+  bool EmitScalarConstructor(std::ostream& out,
+                             ast::ScalarConstructorExpression* expr);
   /// Handles emitting a pipeline stage name
+  /// @param out the output of the expression stream
   /// @param stage the stage to emit
-  void EmitStage(ast::PipelineStage stage);
+  void EmitStage(std::ostream& out, ast::PipelineStage stage);
   /// Handles statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted
   bool EmitStatement(ast::Statement* stmt);
+  /// Emits a list of statements
+  /// @param stmts the statement list
+  /// @returns true if the statements were emitted successfully
+  bool EmitStatements(const ast::StatementList& stmts);
+  /// Emits a list of statements with an indentation
+  /// @param stmts the statement list
+  /// @returns true if the statements were emitted successfully
+  bool EmitStatementsWithIndent(const ast::StatementList& stmts);
   /// Handles generating a switch statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted
   bool EmitSwitch(ast::SwitchStatement* stmt);
   /// Handles generating a type
+  /// @param out the output of the type stream
   /// @param type the type to generate
   /// @param name the name of the variable, only used for array emission
   /// @returns true if the type is emitted
-  bool EmitType(const sem::Type* type, const std::string& name);
+  bool EmitType(std::ostream& out,
+                const sem::Type* type,
+                const std::string& name);
   /// Handles generating an MSL-packed storage type.
   /// If the type does not have a packed form, the standard non-packed form is
   /// emitted.
+  /// @param out the output of the type stream
   /// @param type the type to generate
   /// @param name the name of the variable, only used for array emission
   /// @returns true if the type is emitted
-  bool EmitPackedType(const sem::Type* type, const std::string& name);
+  bool EmitPackedType(std::ostream& out,
+                      const sem::Type* type,
+                      const std::string& name);
   /// Handles generating a struct declaration
   /// @param str the struct to generate
   /// @returns true if the struct is emitted
   bool EmitStructType(const sem::Struct* str);
   /// Handles emitting a type constructor
+  /// @param out the output of the expression stream
   /// @param expr the type constructor expression
   /// @returns true if the constructor is emitted
-  bool EmitTypeConstructor(ast::TypeConstructorExpression* expr);
+  bool EmitTypeConstructor(std::ostream& out,
+                           ast::TypeConstructorExpression* expr);
   /// Handles a unary op expression
+  /// @param out the output of the expression stream
   /// @param expr the expression to emit
   /// @returns true if the expression was emitted
-  bool EmitUnaryOp(ast::UnaryOpExpression* expr);
+  bool EmitUnaryOp(std::ostream& out, ast::UnaryOpExpression* expr);
   /// Handles generating a variable
   /// @param var the variable to generate
   /// @returns true if the variable was emitted
@@ -216,9 +238,10 @@
   /// @returns true if the variable was emitted
   bool EmitProgramConstVariable(const ast::Variable* var);
   /// Emits the zero value for the given type
+  /// @param out the output of the expression stream
   /// @param type the type to emit the value for
   /// @returns true if the zero value was successfully emitted.
-  bool EmitZeroValue(const sem::Type* type);
+  bool EmitZeroValue(std::ostream& out, const sem::Type* type);
 
   /// Handles generating a builtin name
   /// @param intrinsic the semantic info for the intrinsic
@@ -259,15 +282,6 @@
   /// type.
   SizeAndAlign MslPackedTypeSizeAndAlign(const sem::Type* ty);
 
-  /// Emits `prefix`, followed by an opening brace `{`, then calls `cb` to emit
-  /// the block body, then finally emits the closing brace `}`.
-  /// @param prefix the string to emit before the opening brace
-  /// @param cb a function or function-like object with the signature `bool()`
-  /// that emits the block body.
-  /// @returns the return value of `cb`.
-  template <typename F>
-  bool EmitBlockBraces(const std::string& prefix, F&& cb);
-
   const Program* program_ = nullptr;
   std::function<bool()> emit_continuing_;
 };
diff --git a/src/writer/msl/generator_impl_array_accessor_test.cc b/src/writer/msl/generator_impl_array_accessor_test.cc
index f5c2f13..dc2f0dc 100644
--- a/src/writer/msl/generator_impl_array_accessor_test.cc
+++ b/src/writer/msl/generator_impl_array_accessor_test.cc
@@ -28,8 +28,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), "ary[5]");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), "ary[5]");
 }
 
 TEST_F(MslGeneratorImplTest, ArrayAccessor_OfDref) {
@@ -41,8 +42,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), "(*(p))[5]");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), "(*(p))[5]");
 }
 
 }  // namespace
diff --git a/src/writer/msl/generator_impl_binary_test.cc b/src/writer/msl/generator_impl_binary_test.cc
index f1099cd..939a482 100644
--- a/src/writer/msl/generator_impl_binary_test.cc
+++ b/src/writer/msl/generator_impl_binary_test.cc
@@ -47,8 +47,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), params.result);
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
     MslGeneratorImplTest,
diff --git a/src/writer/msl/generator_impl_bitcast_test.cc b/src/writer/msl/generator_impl_bitcast_test.cc
index dc9c910..aee3497 100644
--- a/src/writer/msl/generator_impl_bitcast_test.cc
+++ b/src/writer/msl/generator_impl_bitcast_test.cc
@@ -27,8 +27,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(bitcast)) << gen.error();
-  EXPECT_EQ(gen.result(), "as_type<float>(1)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, bitcast)) << gen.error();
+  EXPECT_EQ(out.str(), "as_type<float>(1)");
 }
 
 }  // namespace
diff --git a/src/writer/msl/generator_impl_block_test.cc b/src/writer/msl/generator_impl_block_test.cc
index 17a6ffa..952302d 100644
--- a/src/writer/msl/generator_impl_block_test.cc
+++ b/src/writer/msl/generator_impl_block_test.cc
@@ -45,9 +45,10 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.EmitBlock(b)) << gen.error();
-  EXPECT_EQ(gen.result(), R"({
+  EXPECT_EQ(gen.result(), R"(  {
     discard_fragment();
-  })");
+  }
+)");
 }
 
 }  // namespace
diff --git a/src/writer/msl/generator_impl_call_test.cc b/src/writer/msl/generator_impl_call_test.cc
index d355726..3f2b2cb 100644
--- a/src/writer/msl/generator_impl_call_test.cc
+++ b/src/writer/msl/generator_impl_call_test.cc
@@ -31,8 +31,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(call)) << gen.error();
-  EXPECT_EQ(gen.result(), "my_func()");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
+  EXPECT_EQ(out.str(), "my_func()");
 }
 
 TEST_F(MslGeneratorImplTest, EmitExpression_Call_WithParams) {
@@ -50,8 +51,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(call)) << gen.error();
-  EXPECT_EQ(gen.result(), "my_func(param1, param2)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
+  EXPECT_EQ(out.str(), "my_func(param1, param2)");
 }
 
 TEST_F(MslGeneratorImplTest, EmitStatement_Call) {
diff --git a/src/writer/msl/generator_impl_cast_test.cc b/src/writer/msl/generator_impl_cast_test.cc
index 4b18761..6f66478 100644
--- a/src/writer/msl/generator_impl_cast_test.cc
+++ b/src/writer/msl/generator_impl_cast_test.cc
@@ -27,8 +27,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(cast)) << gen.error();
-  EXPECT_EQ(gen.result(), "float(1)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, cast)) << gen.error();
+  EXPECT_EQ(out.str(), "float(1)");
 }
 
 TEST_F(MslGeneratorImplTest, EmitExpression_Cast_Vector) {
@@ -37,8 +38,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(cast)) << gen.error();
-  EXPECT_EQ(gen.result(), "float3(int3(1, 2, 3))");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, cast)) << gen.error();
+  EXPECT_EQ(out.str(), "float3(int3(1, 2, 3))");
 }
 
 }  // namespace
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index 202a947..11bd7bc 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -36,9 +36,9 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
-  EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
+  EXPECT_EQ(gen.result(), R"(  #include <metal_stdlib>
 
-using namespace metal;
+  using namespace metal;
   void my_func() {
     return;
   }
@@ -62,9 +62,9 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
-  EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
+  EXPECT_EQ(gen.result(), R"(  #include <metal_stdlib>
 
-using namespace metal;
+  using namespace metal;
   void my_func(float a, int b) {
     return;
   }
@@ -564,9 +564,9 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
-  EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
+  EXPECT_EQ(gen.result(), R"(  #include <metal_stdlib>
 
-using namespace metal;
+  using namespace metal;
   struct tint_array_wrapper {
     float arr[5];
   };
@@ -589,9 +589,9 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
-  EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
+  EXPECT_EQ(gen.result(), R"(  #include <metal_stdlib>
 
-using namespace metal;
+  using namespace metal;
   struct tint_array_wrapper {
     float arr[5];
   };
diff --git a/src/writer/msl/generator_impl_identifier_test.cc b/src/writer/msl/generator_impl_identifier_test.cc
index 13b739e..0275404 100644
--- a/src/writer/msl/generator_impl_identifier_test.cc
+++ b/src/writer/msl/generator_impl_identifier_test.cc
@@ -29,8 +29,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(i)) << gen.error();
-  EXPECT_EQ(gen.result(), "foo");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, i)) << gen.error();
+  EXPECT_EQ(out.str(), "foo");
 }
 
 }  // namespace
diff --git a/src/writer/msl/generator_impl_if_test.cc b/src/writer/msl/generator_impl_if_test.cc
index 9840b23..4bbf950 100644
--- a/src/writer/msl/generator_impl_if_test.cc
+++ b/src/writer/msl/generator_impl_if_test.cc
@@ -50,8 +50,10 @@
   ASSERT_TRUE(gen.EmitStatement(i)) << gen.error();
   EXPECT_EQ(gen.result(), R"(  if (cond) {
     return;
-  } else if (else_cond) {
-    return;
+  } else {
+    if (else_cond) {
+      return;
+    }
   }
 )");
 }
@@ -88,10 +90,12 @@
   ASSERT_TRUE(gen.EmitStatement(i)) << gen.error();
   EXPECT_EQ(gen.result(), R"(  if (cond) {
     return;
-  } else if (else_cond) {
-    return;
   } else {
-    return;
+    if (else_cond) {
+      return;
+    } else {
+      return;
+    }
   }
 )");
 }
diff --git a/src/writer/msl/generator_impl_import_test.cc b/src/writer/msl/generator_impl_import_test.cc
index 6b756dc..ec3ff4d 100644
--- a/src/writer/msl/generator_impl_import_test.cc
+++ b/src/writer/msl/generator_impl_import_test.cc
@@ -81,8 +81,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitCall(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), R"(abs(1))");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitCall(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), R"(abs(1))");
 }
 
 using MslImportData_DualParamTest = TestParamHelper<MslImportData>;
@@ -94,8 +95,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitCall(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), std::string(param.msl_name) + "(1.0f, 2.0f)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitCall(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), std::string(param.msl_name) + "(1.0f, 2.0f)");
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
                          MslImportData_DualParamTest,
@@ -117,10 +119,11 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitCall(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), std::string(param.msl_name) +
-                              "(float3(1.0f, 2.0f, 3.0f), "
-                              "float3(4.0f, 5.0f, 6.0f))");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitCall(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), std::string(param.msl_name) +
+                           "(float3(1.0f, 2.0f, 3.0f), "
+                           "float3(4.0f, 5.0f, 6.0f))");
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
                          MslImportData_DualParam_VectorTest,
@@ -135,8 +138,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitCall(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), std::string(param.msl_name) + "(1, 2)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitCall(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), std::string(param.msl_name) + "(1, 2)");
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
                          MslImportData_DualParam_Int_Test,
@@ -152,8 +156,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitCall(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), std::string(param.msl_name) + "(1.0f, 2.0f, 3.0f)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitCall(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), std::string(param.msl_name) + "(1.0f, 2.0f, 3.0f)");
 }
 INSTANTIATE_TEST_SUITE_P(
     MslGeneratorImplTest,
@@ -173,8 +178,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitCall(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), std::string(param.msl_name) + "(1, 2, 3)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitCall(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), std::string(param.msl_name) + "(1, 2, 3)");
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
                          MslImportData_TripleParam_Int_Test,
@@ -190,8 +196,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitCall(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), std::string("determinant(var)"));
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitCall(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), std::string("determinant(var)"));
 }
 
 }  // namespace
diff --git a/src/writer/msl/generator_impl_intrinsic_test.cc b/src/writer/msl/generator_impl_intrinsic_test.cc
index 0d69bea..f2233b0 100644
--- a/src/writer/msl/generator_impl_intrinsic_test.cc
+++ b/src/writer/msl/generator_impl_intrinsic_test.cc
@@ -291,9 +291,9 @@
 
   GeneratorImpl& gen = Build();
 
-  gen.increment_indent();
-  ASSERT_TRUE(gen.EmitExpression(call)) << gen.error();
-  EXPECT_EQ(gen.result(), "  dot(param1, param2)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
+  EXPECT_EQ(out.str(), "dot(param1, param2)");
 }
 
 TEST_F(MslGeneratorImplTest, StorageBarrier) {
@@ -302,9 +302,9 @@
 
   GeneratorImpl& gen = Build();
 
-  gen.increment_indent();
-  ASSERT_TRUE(gen.EmitExpression(call)) << gen.error();
-  EXPECT_EQ(gen.result(), "  threadgroup_barrier(mem_flags::mem_device)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
+  EXPECT_EQ(out.str(), "threadgroup_barrier(mem_flags::mem_device)");
 }
 
 TEST_F(MslGeneratorImplTest, WorkgroupBarrier) {
@@ -313,9 +313,9 @@
 
   GeneratorImpl& gen = Build();
 
-  gen.increment_indent();
-  ASSERT_TRUE(gen.EmitExpression(call)) << gen.error();
-  EXPECT_EQ(gen.result(), "  threadgroup_barrier(mem_flags::mem_threadgroup)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
+  EXPECT_EQ(out.str(), "threadgroup_barrier(mem_flags::mem_threadgroup)");
 }
 
 TEST_F(MslGeneratorImplTest, Pack2x16Float) {
@@ -325,9 +325,9 @@
 
   GeneratorImpl& gen = Build();
 
-  gen.increment_indent();
-  ASSERT_TRUE(gen.EmitExpression(call)) << gen.error();
-  EXPECT_EQ(gen.result(), "  as_type<uint>(half2(p1))");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
+  EXPECT_EQ(out.str(), "as_type<uint>(half2(p1))");
 }
 
 TEST_F(MslGeneratorImplTest, Unpack2x16Float) {
@@ -337,9 +337,9 @@
 
   GeneratorImpl& gen = Build();
 
-  gen.increment_indent();
-  ASSERT_TRUE(gen.EmitExpression(call)) << gen.error();
-  EXPECT_EQ(gen.result(), "  float2(as_type<half2>(p1))");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
+  EXPECT_EQ(out.str(), "float2(as_type<half2>(p1))");
 }
 
 TEST_F(MslGeneratorImplTest, Ignore) {
diff --git a/src/writer/msl/generator_impl_intrinsic_texture_test.cc b/src/writer/msl/generator_impl_intrinsic_texture_test.cc
index bf6958e..aba0aac 100644
--- a/src/writer/msl/generator_impl_intrinsic_texture_test.cc
+++ b/src/writer/msl/generator_impl_intrinsic_texture_test.cc
@@ -281,10 +281,11 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(call)) << gen.error();
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
 
   auto expected = expected_texture_overload(param.overload);
-  EXPECT_EQ(expected, gen.result());
+  EXPECT_EQ(expected, out.str());
 }
 
 INSTANTIATE_TEST_SUITE_P(
diff --git a/src/writer/msl/generator_impl_member_accessor_test.cc b/src/writer/msl/generator_impl_member_accessor_test.cc
index 2047e22..9623a2b 100644
--- a/src/writer/msl/generator_impl_member_accessor_test.cc
+++ b/src/writer/msl/generator_impl_member_accessor_test.cc
@@ -29,8 +29,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), "str.mem");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), "str.mem");
 }
 
 TEST_F(MslGeneratorImplTest, EmitExpression_MemberAccessor_Swizzle_xyz) {
@@ -40,8 +41,9 @@
   WrapInFunction(expr);
 
   GeneratorImpl& gen = Build();
-  ASSERT_TRUE(gen.EmitExpression(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), "my_vec.xyz");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), "my_vec.xyz");
 }
 
 TEST_F(MslGeneratorImplTest, EmitExpression_MemberAccessor_Swizzle_gbr) {
@@ -51,8 +53,9 @@
   WrapInFunction(expr);
 
   GeneratorImpl& gen = Build();
-  ASSERT_TRUE(gen.EmitExpression(expr)) << gen.error();
-  EXPECT_EQ(gen.result(), "my_vec.gbr");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, expr)) << gen.error();
+  EXPECT_EQ(out.str(), "my_vec.gbr");
 }
 
 }  // namespace
diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc
index e92e7b5..d595724 100644
--- a/src/writer/msl/generator_impl_type_test.cc
+++ b/src/writer/msl/generator_impl_type_test.cc
@@ -66,8 +66,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(program->TypeOf(arr), "ary")) << gen.error();
-  EXPECT_EQ(gen.result(), "bool ary[4]");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, program->TypeOf(arr), "ary")) << gen.error();
+  EXPECT_EQ(out.str(), "bool ary[4]");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_ArrayOfArray) {
@@ -77,8 +78,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(program->TypeOf(b), "ary")) << gen.error();
-  EXPECT_EQ(gen.result(), "bool ary[5][4]");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, program->TypeOf(b), "ary")) << gen.error();
+  EXPECT_EQ(out.str(), "bool ary[5][4]");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_ArrayOfArrayOfArray) {
@@ -89,8 +91,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(program->TypeOf(c), "ary")) << gen.error();
-  EXPECT_EQ(gen.result(), "bool ary[6][5][4]");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, program->TypeOf(c), "ary")) << gen.error();
+  EXPECT_EQ(out.str(), "bool ary[6][5][4]");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_Array_WithoutName) {
@@ -99,8 +102,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(program->TypeOf(arr), "")) << gen.error();
-  EXPECT_EQ(gen.result(), "bool[4]");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, program->TypeOf(arr), "")) << gen.error();
+  EXPECT_EQ(out.str(), "bool[4]");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_RuntimeArray) {
@@ -109,8 +113,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(program->TypeOf(arr), "ary")) << gen.error();
-  EXPECT_EQ(gen.result(), "bool ary[1]");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, program->TypeOf(arr), "ary")) << gen.error();
+  EXPECT_EQ(out.str(), "bool ary[1]");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_ArrayWithStride) {
@@ -143,8 +148,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(bool_, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "bool");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, bool_, "")) << gen.error();
+  EXPECT_EQ(out.str(), "bool");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_F32) {
@@ -152,8 +158,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(f32, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "float");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, f32, "")) << gen.error();
+  EXPECT_EQ(out.str(), "float");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_I32) {
@@ -161,8 +168,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(i32, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "int");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, i32, "")) << gen.error();
+  EXPECT_EQ(out.str(), "int");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_Matrix) {
@@ -172,8 +180,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(mat2x3, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "float2x3");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, mat2x3, "")) << gen.error();
+  EXPECT_EQ(out.str(), "float2x3");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_Pointer) {
@@ -183,8 +192,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(p, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "threadgroup float* ");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, p, "")) << gen.error();
+  EXPECT_EQ(out.str(), "threadgroup float* ");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_Struct) {
@@ -195,8 +205,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(program->TypeOf(s), "")) << gen.error();
-  EXPECT_EQ(gen.result(), "S");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, program->TypeOf(s), "")) << gen.error();
+  EXPECT_EQ(out.str(), "S");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_StructDecl) {
@@ -670,8 +681,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(program->TypeOf(s), "")) << gen.error();
-  EXPECT_EQ(gen.result(), R"(struct {
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, program->TypeOf(s), "")) << gen.error();
+  EXPECT_EQ(out.str(), R"(struct {
   /* 0x0000 */ int a;
   /* 0x0004 */ float b;
 })");
@@ -682,8 +694,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(u32, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "uint");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, u32, "")) << gen.error();
+  EXPECT_EQ(out.str(), "uint");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_Vector) {
@@ -692,8 +705,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(vec3, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "float3");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, vec3, "")) << gen.error();
+  EXPECT_EQ(out.str(), "float3");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_Void) {
@@ -701,8 +715,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(void_, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "void");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, void_, "")) << gen.error();
+  EXPECT_EQ(out.str(), "void");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_Sampler) {
@@ -710,8 +725,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(sampler, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "sampler");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, sampler, "")) << gen.error();
+  EXPECT_EQ(out.str(), "sampler");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_SamplerComparison) {
@@ -719,8 +735,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(sampler, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "sampler");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, sampler, "")) << gen.error();
+  EXPECT_EQ(out.str(), "sampler");
 }
 
 struct MslDepthTextureData {
@@ -739,8 +756,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
-  EXPECT_EQ(gen.result(), params.result);
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
+  EXPECT_EQ(out.str(), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
     MslGeneratorImplTest,
@@ -772,8 +790,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(s, "")) << gen.error();
-  EXPECT_EQ(gen.result(), params.result);
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, s, "")) << gen.error();
+  EXPECT_EQ(out.str(), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
     MslGeneratorImplTest,
@@ -798,8 +817,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(ms, "")) << gen.error();
-  EXPECT_EQ(gen.result(), "texture2d_ms<uint, access::read>");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, ms, "")) << gen.error();
+  EXPECT_EQ(out.str(), "texture2d_ms<uint, access::read>");
 }
 
 struct MslStorageTextureData {
@@ -826,8 +846,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitType(program->TypeOf(s), "")) << gen.error();
-  EXPECT_EQ(gen.result(), params.result);
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitType(out, program->TypeOf(s), "")) << gen.error();
+  EXPECT_EQ(out.str(), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
     MslGeneratorImplTest,
diff --git a/src/writer/msl/generator_impl_unary_op_test.cc b/src/writer/msl/generator_impl_unary_op_test.cc
index 2dfe8a9..9254494 100644
--- a/src/writer/msl/generator_impl_unary_op_test.cc
+++ b/src/writer/msl/generator_impl_unary_op_test.cc
@@ -29,8 +29,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(op)) << gen.error();
-  EXPECT_EQ(gen.result(), "&(expr)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, op)) << gen.error();
+  EXPECT_EQ(out.str(), "&(expr)");
 }
 
 TEST_F(MslUnaryOpTest, Complement) {
@@ -41,8 +42,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(op)) << gen.error();
-  EXPECT_EQ(gen.result(), "~(expr)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, op)) << gen.error();
+  EXPECT_EQ(out.str(), "~(expr)");
 }
 
 TEST_F(MslUnaryOpTest, Indirection) {
@@ -56,8 +58,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(op)) << gen.error();
-  EXPECT_EQ(gen.result(), "*(expr)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, op)) << gen.error();
+  EXPECT_EQ(out.str(), "*(expr)");
 }
 
 TEST_F(MslUnaryOpTest, Not) {
@@ -67,8 +70,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(op)) << gen.error();
-  EXPECT_EQ(gen.result(), "!(expr)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, op)) << gen.error();
+  EXPECT_EQ(out.str(), "!(expr)");
 }
 
 TEST_F(MslUnaryOpTest, Negation) {
@@ -79,8 +83,9 @@
 
   GeneratorImpl& gen = Build();
 
-  ASSERT_TRUE(gen.EmitExpression(op)) << gen.error();
-  EXPECT_EQ(gen.result(), "-(expr)");
+  std::stringstream out;
+  ASSERT_TRUE(gen.EmitExpression(out, op)) << gen.error();
+  EXPECT_EQ(out.str(), "-(expr)");
 }
 
 }  // namespace
diff --git a/src/writer/text_generator.cc b/src/writer/text_generator.cc
index 624d72c..a3ec05c 100644
--- a/src/writer/text_generator.cc
+++ b/src/writer/text_generator.cc
@@ -44,8 +44,9 @@
     auto str = os.str();
     if (!str.empty()) {
       gen->make_indent();
-      gen->out_ << str << std::endl;
+      gen->out_ << str;
     }
+    gen->out_ << std::endl;
   }
 }
 
diff --git a/test/bug/dawn/947.wgsl.expected.msl b/test/bug/dawn/947.wgsl.expected.msl
index b33557a..2ad00ea 100644
--- a/test/bug/dawn/947.wgsl.expected.msl
+++ b/test/bug/dawn/947.wgsl.expected.msl
@@ -39,8 +39,8 @@
 
 fragment tint_symbol_4 fs_main(texture2d<float, access::sample> tint_symbol_7 [[texture(2)]], sampler tint_symbol_8 [[sampler(1)]], tint_symbol_3 tint_symbol_2 [[stage_in]]) {
   float2 const texcoord = tint_symbol_2.texcoord;
-  float2 clampedTexcoord =   clamp(texcoord, float2(0.0f, 0.0f), float2(1.0f, 1.0f));
-  if (!(  all((clampedTexcoord == texcoord)))) {
+  float2 clampedTexcoord = clamp(texcoord, float2(0.0f, 0.0f), float2(1.0f, 1.0f));
+  if (!(all((clampedTexcoord == texcoord)))) {
     discard_fragment();
   }
   float4 srcColor = tint_symbol_7.sample(tint_symbol_8, texcoord);
diff --git a/test/bug/tint/749.spvasm.expected.msl b/test/bug/tint/749.spvasm.expected.msl
index 1e5e850..9e417f0 100644
--- a/test/bug/tint/749.spvasm.expected.msl
+++ b/test/bug/tint/749.spvasm.expected.msl
@@ -1451,7 +1451,7 @@
   int const x_909 = (*(tint_symbol_86)).numbers.arr[4];
   (*(tint_symbol_86)).numbers.arr[4] = 0;
   (*(tint_symbol_86)).numbers.arr[4] = x_909;
-  if ((  fabs((x_308 - x_310)) < 0.25f)) {
+  if ((fabs((x_308 - x_310)) < 0.25f)) {
     float const x_910 = uv.x;
     uv.x = 0.0f;
     uv.x = x_910;
@@ -1505,7 +1505,7 @@
   uv[0] = 0.0f;
   uv[0] = x_922;
   float3 const x_519 = float3(x_447.x, x_446.x, x_446.y);
-  float3 const x_326 =   normalize(x_325);
+  float3 const x_326 = normalize(x_325);
   float const x_923 = uv.x;
   uv.x = 0.0f;
   uv.x = x_923;
diff --git a/test/bug/tint/913.wgsl.expected.msl b/test/bug/tint/913.wgsl.expected.msl
index e30f694..87536c3 100644
--- a/test/bug/tint/913.wgsl.expected.msl
+++ b/test/bug/tint/913.wgsl.expected.msl
@@ -13,7 +13,7 @@
 };
 
 bool aboutEqual(float value, float expect) {
-  return (  fabs((value - expect)) < 0.001f);
+  return (fabs((value - expect)) < 0.001f);
 }
 
 kernel void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]], texture2d<float, access::sample> tint_symbol_3 [[texture(1)]], uint3 GlobalInvocationID [[thread_position_in_grid]], constant Uniforms& uniforms [[buffer(3)]], device OutputBuf& output [[buffer(2)]]) {
@@ -23,7 +23,7 @@
   float4 const nonCoveredColor = float4(0.0f, 1.0f, 0.0f, 1.0f);
   bool success = true;
   if (((((dstTexCoord.x < uniforms.dstCopyOrigin.x) || (dstTexCoord.y < uniforms.dstCopyOrigin.y)) || (dstTexCoord.x >= (uniforms.dstCopyOrigin.x + uniforms.copySize.x))) || (dstTexCoord.y >= (uniforms.dstCopyOrigin.y + uniforms.copySize.y)))) {
-    success = (success &&     all((tint_symbol_3.read(uint2(int2(dstTexCoord)), 0) == nonCoveredColor)));
+    success = (success && all((tint_symbol_3.read(uint2(int2(dstTexCoord)), 0) == nonCoveredColor)));
   } else {
     uint2 srcTexCoord = ((dstTexCoord - uniforms.dstCopyOrigin) + uniforms.srcCopyOrigin);
     if ((uniforms.dstTextureFlipY == 1u)) {
diff --git a/test/bug/tint/914.wgsl.expected.msl b/test/bug/tint/914.wgsl.expected.msl
index bdb650c..d9a4b82 100644
--- a/test/bug/tint/914.wgsl.expected.msl
+++ b/test/bug/tint/914.wgsl.expected.msl
@@ -59,7 +59,7 @@
     tint_array_wrapper const tint_symbol_3 = {.arr={}};
     tint_symbol_5 = tint_symbol_3;
   }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
+  threadgroup_barrier(mem_flags::mem_threadgroup);
   uint const tileRow = (local_id.y * RowPerThread);
   uint const tileCol = (local_id.x * ColPerThread);
   uint const globalRow = (global_id.y * RowPerThread);
@@ -140,7 +140,7 @@
           }
         }
       }
-            threadgroup_barrier(mem_flags::mem_threadgroup);
+      threadgroup_barrier(mem_flags::mem_threadgroup);
       {
         uint k = 0u;
         while (true) {
@@ -189,7 +189,7 @@
           }
         }
       }
-            threadgroup_barrier(mem_flags::mem_threadgroup);
+      threadgroup_barrier(mem_flags::mem_threadgroup);
       {
         t = (t + 1u);
       }
diff --git a/test/intrinsics/gen/abs/002533.wgsl.expected.msl b/test/intrinsics/gen/abs/002533.wgsl.expected.msl
index 1258a26..84bfd68 100644
--- a/test/intrinsics/gen/abs/002533.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/002533.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_002533() {
-  float4 res =   fabs(float4());
+  float4 res = fabs(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/005174.wgsl.expected.msl b/test/intrinsics/gen/abs/005174.wgsl.expected.msl
index 3babfb7..05c0490 100644
--- a/test/intrinsics/gen/abs/005174.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/005174.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_005174() {
-  float3 res =   fabs(float3());
+  float3 res = fabs(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/1ce782.wgsl.expected.msl b/test/intrinsics/gen/abs/1ce782.wgsl.expected.msl
index 987b8fb..0efe442 100644
--- a/test/intrinsics/gen/abs/1ce782.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/1ce782.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_1ce782() {
-  uint4 res =   abs(uint4());
+  uint4 res = abs(uint4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/1e9d53.wgsl.expected.msl b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.msl
index 944edf8..82d59b8 100644
--- a/test/intrinsics/gen/abs/1e9d53.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_1e9d53() {
-  float2 res =   fabs(float2());
+  float2 res = fabs(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/467cd1.wgsl.expected.msl b/test/intrinsics/gen/abs/467cd1.wgsl.expected.msl
index 76477c2..3764d7f 100644
--- a/test/intrinsics/gen/abs/467cd1.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/467cd1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_467cd1() {
-  uint res =   abs(1u);
+  uint res = abs(1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/4ad288.wgsl.expected.msl b/test/intrinsics/gen/abs/4ad288.wgsl.expected.msl
index 081a994..e9edc03 100644
--- a/test/intrinsics/gen/abs/4ad288.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/4ad288.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_4ad288() {
-  int res =   abs(1);
+  int res = abs(1);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/5ad50a.wgsl.expected.msl b/test/intrinsics/gen/abs/5ad50a.wgsl.expected.msl
index bcc027b..dd6bdd7 100644
--- a/test/intrinsics/gen/abs/5ad50a.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/5ad50a.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_5ad50a() {
-  int3 res =   abs(int3());
+  int3 res = abs(int3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/7326de.wgsl.expected.msl b/test/intrinsics/gen/abs/7326de.wgsl.expected.msl
index 3de8a49..e17b21e 100644
--- a/test/intrinsics/gen/abs/7326de.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/7326de.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_7326de() {
-  uint3 res =   abs(uint3());
+  uint3 res = abs(uint3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/7f28e6.wgsl.expected.msl b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.msl
index 9c154aa..471ff15 100644
--- a/test/intrinsics/gen/abs/7f28e6.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_7f28e6() {
-  uint2 res =   abs(uint2());
+  uint2 res = abs(uint2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/7faa9e.wgsl.expected.msl b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.msl
index d4e4668..1738b04 100644
--- a/test/intrinsics/gen/abs/7faa9e.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_7faa9e() {
-  int2 res =   abs(int2());
+  int2 res = abs(int2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/9c80a6.wgsl.expected.msl b/test/intrinsics/gen/abs/9c80a6.wgsl.expected.msl
index 09179b9..87ef75d 100644
--- a/test/intrinsics/gen/abs/9c80a6.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/9c80a6.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_9c80a6() {
-  int4 res =   abs(int4());
+  int4 res = abs(int4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/abs/b96037.wgsl.expected.msl b/test/intrinsics/gen/abs/b96037.wgsl.expected.msl
index 86cbf29..a8928f1 100644
--- a/test/intrinsics/gen/abs/b96037.wgsl.expected.msl
+++ b/test/intrinsics/gen/abs/b96037.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void abs_b96037() {
-  float res =   fabs(1.0f);
+  float res = fabs(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/acos/489247.wgsl.expected.msl b/test/intrinsics/gen/acos/489247.wgsl.expected.msl
index 8a12c8a..f0b164f 100644
--- a/test/intrinsics/gen/acos/489247.wgsl.expected.msl
+++ b/test/intrinsics/gen/acos/489247.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void acos_489247() {
-  float res =   acos(1.0f);
+  float res = acos(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/acos/8e2acf.wgsl.expected.msl b/test/intrinsics/gen/acos/8e2acf.wgsl.expected.msl
index fe56d67..99d4c08 100644
--- a/test/intrinsics/gen/acos/8e2acf.wgsl.expected.msl
+++ b/test/intrinsics/gen/acos/8e2acf.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void acos_8e2acf() {
-  float4 res =   acos(float4());
+  float4 res = acos(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/acos/a610c4.wgsl.expected.msl b/test/intrinsics/gen/acos/a610c4.wgsl.expected.msl
index aaf328f..e1d07a9 100644
--- a/test/intrinsics/gen/acos/a610c4.wgsl.expected.msl
+++ b/test/intrinsics/gen/acos/a610c4.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void acos_a610c4() {
-  float3 res =   acos(float3());
+  float3 res = acos(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/acos/dfc915.wgsl.expected.msl b/test/intrinsics/gen/acos/dfc915.wgsl.expected.msl
index 9257d33..48e93aa 100644
--- a/test/intrinsics/gen/acos/dfc915.wgsl.expected.msl
+++ b/test/intrinsics/gen/acos/dfc915.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void acos_dfc915() {
-  float2 res =   acos(float2());
+  float2 res = acos(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/all/986c7b.wgsl.expected.msl b/test/intrinsics/gen/all/986c7b.wgsl.expected.msl
index 022b58e..032da53 100644
--- a/test/intrinsics/gen/all/986c7b.wgsl.expected.msl
+++ b/test/intrinsics/gen/all/986c7b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void all_986c7b() {
-  bool res =   all(bool4());
+  bool res = all(bool4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/all/bd2dba.wgsl.expected.msl b/test/intrinsics/gen/all/bd2dba.wgsl.expected.msl
index 9ad60e3..6c7a2fb 100644
--- a/test/intrinsics/gen/all/bd2dba.wgsl.expected.msl
+++ b/test/intrinsics/gen/all/bd2dba.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void all_bd2dba() {
-  bool res =   all(bool3());
+  bool res = all(bool3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/all/f46790.wgsl.expected.msl b/test/intrinsics/gen/all/f46790.wgsl.expected.msl
index f2813f5..9b337fb 100644
--- a/test/intrinsics/gen/all/f46790.wgsl.expected.msl
+++ b/test/intrinsics/gen/all/f46790.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void all_f46790() {
-  bool res =   all(bool2());
+  bool res = all(bool2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/any/083428.wgsl.expected.msl b/test/intrinsics/gen/any/083428.wgsl.expected.msl
index 3b69c0a..e76e344 100644
--- a/test/intrinsics/gen/any/083428.wgsl.expected.msl
+++ b/test/intrinsics/gen/any/083428.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void any_083428() {
-  bool res =   any(bool4());
+  bool res = any(bool4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/any/0e3e58.wgsl.expected.msl b/test/intrinsics/gen/any/0e3e58.wgsl.expected.msl
index 8efaca1..9933be1 100644
--- a/test/intrinsics/gen/any/0e3e58.wgsl.expected.msl
+++ b/test/intrinsics/gen/any/0e3e58.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void any_0e3e58() {
-  bool res =   any(bool2());
+  bool res = any(bool2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/any/e755c1.wgsl.expected.msl b/test/intrinsics/gen/any/e755c1.wgsl.expected.msl
index 0814a03..a789697 100644
--- a/test/intrinsics/gen/any/e755c1.wgsl.expected.msl
+++ b/test/intrinsics/gen/any/e755c1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void any_e755c1() {
-  bool res =   any(bool3());
+  bool res = any(bool3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/asin/064953.wgsl.expected.msl b/test/intrinsics/gen/asin/064953.wgsl.expected.msl
index 3a5bbeb..e5ae534 100644
--- a/test/intrinsics/gen/asin/064953.wgsl.expected.msl
+++ b/test/intrinsics/gen/asin/064953.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void asin_064953() {
-  float4 res =   asin(float4());
+  float4 res = asin(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/asin/7b6a44.wgsl.expected.msl b/test/intrinsics/gen/asin/7b6a44.wgsl.expected.msl
index ae9dd48..bccf8b9 100644
--- a/test/intrinsics/gen/asin/7b6a44.wgsl.expected.msl
+++ b/test/intrinsics/gen/asin/7b6a44.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void asin_7b6a44() {
-  float2 res =   asin(float2());
+  float2 res = asin(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.msl b/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.msl
index e246b62..9fdb5c6 100644
--- a/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.msl
+++ b/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void asin_8cd9c9() {
-  float3 res =   asin(float3());
+  float3 res = asin(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/asin/c0c272.wgsl.expected.msl b/test/intrinsics/gen/asin/c0c272.wgsl.expected.msl
index 8a7e083..9467bed 100644
--- a/test/intrinsics/gen/asin/c0c272.wgsl.expected.msl
+++ b/test/intrinsics/gen/asin/c0c272.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void asin_c0c272() {
-  float res =   asin(1.0f);
+  float res = asin(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/atan/02979a.wgsl.expected.msl b/test/intrinsics/gen/atan/02979a.wgsl.expected.msl
index 411c3bd..d7f68f1 100644
--- a/test/intrinsics/gen/atan/02979a.wgsl.expected.msl
+++ b/test/intrinsics/gen/atan/02979a.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void atan_02979a() {
-  float res =   atan(1.0f);
+  float res = atan(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/atan/331e6d.wgsl.expected.msl b/test/intrinsics/gen/atan/331e6d.wgsl.expected.msl
index 0978363..2474bec 100644
--- a/test/intrinsics/gen/atan/331e6d.wgsl.expected.msl
+++ b/test/intrinsics/gen/atan/331e6d.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void atan_331e6d() {
-  float3 res =   atan(float3());
+  float3 res = atan(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/atan/a8b696.wgsl.expected.msl b/test/intrinsics/gen/atan/a8b696.wgsl.expected.msl
index 16ab64a..a985ca9 100644
--- a/test/intrinsics/gen/atan/a8b696.wgsl.expected.msl
+++ b/test/intrinsics/gen/atan/a8b696.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void atan_a8b696() {
-  float4 res =   atan(float4());
+  float4 res = atan(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/atan/ad96e4.wgsl.expected.msl b/test/intrinsics/gen/atan/ad96e4.wgsl.expected.msl
index 080c24a..3301ece 100644
--- a/test/intrinsics/gen/atan/ad96e4.wgsl.expected.msl
+++ b/test/intrinsics/gen/atan/ad96e4.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void atan_ad96e4() {
-  float2 res =   atan(float2());
+  float2 res = atan(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/atan2/57fb13.wgsl.expected.msl b/test/intrinsics/gen/atan2/57fb13.wgsl.expected.msl
index f647ab6..75f4759 100644
--- a/test/intrinsics/gen/atan2/57fb13.wgsl.expected.msl
+++ b/test/intrinsics/gen/atan2/57fb13.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void atan2_57fb13() {
-  float2 res =   atan2(float2(), float2());
+  float2 res = atan2(float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/atan2/96057c.wgsl.expected.msl b/test/intrinsics/gen/atan2/96057c.wgsl.expected.msl
index eda44b5..ca9d89e 100644
--- a/test/intrinsics/gen/atan2/96057c.wgsl.expected.msl
+++ b/test/intrinsics/gen/atan2/96057c.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void atan2_96057c() {
-  float res =   atan2(1.0f, 1.0f);
+  float res = atan2(1.0f, 1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.msl b/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.msl
index 6a52430..041777f 100644
--- a/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.msl
+++ b/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void atan2_a70d0d() {
-  float3 res =   atan2(float3(), float3());
+  float3 res = atan2(float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/atan2/ae713e.wgsl.expected.msl b/test/intrinsics/gen/atan2/ae713e.wgsl.expected.msl
index 9aa0aa7..5823a53 100644
--- a/test/intrinsics/gen/atan2/ae713e.wgsl.expected.msl
+++ b/test/intrinsics/gen/atan2/ae713e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void atan2_ae713e() {
-  float4 res =   atan2(float4(), float4());
+  float4 res = atan2(float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/ceil/34064b.wgsl.expected.msl b/test/intrinsics/gen/ceil/34064b.wgsl.expected.msl
index 6a9eba0..5593646 100644
--- a/test/intrinsics/gen/ceil/34064b.wgsl.expected.msl
+++ b/test/intrinsics/gen/ceil/34064b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void ceil_34064b() {
-  float3 res =   ceil(float3());
+  float3 res = ceil(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/ceil/678655.wgsl.expected.msl b/test/intrinsics/gen/ceil/678655.wgsl.expected.msl
index 1dc8a90..fdc9079 100644
--- a/test/intrinsics/gen/ceil/678655.wgsl.expected.msl
+++ b/test/intrinsics/gen/ceil/678655.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void ceil_678655() {
-  float res =   ceil(1.0f);
+  float res = ceil(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/ceil/96f597.wgsl.expected.msl b/test/intrinsics/gen/ceil/96f597.wgsl.expected.msl
index 355e7c3..0e7d8d7 100644
--- a/test/intrinsics/gen/ceil/96f597.wgsl.expected.msl
+++ b/test/intrinsics/gen/ceil/96f597.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void ceil_96f597() {
-  float2 res =   ceil(float2());
+  float2 res = ceil(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/ceil/b74c16.wgsl.expected.msl b/test/intrinsics/gen/ceil/b74c16.wgsl.expected.msl
index 982d1d0..baef3df 100644
--- a/test/intrinsics/gen/ceil/b74c16.wgsl.expected.msl
+++ b/test/intrinsics/gen/ceil/b74c16.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void ceil_b74c16() {
-  float4 res =   ceil(float4());
+  float4 res = ceil(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.msl b/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.msl
index dce861e..601db26 100644
--- a/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_0acf8f() {
-  float2 res =   clamp(float2(), float2(), float2());
+  float2 res = clamp(float2(), float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.msl b/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.msl
index 062a582..faac6ae 100644
--- a/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_1a32e3() {
-  int4 res =   clamp(int4(), int4(), int4());
+  int4 res = clamp(int4(), int4(), int4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/2bd567.wgsl.expected.msl b/test/intrinsics/gen/clamp/2bd567.wgsl.expected.msl
index 533e9e4..676b575 100644
--- a/test/intrinsics/gen/clamp/2bd567.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/2bd567.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_2bd567() {
-  float res =   clamp(1.0f, 1.0f, 1.0f);
+  float res = clamp(1.0f, 1.0f, 1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/2bde41.wgsl.expected.msl b/test/intrinsics/gen/clamp/2bde41.wgsl.expected.msl
index aa99935..1db29d6 100644
--- a/test/intrinsics/gen/clamp/2bde41.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/2bde41.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_2bde41() {
-  float4 res =   clamp(float4(), float4(), float4());
+  float4 res = clamp(float4(), float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/548fc7.wgsl.expected.msl b/test/intrinsics/gen/clamp/548fc7.wgsl.expected.msl
index ecfc1ad..633a63a 100644
--- a/test/intrinsics/gen/clamp/548fc7.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/548fc7.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_548fc7() {
-  uint3 res =   clamp(uint3(), uint3(), uint3());
+  uint3 res = clamp(uint3(), uint3(), uint3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/5f0819.wgsl.expected.msl b/test/intrinsics/gen/clamp/5f0819.wgsl.expected.msl
index 5a6317d..22d535b 100644
--- a/test/intrinsics/gen/clamp/5f0819.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/5f0819.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_5f0819() {
-  int3 res =   clamp(int3(), int3(), int3());
+  int3 res = clamp(int3(), int3(), int3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/6c1749.wgsl.expected.msl b/test/intrinsics/gen/clamp/6c1749.wgsl.expected.msl
index 654a545..87c439c 100644
--- a/test/intrinsics/gen/clamp/6c1749.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/6c1749.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_6c1749() {
-  int2 res =   clamp(int2(), int2(), int2());
+  int2 res = clamp(int2(), int2(), int2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/7706d7.wgsl.expected.msl b/test/intrinsics/gen/clamp/7706d7.wgsl.expected.msl
index 634bdf5..f2bf5f6 100644
--- a/test/intrinsics/gen/clamp/7706d7.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/7706d7.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_7706d7() {
-  uint2 res =   clamp(uint2(), uint2(), uint2());
+  uint2 res = clamp(uint2(), uint2(), uint2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/867397.wgsl.expected.msl b/test/intrinsics/gen/clamp/867397.wgsl.expected.msl
index 6c8eeef..a020584 100644
--- a/test/intrinsics/gen/clamp/867397.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/867397.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_867397() {
-  float3 res =   clamp(float3(), float3(), float3());
+  float3 res = clamp(float3(), float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/a2de25.wgsl.expected.msl b/test/intrinsics/gen/clamp/a2de25.wgsl.expected.msl
index 00bbc2a..1e92fe7 100644
--- a/test/intrinsics/gen/clamp/a2de25.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/a2de25.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_a2de25() {
-  uint res =   clamp(1u, 1u, 1u);
+  uint res = clamp(1u, 1u, 1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/b07c65.wgsl.expected.msl b/test/intrinsics/gen/clamp/b07c65.wgsl.expected.msl
index 15d67e6..f702d9f 100644
--- a/test/intrinsics/gen/clamp/b07c65.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/b07c65.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_b07c65() {
-  int res =   clamp(1, 1, 1);
+  int res = clamp(1, 1, 1);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.msl b/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.msl
index 7e2562c..e774770 100644
--- a/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.msl
+++ b/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void clamp_bd43ce() {
-  uint4 res =   clamp(uint4(), uint4(), uint4());
+  uint4 res = clamp(uint4(), uint4(), uint4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/cos/16dc15.wgsl.expected.msl b/test/intrinsics/gen/cos/16dc15.wgsl.expected.msl
index 4aeac90..083cc8e 100644
--- a/test/intrinsics/gen/cos/16dc15.wgsl.expected.msl
+++ b/test/intrinsics/gen/cos/16dc15.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void cos_16dc15() {
-  float3 res =   cos(float3());
+  float3 res = cos(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/cos/29d66d.wgsl.expected.msl b/test/intrinsics/gen/cos/29d66d.wgsl.expected.msl
index 9c74fa2..432218b 100644
--- a/test/intrinsics/gen/cos/29d66d.wgsl.expected.msl
+++ b/test/intrinsics/gen/cos/29d66d.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void cos_29d66d() {
-  float4 res =   cos(float4());
+  float4 res = cos(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/cos/c3b486.wgsl.expected.msl b/test/intrinsics/gen/cos/c3b486.wgsl.expected.msl
index fa7aafc..c09cc02 100644
--- a/test/intrinsics/gen/cos/c3b486.wgsl.expected.msl
+++ b/test/intrinsics/gen/cos/c3b486.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void cos_c3b486() {
-  float2 res =   cos(float2());
+  float2 res = cos(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/cos/c5c28e.wgsl.expected.msl b/test/intrinsics/gen/cos/c5c28e.wgsl.expected.msl
index 1650815..547bb12 100644
--- a/test/intrinsics/gen/cos/c5c28e.wgsl.expected.msl
+++ b/test/intrinsics/gen/cos/c5c28e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void cos_c5c28e() {
-  float res =   cos(1.0f);
+  float res = cos(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/cosh/377652.wgsl.expected.msl b/test/intrinsics/gen/cosh/377652.wgsl.expected.msl
index f52361f..b9dd371 100644
--- a/test/intrinsics/gen/cosh/377652.wgsl.expected.msl
+++ b/test/intrinsics/gen/cosh/377652.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void cosh_377652() {
-  float3 res =   cosh(float3());
+  float3 res = cosh(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/cosh/c13756.wgsl.expected.msl b/test/intrinsics/gen/cosh/c13756.wgsl.expected.msl
index 7cf7bca..1cb1cc9 100644
--- a/test/intrinsics/gen/cosh/c13756.wgsl.expected.msl
+++ b/test/intrinsics/gen/cosh/c13756.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void cosh_c13756() {
-  float2 res =   cosh(float2());
+  float2 res = cosh(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/cosh/da92dd.wgsl.expected.msl b/test/intrinsics/gen/cosh/da92dd.wgsl.expected.msl
index 88231f2..9a53964 100644
--- a/test/intrinsics/gen/cosh/da92dd.wgsl.expected.msl
+++ b/test/intrinsics/gen/cosh/da92dd.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void cosh_da92dd() {
-  float res =   cosh(1.0f);
+  float res = cosh(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.msl b/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.msl
index 9bc5d43..30c334b 100644
--- a/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.msl
+++ b/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void cosh_e0c1de() {
-  float4 res =   cosh(float4());
+  float4 res = cosh(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.msl b/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.msl
index c08490e..010ad82 100644
--- a/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.msl
+++ b/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void countOneBits_0d0e46() {
-  uint4 res =   popcount(uint4());
+  uint4 res = popcount(uint4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.msl b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.msl
index 25b509d..78a9670 100644
--- a/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.msl
+++ b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void countOneBits_0f7980() {
-  int4 res =   popcount(int4());
+  int4 res = popcount(int4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.msl b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.msl
index aad3dd4..7bb8d1f 100644
--- a/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.msl
+++ b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void countOneBits_65d2ae() {
-  int3 res =   popcount(int3());
+  int3 res = popcount(int3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.msl b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.msl
index 1ead1f9..3790052 100644
--- a/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.msl
+++ b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void countOneBits_690cfc() {
-  uint3 res =   popcount(uint3());
+  uint3 res = popcount(uint3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.msl b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.msl
index 57d94f3..6648c06 100644
--- a/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.msl
+++ b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void countOneBits_94fd81() {
-  uint2 res =   popcount(uint2());
+  uint2 res = popcount(uint2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.msl b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.msl
index 8626141..94e43c8 100644
--- a/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.msl
+++ b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void countOneBits_ae44f9() {
-  uint res =   popcount(1u);
+  uint res = popcount(1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.msl b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.msl
index 3aeaa26..5b4944e 100644
--- a/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.msl
+++ b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void countOneBits_af90e2() {
-  int2 res =   popcount(int2());
+  int2 res = popcount(int2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.msl b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.msl
index 7002fce..74a0621 100644
--- a/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.msl
+++ b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void countOneBits_fd88b2() {
-  int res =   popcount(1);
+  int res = popcount(1);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/cross/041cb0.wgsl.expected.msl b/test/intrinsics/gen/cross/041cb0.wgsl.expected.msl
index a70d5f1..0b0432b 100644
--- a/test/intrinsics/gen/cross/041cb0.wgsl.expected.msl
+++ b/test/intrinsics/gen/cross/041cb0.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void cross_041cb0() {
-  float3 res =   cross(float3(), float3());
+  float3 res = cross(float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.msl b/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.msl
index d3fd820..aa4fabf 100644
--- a/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.msl
+++ b/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void determinant_2b62ba() {
-  float res =   determinant(float3x3());
+  float res = determinant(float3x3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.msl b/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.msl
index c53e2bd..188a9d3 100644
--- a/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.msl
+++ b/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void determinant_a0a87c() {
-  float res =   determinant(float4x4());
+  float res = determinant(float4x4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/determinant/e19305.wgsl.expected.msl b/test/intrinsics/gen/determinant/e19305.wgsl.expected.msl
index 025f871..c902c38 100644
--- a/test/intrinsics/gen/determinant/e19305.wgsl.expected.msl
+++ b/test/intrinsics/gen/determinant/e19305.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void determinant_e19305() {
-  float res =   determinant(float2x2());
+  float res = determinant(float2x2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/distance/0657d4.wgsl.expected.msl b/test/intrinsics/gen/distance/0657d4.wgsl.expected.msl
index a1f835f..3c80f04 100644
--- a/test/intrinsics/gen/distance/0657d4.wgsl.expected.msl
+++ b/test/intrinsics/gen/distance/0657d4.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void distance_0657d4() {
-  float res =   distance(float3(), float3());
+  float res = distance(float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/distance/9646ea.wgsl.expected.msl b/test/intrinsics/gen/distance/9646ea.wgsl.expected.msl
index 6b6b77e..b9690c3 100644
--- a/test/intrinsics/gen/distance/9646ea.wgsl.expected.msl
+++ b/test/intrinsics/gen/distance/9646ea.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void distance_9646ea() {
-  float res =   distance(float4(), float4());
+  float res = distance(float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/distance/aa4055.wgsl.expected.msl b/test/intrinsics/gen/distance/aa4055.wgsl.expected.msl
index bf66f8e..ae20aaa 100644
--- a/test/intrinsics/gen/distance/aa4055.wgsl.expected.msl
+++ b/test/intrinsics/gen/distance/aa4055.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void distance_aa4055() {
-  float res =   distance(float2(), float2());
+  float res = distance(float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/dot/0c577b.wgsl.expected.msl b/test/intrinsics/gen/dot/0c577b.wgsl.expected.msl
index 4ed2419..c354cf7 100644
--- a/test/intrinsics/gen/dot/0c577b.wgsl.expected.msl
+++ b/test/intrinsics/gen/dot/0c577b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void dot_0c577b() {
-  float res =   dot(float4(), float4());
+  float res = dot(float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/dot/883f0e.wgsl.expected.msl b/test/intrinsics/gen/dot/883f0e.wgsl.expected.msl
index 4326cad..f099d39 100644
--- a/test/intrinsics/gen/dot/883f0e.wgsl.expected.msl
+++ b/test/intrinsics/gen/dot/883f0e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void dot_883f0e() {
-  float res =   dot(float2(), float2());
+  float res = dot(float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/dot/ba4246.wgsl.expected.msl b/test/intrinsics/gen/dot/ba4246.wgsl.expected.msl
index ff18b2d..b67deb5 100644
--- a/test/intrinsics/gen/dot/ba4246.wgsl.expected.msl
+++ b/test/intrinsics/gen/dot/ba4246.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void dot_ba4246() {
-  float res =   dot(float3(), float3());
+  float res = dot(float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.msl b/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.msl
index 082d924..a7719d7 100644
--- a/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdx_0763f7() {
-  float3 res =   dfdx(float3());
+  float3 res = dfdx(float3());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.msl b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.msl
index 1c389c8..c158382 100644
--- a/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdx_99edb1() {
-  float2 res =   dfdx(float2());
+  float2 res = dfdx(float2());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.msl b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.msl
index 06e584f..bb43c52 100644
--- a/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdx_c487fa() {
-  float4 res =   dfdx(float4());
+  float4 res = dfdx(float4());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdx/e263de.wgsl.expected.msl b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.msl
index 9a63d08..69792e1 100644
--- a/test/intrinsics/gen/dpdx/e263de.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdx_e263de() {
-  float res =   dfdx(1.0f);
+  float res = dfdx(1.0f);
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.msl b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.msl
index fc27f74..b566d55 100644
--- a/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdxCoarse_029152() {
-  float res =   dfdx(1.0f);
+  float res = dfdx(1.0f);
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.msl b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.msl
index 283a082..8bbf1ac 100644
--- a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdxCoarse_9581cf() {
-  float2 res =   dfdx(float2());
+  float2 res = dfdx(float2());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.msl b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.msl
index 7134062..62b43ef 100644
--- a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdxCoarse_c28641() {
-  float4 res =   dfdx(float4());
+  float4 res = dfdx(float4());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.msl b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.msl
index e04364e..8c4d038 100644
--- a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdxCoarse_f64d7b() {
-  float3 res =   dfdx(float3());
+  float3 res = dfdx(float3());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.msl b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.msl
index c4a18ed..6b2bc94 100644
--- a/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdxFine_8c5069() {
-  float4 res =   dfdx(float4());
+  float4 res = dfdx(float4());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.msl b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.msl
index be6ed51..60055fb 100644
--- a/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdxFine_9631de() {
-  float2 res =   dfdx(float2());
+  float2 res = dfdx(float2());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.msl b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.msl
index b618db9..26f6c10 100644
--- a/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdxFine_f401a2() {
-  float res =   dfdx(1.0f);
+  float res = dfdx(1.0f);
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.msl b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.msl
index f19db09..8149873 100644
--- a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdxFine_f92fb6() {
-  float3 res =   dfdx(float3());
+  float3 res = dfdx(float3());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdy/699a05.wgsl.expected.msl b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.msl
index 9a2a776..f996365 100644
--- a/test/intrinsics/gen/dpdy/699a05.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdy_699a05() {
-  float4 res =   dfdy(float4());
+  float4 res = dfdy(float4());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.msl b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.msl
index 5efaf9e..d4f274e 100644
--- a/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdy_7f8d84() {
-  float res =   dfdy(1.0f);
+  float res = dfdy(1.0f);
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.msl b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.msl
index 74fa551..98a29ea 100644
--- a/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdy_a8b56e() {
-  float2 res =   dfdy(float2());
+  float2 res = dfdy(float2());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.msl b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.msl
index 5c4fdf7..d0236ba 100644
--- a/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdy_feb40f() {
-  float3 res =   dfdy(float3());
+  float3 res = dfdy(float3());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.msl b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.msl
index 55be7be..83cceec 100644
--- a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdyCoarse_3e1ab4() {
-  float2 res =   dfdy(float2());
+  float2 res = dfdy(float2());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.msl b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.msl
index 32038dd..cbc5f50 100644
--- a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdyCoarse_445d24() {
-  float4 res =   dfdy(float4());
+  float4 res = dfdy(float4());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.msl b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.msl
index 42c9c5d..f77b122 100644
--- a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdyCoarse_870a7e() {
-  float res =   dfdy(1.0f);
+  float res = dfdy(1.0f);
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.msl b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.msl
index 9f1ea7f..048ceee 100644
--- a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdyCoarse_ae1873() {
-  float3 res =   dfdy(float3());
+  float3 res = dfdy(float3());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.msl b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.msl
index bc48a42..cfbdf5d 100644
--- a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdyFine_1fb7ab() {
-  float3 res =   dfdy(float3());
+  float3 res = dfdy(float3());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.msl b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.msl
index a30960e..38d8c93 100644
--- a/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdyFine_6eb673() {
-  float res =   dfdy(1.0f);
+  float res = dfdy(1.0f);
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.msl b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.msl
index 93ecdf6..b728bff 100644
--- a/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdyFine_d0a648() {
-  float4 res =   dfdy(float4());
+  float4 res = dfdy(float4());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.msl b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.msl
index a8dcab8..a2e88c9 100644
--- a/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.msl
+++ b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dpdyFine_df33aa() {
-  float2 res =   dfdy(float2());
+  float2 res = dfdy(float2());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/exp/0f70eb.wgsl.expected.msl b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.msl
index 53549b7..022ea5d 100644
--- a/test/intrinsics/gen/exp/0f70eb.wgsl.expected.msl
+++ b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void exp_0f70eb() {
-  float4 res =   exp(float4());
+  float4 res = exp(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/exp/1951e7.wgsl.expected.msl b/test/intrinsics/gen/exp/1951e7.wgsl.expected.msl
index 726f80d..2123f97 100644
--- a/test/intrinsics/gen/exp/1951e7.wgsl.expected.msl
+++ b/test/intrinsics/gen/exp/1951e7.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void exp_1951e7() {
-  float2 res =   exp(float2());
+  float2 res = exp(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/exp/771fd2.wgsl.expected.msl b/test/intrinsics/gen/exp/771fd2.wgsl.expected.msl
index 0a161db..345a5f8 100644
--- a/test/intrinsics/gen/exp/771fd2.wgsl.expected.msl
+++ b/test/intrinsics/gen/exp/771fd2.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void exp_771fd2() {
-  float res =   exp(1.0f);
+  float res = exp(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/exp/d98450.wgsl.expected.msl b/test/intrinsics/gen/exp/d98450.wgsl.expected.msl
index 1ec8727..073deec 100644
--- a/test/intrinsics/gen/exp/d98450.wgsl.expected.msl
+++ b/test/intrinsics/gen/exp/d98450.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void exp_d98450() {
-  float3 res =   exp(float3());
+  float3 res = exp(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/exp2/1f8680.wgsl.expected.msl b/test/intrinsics/gen/exp2/1f8680.wgsl.expected.msl
index 057b984..4929bd0 100644
--- a/test/intrinsics/gen/exp2/1f8680.wgsl.expected.msl
+++ b/test/intrinsics/gen/exp2/1f8680.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void exp2_1f8680() {
-  float3 res =   exp2(float3());
+  float3 res = exp2(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.msl b/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.msl
index ed2faac..d727ef8 100644
--- a/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.msl
+++ b/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void exp2_a9d0a7() {
-  float4 res =   exp2(float4());
+  float4 res = exp2(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/exp2/d6777c.wgsl.expected.msl b/test/intrinsics/gen/exp2/d6777c.wgsl.expected.msl
index 6149c4d..71e0186 100644
--- a/test/intrinsics/gen/exp2/d6777c.wgsl.expected.msl
+++ b/test/intrinsics/gen/exp2/d6777c.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void exp2_d6777c() {
-  float2 res =   exp2(float2());
+  float2 res = exp2(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/exp2/dea523.wgsl.expected.msl b/test/intrinsics/gen/exp2/dea523.wgsl.expected.msl
index 491945c..7eba951 100644
--- a/test/intrinsics/gen/exp2/dea523.wgsl.expected.msl
+++ b/test/intrinsics/gen/exp2/dea523.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void exp2_dea523() {
-  float res =   exp2(1.0f);
+  float res = exp2(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.msl b/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.msl
index fcd07b6..8e29e89 100644
--- a/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.msl
+++ b/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void faceForward_5afbd5() {
-  float3 res =   faceforward(float3(), float3(), float3());
+  float3 res = faceforward(float3(), float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.msl b/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.msl
index 1048b00..1ca663a 100644
--- a/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.msl
+++ b/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void faceForward_b316e5() {
-  float4 res =   faceforward(float4(), float4(), float4());
+  float4 res = faceforward(float4(), float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.msl b/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.msl
index ca8e6ef..0136e3a 100644
--- a/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.msl
+++ b/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void faceForward_e6908b() {
-  float2 res =   faceforward(float2(), float2(), float2());
+  float2 res = faceforward(float2(), float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/floor/3bccc4.wgsl.expected.msl b/test/intrinsics/gen/floor/3bccc4.wgsl.expected.msl
index 7802674..50ec31e 100644
--- a/test/intrinsics/gen/floor/3bccc4.wgsl.expected.msl
+++ b/test/intrinsics/gen/floor/3bccc4.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void floor_3bccc4() {
-  float4 res =   floor(float4());
+  float4 res = floor(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.msl b/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.msl
index 36b78f8..f50587a 100644
--- a/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.msl
+++ b/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void floor_5fc9ac() {
-  float2 res =   floor(float2());
+  float2 res = floor(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/floor/60d7ea.wgsl.expected.msl b/test/intrinsics/gen/floor/60d7ea.wgsl.expected.msl
index 95b42aa..8ed07d4 100644
--- a/test/intrinsics/gen/floor/60d7ea.wgsl.expected.msl
+++ b/test/intrinsics/gen/floor/60d7ea.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void floor_60d7ea() {
-  float3 res =   floor(float3());
+  float3 res = floor(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/floor/66f154.wgsl.expected.msl b/test/intrinsics/gen/floor/66f154.wgsl.expected.msl
index c93a90e..a5b9f9d 100644
--- a/test/intrinsics/gen/floor/66f154.wgsl.expected.msl
+++ b/test/intrinsics/gen/floor/66f154.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void floor_66f154() {
-  float res =   floor(1.0f);
+  float res = floor(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/fma/26a7a9.wgsl.expected.msl b/test/intrinsics/gen/fma/26a7a9.wgsl.expected.msl
index 2acc8ac..f9349e9 100644
--- a/test/intrinsics/gen/fma/26a7a9.wgsl.expected.msl
+++ b/test/intrinsics/gen/fma/26a7a9.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void fma_26a7a9() {
-  float2 res =   fma(float2(), float2(), float2());
+  float2 res = fma(float2(), float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/fma/6a3283.wgsl.expected.msl b/test/intrinsics/gen/fma/6a3283.wgsl.expected.msl
index 962630d..f964054 100644
--- a/test/intrinsics/gen/fma/6a3283.wgsl.expected.msl
+++ b/test/intrinsics/gen/fma/6a3283.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void fma_6a3283() {
-  float4 res =   fma(float4(), float4(), float4());
+  float4 res = fma(float4(), float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/fma/c10ba3.wgsl.expected.msl b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.msl
index b0409f3..0f9a195 100644
--- a/test/intrinsics/gen/fma/c10ba3.wgsl.expected.msl
+++ b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void fma_c10ba3() {
-  float res =   fma(1.0f, 1.0f, 1.0f);
+  float res = fma(1.0f, 1.0f, 1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/fma/e17c5c.wgsl.expected.msl b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.msl
index c40dff0..e606075 100644
--- a/test/intrinsics/gen/fma/e17c5c.wgsl.expected.msl
+++ b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void fma_e17c5c() {
-  float3 res =   fma(float3(), float3(), float3());
+  float3 res = fma(float3(), float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.msl b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.msl
index d4d52b2..b786696 100644
--- a/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.msl
+++ b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void fract_8bc1e9() {
-  float4 res =   fract(float4());
+  float4 res = fract(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/fract/943cb1.wgsl.expected.msl b/test/intrinsics/gen/fract/943cb1.wgsl.expected.msl
index 1c89583..c8596ab 100644
--- a/test/intrinsics/gen/fract/943cb1.wgsl.expected.msl
+++ b/test/intrinsics/gen/fract/943cb1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void fract_943cb1() {
-  float2 res =   fract(float2());
+  float2 res = fract(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/fract/a49758.wgsl.expected.msl b/test/intrinsics/gen/fract/a49758.wgsl.expected.msl
index 400fc0a..1dbebec 100644
--- a/test/intrinsics/gen/fract/a49758.wgsl.expected.msl
+++ b/test/intrinsics/gen/fract/a49758.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void fract_a49758() {
-  float3 res =   fract(float3());
+  float3 res = fract(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/fract/fa5c71.wgsl.expected.msl b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.msl
index 5d6f2fc..03f3ed2 100644
--- a/test/intrinsics/gen/fract/fa5c71.wgsl.expected.msl
+++ b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void fract_fa5c71() {
-  float res =   fract(1.0f);
+  float res = fract(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.msl b/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.msl
index 28a57ce..671ca48 100644
--- a/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidth_5d1b39() {
-  float3 res =   fwidth(float3());
+  float3 res = fwidth(float3());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.msl b/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.msl
index 303cfba..2dce76c 100644
--- a/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidth_b83ebb() {
-  float2 res =   fwidth(float2());
+  float2 res = fwidth(float2());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.msl b/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.msl
index 16b46fc..076783c 100644
--- a/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidth_d2ab9a() {
-  float4 res =   fwidth(float4());
+  float4 res = fwidth(float4());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.msl b/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.msl
index 21b2f40..3af325a 100644
--- a/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidth_df38ef() {
-  float res =   fwidth(1.0f);
+  float res = fwidth(1.0f);
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.msl b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.msl
index 82190f3..31ad6a1 100644
--- a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidthCoarse_159c8a() {
-  float res =   fwidth(1.0f);
+  float res = fwidth(1.0f);
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.msl b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.msl
index 621c237..b2f9f1e 100644
--- a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidthCoarse_1e59d9() {
-  float3 res =   fwidth(float3());
+  float3 res = fwidth(float3());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.msl b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.msl
index 29dba71..88298dd 100644
--- a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidthCoarse_4e4fc4() {
-  float4 res =   fwidth(float4());
+  float4 res = fwidth(float4());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.msl b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.msl
index cfd9703..63409de 100644
--- a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidthCoarse_e653f7() {
-  float2 res =   fwidth(float2());
+  float2 res = fwidth(float2());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.msl b/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.msl
index aa1d73d..ba43d3c 100644
--- a/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidthFine_523fdc() {
-  float3 res =   fwidth(float3());
+  float3 res = fwidth(float3());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.msl b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.msl
index b7c53d9..7d756f8 100644
--- a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidthFine_68f4ef() {
-  float4 res =   fwidth(float4());
+  float4 res = fwidth(float4());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.msl b/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.msl
index 5a98fd6..33102d3 100644
--- a/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidthFine_f1742d() {
-  float res =   fwidth(1.0f);
+  float res = fwidth(1.0f);
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.msl b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.msl
index 7ebd710..b7225af 100644
--- a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.msl
+++ b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fwidthFine_ff6aa0() {
-  float2 res =   fwidth(float2());
+  float2 res = fwidth(float2());
 }
 
 fragment void fragment_main() {
diff --git a/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.msl b/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.msl
index 0ff2cd0..07861bc 100644
--- a/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.msl
+++ b/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void inverseSqrt_84407e() {
-  float res =   rsqrt(1.0f);
+  float res = rsqrt(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.msl b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.msl
index beeb2cb..fdc64f9 100644
--- a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.msl
+++ b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void inverseSqrt_8f2bd2() {
-  float2 res =   rsqrt(float2());
+  float2 res = rsqrt(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.msl b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.msl
index da0d971..65ebe3a 100644
--- a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.msl
+++ b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void inverseSqrt_b197b1() {
-  float3 res =   rsqrt(float3());
+  float3 res = rsqrt(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.msl b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.msl
index 07deeaad..891de7e 100644
--- a/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.msl
+++ b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void inverseSqrt_c22347() {
-  float4 res =   rsqrt(float4());
+  float4 res = rsqrt(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.msl b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.msl
index be2ba66..d6adc3b 100644
--- a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.msl
+++ b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isFinite_34d32b() {
-  bool2 res =   isfinite(float2());
+  bool2 res = isfinite(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.msl b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.msl
index fc6d588..7b88dba 100644
--- a/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.msl
+++ b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isFinite_426f9f() {
-  bool res =   isfinite(1.0f);
+  bool res = isfinite(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.msl b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.msl
index 9ecb4a4..c0f197b 100644
--- a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.msl
+++ b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isFinite_8a23ad() {
-  bool3 res =   isfinite(float3());
+  bool3 res = isfinite(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.msl b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.msl
index 0cd88d9..775a799 100644
--- a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.msl
+++ b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isFinite_f31987() {
-  bool4 res =   isfinite(float4());
+  bool4 res = isfinite(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.msl b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.msl
index 39d8aa9..61fdda6 100644
--- a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.msl
+++ b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isInf_666f2a() {
-  bool3 res =   isinf(float3());
+  bool3 res = isinf(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.msl b/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.msl
index 6cec857..0850ae5 100644
--- a/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.msl
+++ b/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isInf_7bd98f() {
-  bool res =   isinf(1.0f);
+  bool res = isinf(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.msl b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.msl
index e8636d9..0362bce 100644
--- a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.msl
+++ b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isInf_7e81b5() {
-  bool4 res =   isinf(float4());
+  bool4 res = isinf(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.msl b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.msl
index d423213..e5ed9f2 100644
--- a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.msl
+++ b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isInf_a46d6f() {
-  bool2 res =   isinf(float2());
+  bool2 res = isinf(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isNan/1280ab.wgsl.expected.msl b/test/intrinsics/gen/isNan/1280ab.wgsl.expected.msl
index aa45bd0..64b9ace 100644
--- a/test/intrinsics/gen/isNan/1280ab.wgsl.expected.msl
+++ b/test/intrinsics/gen/isNan/1280ab.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isNan_1280ab() {
-  bool3 res =   isnan(float3());
+  bool3 res = isnan(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isNan/4d280d.wgsl.expected.msl b/test/intrinsics/gen/isNan/4d280d.wgsl.expected.msl
index 28fc710..b8a2e22 100644
--- a/test/intrinsics/gen/isNan/4d280d.wgsl.expected.msl
+++ b/test/intrinsics/gen/isNan/4d280d.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isNan_4d280d() {
-  bool4 res =   isnan(float4());
+  bool4 res = isnan(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.msl b/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.msl
index 12439ba..932d0cc 100644
--- a/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.msl
+++ b/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isNan_67ecd3() {
-  bool2 res =   isnan(float2());
+  bool2 res = isnan(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isNan/e4978e.wgsl.expected.msl b/test/intrinsics/gen/isNan/e4978e.wgsl.expected.msl
index cad8c71..c94a9af 100644
--- a/test/intrinsics/gen/isNan/e4978e.wgsl.expected.msl
+++ b/test/intrinsics/gen/isNan/e4978e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isNan_e4978e() {
-  bool res =   isnan(1.0f);
+  bool res = isnan(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.msl b/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.msl
index 67595de..b086c06 100644
--- a/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.msl
+++ b/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isNormal_863dcd() {
-  bool4 res =   isnormal(float4());
+  bool4 res = isnormal(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.msl b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.msl
index 898dd73..6bcb392 100644
--- a/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.msl
+++ b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isNormal_b00ab1() {
-  bool2 res =   isnormal(float2());
+  bool2 res = isnormal(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.msl b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.msl
index e7bac05..f3e7527 100644
--- a/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.msl
+++ b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isNormal_c286b7() {
-  bool3 res =   isnormal(float3());
+  bool3 res = isnormal(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.msl b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.msl
index 2df6a24..e5b54cb 100644
--- a/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.msl
+++ b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void isNormal_c6e880() {
-  bool res =   isnormal(1.0f);
+  bool res = isnormal(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.msl b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.msl
index 12ec936..ad04640 100644
--- a/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.msl
+++ b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void ldexp_a31cdc() {
-  float3 res =   ldexp(float3(), int3());
+  float3 res = ldexp(float3(), int3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/ldexp/abd718.wgsl.expected.msl b/test/intrinsics/gen/ldexp/abd718.wgsl.expected.msl
index 2fa4009..ca0e3a5 100644
--- a/test/intrinsics/gen/ldexp/abd718.wgsl.expected.msl
+++ b/test/intrinsics/gen/ldexp/abd718.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void ldexp_abd718() {
-  float2 res =   ldexp(float2(), int2());
+  float2 res = ldexp(float2(), int2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.msl b/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.msl
index c8a2dc9..5a3b811 100644
--- a/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.msl
+++ b/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void ldexp_cc9cde() {
-  float4 res =   ldexp(float4(), int4());
+  float4 res = ldexp(float4(), int4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.msl b/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.msl
index cc7fbc1..650cce2 100644
--- a/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.msl
+++ b/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void ldexp_db8b49() {
-  float res =   ldexp(1.0f, 1);
+  float res = ldexp(1.0f, 1);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/ldexp/f54ff2.wgsl.expected.msl b/test/intrinsics/gen/ldexp/f54ff2.wgsl.expected.msl
index 9cef87e..e861389 100644
--- a/test/intrinsics/gen/ldexp/f54ff2.wgsl.expected.msl
+++ b/test/intrinsics/gen/ldexp/f54ff2.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void ldexp_f54ff2() {
-  float res =   ldexp(1.0f, 1u);
+  float res = ldexp(1.0f, 1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/length/056071.wgsl.expected.msl b/test/intrinsics/gen/length/056071.wgsl.expected.msl
index bddb507..fb40a90 100644
--- a/test/intrinsics/gen/length/056071.wgsl.expected.msl
+++ b/test/intrinsics/gen/length/056071.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void length_056071() {
-  float res =   length(float3());
+  float res = length(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/length/afde8b.wgsl.expected.msl b/test/intrinsics/gen/length/afde8b.wgsl.expected.msl
index 1902264..6587bc0 100644
--- a/test/intrinsics/gen/length/afde8b.wgsl.expected.msl
+++ b/test/intrinsics/gen/length/afde8b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void length_afde8b() {
-  float res =   length(float2());
+  float res = length(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/length/becebf.wgsl.expected.msl b/test/intrinsics/gen/length/becebf.wgsl.expected.msl
index 9cd6341..4fa8cd2 100644
--- a/test/intrinsics/gen/length/becebf.wgsl.expected.msl
+++ b/test/intrinsics/gen/length/becebf.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void length_becebf() {
-  float res =   length(float4());
+  float res = length(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/log/3da25a.wgsl.expected.msl b/test/intrinsics/gen/log/3da25a.wgsl.expected.msl
index 87551df..c5e7404 100644
--- a/test/intrinsics/gen/log/3da25a.wgsl.expected.msl
+++ b/test/intrinsics/gen/log/3da25a.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void log_3da25a() {
-  float4 res =   log(float4());
+  float4 res = log(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/log/7114a6.wgsl.expected.msl b/test/intrinsics/gen/log/7114a6.wgsl.expected.msl
index ca21705..72b940a 100644
--- a/test/intrinsics/gen/log/7114a6.wgsl.expected.msl
+++ b/test/intrinsics/gen/log/7114a6.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void log_7114a6() {
-  float res =   log(1.0f);
+  float res = log(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/log/b2ce28.wgsl.expected.msl b/test/intrinsics/gen/log/b2ce28.wgsl.expected.msl
index 43777d4..576f8af 100644
--- a/test/intrinsics/gen/log/b2ce28.wgsl.expected.msl
+++ b/test/intrinsics/gen/log/b2ce28.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void log_b2ce28() {
-  float2 res =   log(float2());
+  float2 res = log(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/log/f4c570.wgsl.expected.msl b/test/intrinsics/gen/log/f4c570.wgsl.expected.msl
index 6344246..a89a44b 100644
--- a/test/intrinsics/gen/log/f4c570.wgsl.expected.msl
+++ b/test/intrinsics/gen/log/f4c570.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void log_f4c570() {
-  float3 res =   log(float3());
+  float3 res = log(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/log2/4036ed.wgsl.expected.msl b/test/intrinsics/gen/log2/4036ed.wgsl.expected.msl
index 49dc07a..a5303eb 100644
--- a/test/intrinsics/gen/log2/4036ed.wgsl.expected.msl
+++ b/test/intrinsics/gen/log2/4036ed.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void log2_4036ed() {
-  float res =   log2(1.0f);
+  float res = log2(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/log2/902988.wgsl.expected.msl b/test/intrinsics/gen/log2/902988.wgsl.expected.msl
index d7828e6..292fbee 100644
--- a/test/intrinsics/gen/log2/902988.wgsl.expected.msl
+++ b/test/intrinsics/gen/log2/902988.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void log2_902988() {
-  float4 res =   log2(float4());
+  float4 res = log2(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/log2/adb233.wgsl.expected.msl b/test/intrinsics/gen/log2/adb233.wgsl.expected.msl
index ee68aab..7ccc7f4 100644
--- a/test/intrinsics/gen/log2/adb233.wgsl.expected.msl
+++ b/test/intrinsics/gen/log2/adb233.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void log2_adb233() {
-  float3 res =   log2(float3());
+  float3 res = log2(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/log2/aea659.wgsl.expected.msl b/test/intrinsics/gen/log2/aea659.wgsl.expected.msl
index 4e44b11..f603d99 100644
--- a/test/intrinsics/gen/log2/aea659.wgsl.expected.msl
+++ b/test/intrinsics/gen/log2/aea659.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void log2_aea659() {
-  float2 res =   log2(float2());
+  float2 res = log2(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/0c0aae.wgsl.expected.msl b/test/intrinsics/gen/max/0c0aae.wgsl.expected.msl
index 9ebf54a..2c07924 100644
--- a/test/intrinsics/gen/max/0c0aae.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/0c0aae.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_0c0aae() {
-  uint res =   max(1u, 1u);
+  uint res = max(1u, 1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/25eafe.wgsl.expected.msl b/test/intrinsics/gen/max/25eafe.wgsl.expected.msl
index b8eca1d..ff0ddf5 100644
--- a/test/intrinsics/gen/max/25eafe.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/25eafe.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_25eafe() {
-  int3 res =   max(int3(), int3());
+  int3 res = max(int3(), int3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/320815.wgsl.expected.msl b/test/intrinsics/gen/max/320815.wgsl.expected.msl
index 9ecdcb9..4a75eea 100644
--- a/test/intrinsics/gen/max/320815.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/320815.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_320815() {
-  uint2 res =   max(uint2(), uint2());
+  uint2 res = max(uint2(), uint2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/44a39d.wgsl.expected.msl b/test/intrinsics/gen/max/44a39d.wgsl.expected.msl
index ba3fcf1..1ed6073 100644
--- a/test/intrinsics/gen/max/44a39d.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/44a39d.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_44a39d() {
-  float res =   fmax(1.0f, 1.0f);
+  float res = fmax(1.0f, 1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/453e04.wgsl.expected.msl b/test/intrinsics/gen/max/453e04.wgsl.expected.msl
index d8b12c6..8d03301 100644
--- a/test/intrinsics/gen/max/453e04.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/453e04.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_453e04() {
-  uint4 res =   max(uint4(), uint4());
+  uint4 res = max(uint4(), uint4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/462050.wgsl.expected.msl b/test/intrinsics/gen/max/462050.wgsl.expected.msl
index ef47fd2..be9f1c6 100644
--- a/test/intrinsics/gen/max/462050.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/462050.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_462050() {
-  float2 res =   fmax(float2(), float2());
+  float2 res = fmax(float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/4883ac.wgsl.expected.msl b/test/intrinsics/gen/max/4883ac.wgsl.expected.msl
index fc31548..42a266f 100644
--- a/test/intrinsics/gen/max/4883ac.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/4883ac.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_4883ac() {
-  float3 res =   fmax(float3(), float3());
+  float3 res = fmax(float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/85e6bc.wgsl.expected.msl b/test/intrinsics/gen/max/85e6bc.wgsl.expected.msl
index 8606e9a..0728359 100644
--- a/test/intrinsics/gen/max/85e6bc.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/85e6bc.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_85e6bc() {
-  int4 res =   max(int4(), int4());
+  int4 res = max(int4(), int4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/a93419.wgsl.expected.msl b/test/intrinsics/gen/max/a93419.wgsl.expected.msl
index 056c4b8..edf5f84 100644
--- a/test/intrinsics/gen/max/a93419.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/a93419.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_a93419() {
-  float4 res =   fmax(float4(), float4());
+  float4 res = fmax(float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/b1b73a.wgsl.expected.msl b/test/intrinsics/gen/max/b1b73a.wgsl.expected.msl
index 3dfa68c..401b97f 100644
--- a/test/intrinsics/gen/max/b1b73a.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/b1b73a.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_b1b73a() {
-  uint3 res =   max(uint3(), uint3());
+  uint3 res = max(uint3(), uint3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/ce7c30.wgsl.expected.msl b/test/intrinsics/gen/max/ce7c30.wgsl.expected.msl
index 4f300ff..041e137 100644
--- a/test/intrinsics/gen/max/ce7c30.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/ce7c30.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_ce7c30() {
-  int res =   max(1, 1);
+  int res = max(1, 1);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/max/e8192f.wgsl.expected.msl b/test/intrinsics/gen/max/e8192f.wgsl.expected.msl
index e35eb46..5c158fa 100644
--- a/test/intrinsics/gen/max/e8192f.wgsl.expected.msl
+++ b/test/intrinsics/gen/max/e8192f.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void max_e8192f() {
-  int2 res =   max(int2(), int2());
+  int2 res = max(int2(), int2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/03c7e3.wgsl.expected.msl b/test/intrinsics/gen/min/03c7e3.wgsl.expected.msl
index 7ae789a..0d57026 100644
--- a/test/intrinsics/gen/min/03c7e3.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/03c7e3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_03c7e3() {
-  int2 res =   min(int2(), int2());
+  int2 res = min(int2(), int2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/0dc614.wgsl.expected.msl b/test/intrinsics/gen/min/0dc614.wgsl.expected.msl
index c50267d..f179d77 100644
--- a/test/intrinsics/gen/min/0dc614.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/0dc614.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_0dc614() {
-  uint4 res =   min(uint4(), uint4());
+  uint4 res = min(uint4(), uint4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/3941e1.wgsl.expected.msl b/test/intrinsics/gen/min/3941e1.wgsl.expected.msl
index d7b4550..cc0012f 100644
--- a/test/intrinsics/gen/min/3941e1.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/3941e1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_3941e1() {
-  int4 res =   min(int4(), int4());
+  int4 res = min(int4(), int4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/46c5d3.wgsl.expected.msl b/test/intrinsics/gen/min/46c5d3.wgsl.expected.msl
index 60276ce..5ab20e3 100644
--- a/test/intrinsics/gen/min/46c5d3.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/46c5d3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_46c5d3() {
-  uint res =   min(1u, 1u);
+  uint res = min(1u, 1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/82b28f.wgsl.expected.msl b/test/intrinsics/gen/min/82b28f.wgsl.expected.msl
index 7bd80b5..5b2913c 100644
--- a/test/intrinsics/gen/min/82b28f.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/82b28f.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_82b28f() {
-  uint2 res =   min(uint2(), uint2());
+  uint2 res = min(uint2(), uint2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/93cfc4.wgsl.expected.msl b/test/intrinsics/gen/min/93cfc4.wgsl.expected.msl
index 97dc1ce..f102283 100644
--- a/test/intrinsics/gen/min/93cfc4.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/93cfc4.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_93cfc4() {
-  float3 res =   fmin(float3(), float3());
+  float3 res = fmin(float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/a45171.wgsl.expected.msl b/test/intrinsics/gen/min/a45171.wgsl.expected.msl
index 42a9bf7..3f9bfb1 100644
--- a/test/intrinsics/gen/min/a45171.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/a45171.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_a45171() {
-  int3 res =   min(int3(), int3());
+  int3 res = min(int3(), int3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/aa28ad.wgsl.expected.msl b/test/intrinsics/gen/min/aa28ad.wgsl.expected.msl
index 7959144..64cfee3 100644
--- a/test/intrinsics/gen/min/aa28ad.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/aa28ad.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_aa28ad() {
-  float2 res =   fmin(float2(), float2());
+  float2 res = fmin(float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/af326d.wgsl.expected.msl b/test/intrinsics/gen/min/af326d.wgsl.expected.msl
index d0e009b..c8d4c23 100644
--- a/test/intrinsics/gen/min/af326d.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/af326d.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_af326d() {
-  float res =   fmin(1.0f, 1.0f);
+  float res = fmin(1.0f, 1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/c70bb7.wgsl.expected.msl b/test/intrinsics/gen/min/c70bb7.wgsl.expected.msl
index 09c6b44..c1968a2 100644
--- a/test/intrinsics/gen/min/c70bb7.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/c70bb7.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_c70bb7() {
-  uint3 res =   min(uint3(), uint3());
+  uint3 res = min(uint3(), uint3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/c73147.wgsl.expected.msl b/test/intrinsics/gen/min/c73147.wgsl.expected.msl
index 7ec0d47..45fd9b0 100644
--- a/test/intrinsics/gen/min/c73147.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/c73147.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_c73147() {
-  int res =   min(1, 1);
+  int res = min(1, 1);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/min/c76fa6.wgsl.expected.msl b/test/intrinsics/gen/min/c76fa6.wgsl.expected.msl
index 015d645..bed1dc6 100644
--- a/test/intrinsics/gen/min/c76fa6.wgsl.expected.msl
+++ b/test/intrinsics/gen/min/c76fa6.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void min_c76fa6() {
-  float4 res =   fmin(float4(), float4());
+  float4 res = fmin(float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/mix/0c8c33.wgsl.expected.msl b/test/intrinsics/gen/mix/0c8c33.wgsl.expected.msl
index 6cc23a6..2e50a70 100644
--- a/test/intrinsics/gen/mix/0c8c33.wgsl.expected.msl
+++ b/test/intrinsics/gen/mix/0c8c33.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void mix_0c8c33() {
-  float3 res =   mix(float3(), float3(), float3());
+  float3 res = mix(float3(), float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.msl b/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.msl
index 9e549fa..98d7121 100644
--- a/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.msl
+++ b/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void mix_4f0b5e() {
-  float res =   mix(1.0f, 1.0f, 1.0f);
+  float res = mix(1.0f, 1.0f, 1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/mix/6f8adc.wgsl.expected.msl b/test/intrinsics/gen/mix/6f8adc.wgsl.expected.msl
index 34ac943..d205533 100644
--- a/test/intrinsics/gen/mix/6f8adc.wgsl.expected.msl
+++ b/test/intrinsics/gen/mix/6f8adc.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void mix_6f8adc() {
-  float2 res =   mix(float2(), float2(), float2());
+  float2 res = mix(float2(), float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/mix/c37ede.wgsl.expected.msl b/test/intrinsics/gen/mix/c37ede.wgsl.expected.msl
index 246ff75..c4434f9 100644
--- a/test/intrinsics/gen/mix/c37ede.wgsl.expected.msl
+++ b/test/intrinsics/gen/mix/c37ede.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void mix_c37ede() {
-  float4 res =   mix(float4(), float4(), float4());
+  float4 res = mix(float4(), float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.msl b/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.msl
index 39c6462..3886bbd 100644
--- a/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.msl
+++ b/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void normalize_64d8c0() {
-  float3 res =   normalize(float3());
+  float3 res = normalize(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.msl b/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.msl
index 2dc22f3..85b9339 100644
--- a/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.msl
+++ b/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void normalize_9a0aab() {
-  float4 res =   normalize(float4());
+  float4 res = normalize(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.msl b/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.msl
index 7e5afe0..09c836c 100644
--- a/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.msl
+++ b/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void normalize_fc2ef1() {
-  float2 res =   normalize(float2());
+  float2 res = normalize(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.msl b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.msl
index 05f90db..eaf483e 100644
--- a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.msl
+++ b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void pack2x16float_0e97b3() {
-  uint res =   as_type<uint>(half2(float2()));
+  uint res = as_type<uint>(half2(float2()));
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.msl b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.msl
index 7e91e3b..8acd8d9 100644
--- a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.msl
+++ b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void pack2x16snorm_6c169b() {
-  uint res =   pack_float_to_snorm2x16(float2());
+  uint res = pack_float_to_snorm2x16(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.msl b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.msl
index 5f507aa..0c21bdc 100644
--- a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.msl
+++ b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void pack2x16unorm_0f08e4() {
-  uint res =   pack_float_to_unorm2x16(float2());
+  uint res = pack_float_to_unorm2x16(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.msl b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.msl
index f4311c9..e07cd5d 100644
--- a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.msl
+++ b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void pack4x8snorm_4d22e7() {
-  uint res =   pack_float_to_snorm4x8(float4());
+  uint res = pack_float_to_snorm4x8(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.msl b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.msl
index 6edb56f..91aabb4 100644
--- a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.msl
+++ b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void pack4x8unorm_95c456() {
-  uint res =   pack_float_to_unorm4x8(float4());
+  uint res = pack_float_to_unorm4x8(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/pow/04a908.wgsl.expected.msl b/test/intrinsics/gen/pow/04a908.wgsl.expected.msl
index 73909be..90e90cd 100644
--- a/test/intrinsics/gen/pow/04a908.wgsl.expected.msl
+++ b/test/intrinsics/gen/pow/04a908.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void pow_04a908() {
-  float4 res =   pow(float4(), float4());
+  float4 res = pow(float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/pow/46e029.wgsl.expected.msl b/test/intrinsics/gen/pow/46e029.wgsl.expected.msl
index d1bd4b9..84e867b 100644
--- a/test/intrinsics/gen/pow/46e029.wgsl.expected.msl
+++ b/test/intrinsics/gen/pow/46e029.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void pow_46e029() {
-  float res =   pow(1.0f, 1.0f);
+  float res = pow(1.0f, 1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/pow/4a46c9.wgsl.expected.msl b/test/intrinsics/gen/pow/4a46c9.wgsl.expected.msl
index 6765ee7..caebacf 100644
--- a/test/intrinsics/gen/pow/4a46c9.wgsl.expected.msl
+++ b/test/intrinsics/gen/pow/4a46c9.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void pow_4a46c9() {
-  float3 res =   pow(float3(), float3());
+  float3 res = pow(float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/pow/e60ea5.wgsl.expected.msl b/test/intrinsics/gen/pow/e60ea5.wgsl.expected.msl
index 7e1c6f7..7bb9fc4 100644
--- a/test/intrinsics/gen/pow/e60ea5.wgsl.expected.msl
+++ b/test/intrinsics/gen/pow/e60ea5.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void pow_e60ea5() {
-  float2 res =   pow(float2(), float2());
+  float2 res = pow(float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reflect/05357e.wgsl.expected.msl b/test/intrinsics/gen/reflect/05357e.wgsl.expected.msl
index 10fb0cb..b61d634 100644
--- a/test/intrinsics/gen/reflect/05357e.wgsl.expected.msl
+++ b/test/intrinsics/gen/reflect/05357e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reflect_05357e() {
-  float4 res =   reflect(float4(), float4());
+  float4 res = reflect(float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reflect/b61e10.wgsl.expected.msl b/test/intrinsics/gen/reflect/b61e10.wgsl.expected.msl
index e8c412a..c10208d 100644
--- a/test/intrinsics/gen/reflect/b61e10.wgsl.expected.msl
+++ b/test/intrinsics/gen/reflect/b61e10.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reflect_b61e10() {
-  float2 res =   reflect(float2(), float2());
+  float2 res = reflect(float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.msl b/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.msl
index c0b9c40..9032eca 100644
--- a/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.msl
+++ b/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reflect_f47fdb() {
-  float3 res =   reflect(float3(), float3());
+  float3 res = reflect(float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reverseBits/222177.wgsl.expected.msl b/test/intrinsics/gen/reverseBits/222177.wgsl.expected.msl
index 210f3b3..525e9d1 100644
--- a/test/intrinsics/gen/reverseBits/222177.wgsl.expected.msl
+++ b/test/intrinsics/gen/reverseBits/222177.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reverseBits_222177() {
-  int2 res =   reverse_bits(int2());
+  int2 res = reverse_bits(int2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.msl b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.msl
index 2d0b471..8aee00a 100644
--- a/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.msl
+++ b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reverseBits_35fea9() {
-  uint4 res =   reverse_bits(uint4());
+  uint4 res = reverse_bits(uint4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.msl b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.msl
index 5dde8a3..966cfe2 100644
--- a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.msl
+++ b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reverseBits_4dbd6f() {
-  int4 res =   reverse_bits(int4());
+  int4 res = reverse_bits(int4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.msl b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.msl
index 5621f10..ed2c1db 100644
--- a/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.msl
+++ b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reverseBits_7c4269() {
-  int res =   reverse_bits(1);
+  int res = reverse_bits(1);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.msl b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.msl
index 0158aed..72fbdb0 100644
--- a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.msl
+++ b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reverseBits_a6ccd4() {
-  uint3 res =   reverse_bits(uint3());
+  uint3 res = reverse_bits(uint3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.msl b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.msl
index b8623bc..442fcae 100644
--- a/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.msl
+++ b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reverseBits_c21bc1() {
-  int3 res =   reverse_bits(int3());
+  int3 res = reverse_bits(int3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.msl b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.msl
index ba544b7..069f1d2 100644
--- a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.msl
+++ b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reverseBits_e1f4c1() {
-  uint2 res =   reverse_bits(uint2());
+  uint2 res = reverse_bits(uint2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.msl b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.msl
index bc9b4af..14abcb8 100644
--- a/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.msl
+++ b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void reverseBits_e31adf() {
-  uint res =   reverse_bits(1u);
+  uint res = reverse_bits(1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/round/106c0b.wgsl.expected.msl b/test/intrinsics/gen/round/106c0b.wgsl.expected.msl
index 2ae782a..280de5d 100644
--- a/test/intrinsics/gen/round/106c0b.wgsl.expected.msl
+++ b/test/intrinsics/gen/round/106c0b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void round_106c0b() {
-  float4 res =   rint(float4());
+  float4 res = rint(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/round/1c7897.wgsl.expected.msl b/test/intrinsics/gen/round/1c7897.wgsl.expected.msl
index 608a2fe..d9c7757 100644
--- a/test/intrinsics/gen/round/1c7897.wgsl.expected.msl
+++ b/test/intrinsics/gen/round/1c7897.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void round_1c7897() {
-  float3 res =   rint(float3());
+  float3 res = rint(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/round/52c84d.wgsl.expected.msl b/test/intrinsics/gen/round/52c84d.wgsl.expected.msl
index b9fc56f..06d2683 100644
--- a/test/intrinsics/gen/round/52c84d.wgsl.expected.msl
+++ b/test/intrinsics/gen/round/52c84d.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void round_52c84d() {
-  float2 res =   rint(float2());
+  float2 res = rint(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/round/9edc38.wgsl.expected.msl b/test/intrinsics/gen/round/9edc38.wgsl.expected.msl
index 0361b22..f970449 100644
--- a/test/intrinsics/gen/round/9edc38.wgsl.expected.msl
+++ b/test/intrinsics/gen/round/9edc38.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void round_9edc38() {
-  float res =   rint(1.0f);
+  float res = rint(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/00b848.wgsl.expected.msl b/test/intrinsics/gen/select/00b848.wgsl.expected.msl
index 2b431a8..4541cbd 100644
--- a/test/intrinsics/gen/select/00b848.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/00b848.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_00b848() {
-  int2 res =   select(int2(), int2(), bool2());
+  int2 res = select(int2(), int2(), bool2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/01e2cd.wgsl.expected.msl b/test/intrinsics/gen/select/01e2cd.wgsl.expected.msl
index 9f29574..57e3844 100644
--- a/test/intrinsics/gen/select/01e2cd.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/01e2cd.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_01e2cd() {
-  int3 res =   select(int3(), int3(), bool3());
+  int3 res = select(int3(), int3(), bool3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/1e960b.wgsl.expected.msl b/test/intrinsics/gen/select/1e960b.wgsl.expected.msl
index 172ac62..ed4c2d6 100644
--- a/test/intrinsics/gen/select/1e960b.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/1e960b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_1e960b() {
-  uint2 res =   select(uint2(), uint2(), bool2());
+  uint2 res = select(uint2(), uint2(), bool2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/266aff.wgsl.expected.msl b/test/intrinsics/gen/select/266aff.wgsl.expected.msl
index 347ac27..167dca3 100644
--- a/test/intrinsics/gen/select/266aff.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/266aff.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_266aff() {
-  float2 res =   select(float2(), float2(), bool2());
+  float2 res = select(float2(), float2(), bool2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/28a27e.wgsl.expected.msl b/test/intrinsics/gen/select/28a27e.wgsl.expected.msl
index 667c9a1..813376f 100644
--- a/test/intrinsics/gen/select/28a27e.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/28a27e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_28a27e() {
-  uint3 res =   select(uint3(), uint3(), bool3());
+  uint3 res = select(uint3(), uint3(), bool3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/416e14.wgsl.expected.msl b/test/intrinsics/gen/select/416e14.wgsl.expected.msl
index 85cd25a..728f9e1 100644
--- a/test/intrinsics/gen/select/416e14.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/416e14.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_416e14() {
-  float res =   select(1.0f, 1.0f, bool());
+  float res = select(1.0f, 1.0f, bool());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/80a9a9.wgsl.expected.msl b/test/intrinsics/gen/select/80a9a9.wgsl.expected.msl
index 3aff43f..0e8e4b9 100644
--- a/test/intrinsics/gen/select/80a9a9.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/80a9a9.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_80a9a9() {
-  bool3 res =   select(bool3(), bool3(), bool3());
+  bool3 res = select(bool3(), bool3(), bool3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/99f883.wgsl.expected.msl b/test/intrinsics/gen/select/99f883.wgsl.expected.msl
index 45e38cf..fde3d24 100644
--- a/test/intrinsics/gen/select/99f883.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/99f883.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_99f883() {
-  uint res =   select(1u, 1u, bool());
+  uint res = select(1u, 1u, bool());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/a2860e.wgsl.expected.msl b/test/intrinsics/gen/select/a2860e.wgsl.expected.msl
index d57b00a..992519d 100644
--- a/test/intrinsics/gen/select/a2860e.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/a2860e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_a2860e() {
-  int4 res =   select(int4(), int4(), bool4());
+  int4 res = select(int4(), int4(), bool4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/bb8aae.wgsl.expected.msl b/test/intrinsics/gen/select/bb8aae.wgsl.expected.msl
index 0ac6179..23ef980 100644
--- a/test/intrinsics/gen/select/bb8aae.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/bb8aae.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_bb8aae() {
-  float4 res =   select(float4(), float4(), bool4());
+  float4 res = select(float4(), float4(), bool4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/c31f9e.wgsl.expected.msl b/test/intrinsics/gen/select/c31f9e.wgsl.expected.msl
index 21695bd..f348bbb 100644
--- a/test/intrinsics/gen/select/c31f9e.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/c31f9e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_c31f9e() {
-  bool res =   select(bool(), bool(), bool());
+  bool res = select(bool(), bool(), bool());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.msl b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.msl
index eb6e007..5de96a5 100644
--- a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_c4a4ef() {
-  uint4 res =   select(uint4(), uint4(), bool4());
+  uint4 res = select(uint4(), uint4(), bool4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/cb9301.wgsl.expected.msl b/test/intrinsics/gen/select/cb9301.wgsl.expected.msl
index 846a79f..975962f 100644
--- a/test/intrinsics/gen/select/cb9301.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/cb9301.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_cb9301() {
-  bool2 res =   select(bool2(), bool2(), bool2());
+  bool2 res = select(bool2(), bool2(), bool2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/e3e028.wgsl.expected.msl b/test/intrinsics/gen/select/e3e028.wgsl.expected.msl
index a1f57f6..659778e 100644
--- a/test/intrinsics/gen/select/e3e028.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/e3e028.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_e3e028() {
-  bool4 res =   select(bool4(), bool4(), bool4());
+  bool4 res = select(bool4(), bool4(), bool4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/ebfea2.wgsl.expected.msl b/test/intrinsics/gen/select/ebfea2.wgsl.expected.msl
index 81db84c..a4c6a13 100644
--- a/test/intrinsics/gen/select/ebfea2.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/ebfea2.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_ebfea2() {
-  float3 res =   select(float3(), float3(), bool3());
+  float3 res = select(float3(), float3(), bool3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/ed8a15.wgsl.expected.msl b/test/intrinsics/gen/select/ed8a15.wgsl.expected.msl
index 2c84ce4..e2ec08e 100644
--- a/test/intrinsics/gen/select/ed8a15.wgsl.expected.msl
+++ b/test/intrinsics/gen/select/ed8a15.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void select_ed8a15() {
-  int res =   select(1, 1, bool());
+  int res = select(1, 1, bool());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sign/159665.wgsl.expected.msl b/test/intrinsics/gen/sign/159665.wgsl.expected.msl
index 9a0fcb0..63ef07d 100644
--- a/test/intrinsics/gen/sign/159665.wgsl.expected.msl
+++ b/test/intrinsics/gen/sign/159665.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sign_159665() {
-  float3 res =   sign(float3());
+  float3 res = sign(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sign/b8f634.wgsl.expected.msl b/test/intrinsics/gen/sign/b8f634.wgsl.expected.msl
index b13803a..ede9127 100644
--- a/test/intrinsics/gen/sign/b8f634.wgsl.expected.msl
+++ b/test/intrinsics/gen/sign/b8f634.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sign_b8f634() {
-  float4 res =   sign(float4());
+  float4 res = sign(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sign/d065d8.wgsl.expected.msl b/test/intrinsics/gen/sign/d065d8.wgsl.expected.msl
index dc48e61..dfe0aa9 100644
--- a/test/intrinsics/gen/sign/d065d8.wgsl.expected.msl
+++ b/test/intrinsics/gen/sign/d065d8.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sign_d065d8() {
-  float2 res =   sign(float2());
+  float2 res = sign(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sign/dd790e.wgsl.expected.msl b/test/intrinsics/gen/sign/dd790e.wgsl.expected.msl
index b77013a..756a812 100644
--- a/test/intrinsics/gen/sign/dd790e.wgsl.expected.msl
+++ b/test/intrinsics/gen/sign/dd790e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sign_dd790e() {
-  float res =   sign(1.0f);
+  float res = sign(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sin/01f241.wgsl.expected.msl b/test/intrinsics/gen/sin/01f241.wgsl.expected.msl
index 72d06c0..656086c 100644
--- a/test/intrinsics/gen/sin/01f241.wgsl.expected.msl
+++ b/test/intrinsics/gen/sin/01f241.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sin_01f241() {
-  float3 res =   sin(float3());
+  float3 res = sin(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sin/4e3979.wgsl.expected.msl b/test/intrinsics/gen/sin/4e3979.wgsl.expected.msl
index 8490349..fbce764 100644
--- a/test/intrinsics/gen/sin/4e3979.wgsl.expected.msl
+++ b/test/intrinsics/gen/sin/4e3979.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sin_4e3979() {
-  float4 res =   sin(float4());
+  float4 res = sin(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sin/b78c91.wgsl.expected.msl b/test/intrinsics/gen/sin/b78c91.wgsl.expected.msl
index b356483..2b5020f 100644
--- a/test/intrinsics/gen/sin/b78c91.wgsl.expected.msl
+++ b/test/intrinsics/gen/sin/b78c91.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sin_b78c91() {
-  float res =   sin(1.0f);
+  float res = sin(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.msl b/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.msl
index e66435a..63129b8 100644
--- a/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.msl
+++ b/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sin_fc8bc4() {
-  float2 res =   sin(float2());
+  float2 res = sin(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sinh/445e33.wgsl.expected.msl b/test/intrinsics/gen/sinh/445e33.wgsl.expected.msl
index aa95482..78d2be0 100644
--- a/test/intrinsics/gen/sinh/445e33.wgsl.expected.msl
+++ b/test/intrinsics/gen/sinh/445e33.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sinh_445e33() {
-  float4 res =   sinh(float4());
+  float4 res = sinh(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sinh/7bb598.wgsl.expected.msl b/test/intrinsics/gen/sinh/7bb598.wgsl.expected.msl
index e6c5990..79ca78d 100644
--- a/test/intrinsics/gen/sinh/7bb598.wgsl.expected.msl
+++ b/test/intrinsics/gen/sinh/7bb598.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sinh_7bb598() {
-  float res =   sinh(1.0f);
+  float res = sinh(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sinh/b9860e.wgsl.expected.msl b/test/intrinsics/gen/sinh/b9860e.wgsl.expected.msl
index 5bc5bc4..2122b18 100644
--- a/test/intrinsics/gen/sinh/b9860e.wgsl.expected.msl
+++ b/test/intrinsics/gen/sinh/b9860e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sinh_b9860e() {
-  float2 res =   sinh(float2());
+  float2 res = sinh(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.msl b/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.msl
index 05558c7..27475f4 100644
--- a/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.msl
+++ b/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sinh_c9a5eb() {
-  float3 res =   sinh(float3());
+  float3 res = sinh(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.msl b/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.msl
index 22a3ab7..8ab52a3 100644
--- a/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.msl
+++ b/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void smoothStep_5f615b() {
-  float4 res =   smoothstep(float4(), float4(), float4());
+  float4 res = smoothstep(float4(), float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.msl b/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.msl
index 42d4a3a..097061c 100644
--- a/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.msl
+++ b/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void smoothStep_658be3() {
-  float3 res =   smoothstep(float3(), float3(), float3());
+  float3 res = smoothstep(float3(), float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.msl b/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.msl
index 7788c35..2d1f4a4 100644
--- a/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.msl
+++ b/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void smoothStep_c11eef() {
-  float2 res =   smoothstep(float2(), float2(), float2());
+  float2 res = smoothstep(float2(), float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.msl b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.msl
index f963d98..dda677c 100644
--- a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.msl
+++ b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void smoothStep_cb0bfb() {
-  float res =   smoothstep(1.0f, 1.0f, 1.0f);
+  float res = smoothstep(1.0f, 1.0f, 1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.msl b/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.msl
index ebe9cc5..c8dff4a 100644
--- a/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.msl
+++ b/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sqrt_20c74e() {
-  float res =   sqrt(1.0f);
+  float res = sqrt(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.msl b/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.msl
index c6e76d0..f36c0bc 100644
--- a/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.msl
+++ b/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sqrt_8c7024() {
-  float2 res =   sqrt(float2());
+  float2 res = sqrt(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.msl b/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.msl
index 7de1194..d0b0a61 100644
--- a/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.msl
+++ b/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sqrt_aa0d7a() {
-  float4 res =   sqrt(float4());
+  float4 res = sqrt(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.msl b/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.msl
index a0281f7..b39cb0c 100644
--- a/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.msl
+++ b/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void sqrt_f8c59a() {
-  float3 res =   sqrt(float3());
+  float3 res = sqrt(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/step/0b073b.wgsl.expected.msl b/test/intrinsics/gen/step/0b073b.wgsl.expected.msl
index 0a76b20..b5d5d02 100644
--- a/test/intrinsics/gen/step/0b073b.wgsl.expected.msl
+++ b/test/intrinsics/gen/step/0b073b.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void step_0b073b() {
-  float res =   step(1.0f, 1.0f);
+  float res = step(1.0f, 1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/step/19accd.wgsl.expected.msl b/test/intrinsics/gen/step/19accd.wgsl.expected.msl
index a26cee5..51c0088 100644
--- a/test/intrinsics/gen/step/19accd.wgsl.expected.msl
+++ b/test/intrinsics/gen/step/19accd.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void step_19accd() {
-  float2 res =   step(float2(), float2());
+  float2 res = step(float2(), float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/step/334303.wgsl.expected.msl b/test/intrinsics/gen/step/334303.wgsl.expected.msl
index 8594bfc..82916a6 100644
--- a/test/intrinsics/gen/step/334303.wgsl.expected.msl
+++ b/test/intrinsics/gen/step/334303.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void step_334303() {
-  float3 res =   step(float3(), float3());
+  float3 res = step(float3(), float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/step/e2b337.wgsl.expected.msl b/test/intrinsics/gen/step/e2b337.wgsl.expected.msl
index d35db64..cb536db 100644
--- a/test/intrinsics/gen/step/e2b337.wgsl.expected.msl
+++ b/test/intrinsics/gen/step/e2b337.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void step_e2b337() {
-  float4 res =   step(float4(), float4());
+  float4 res = step(float4(), float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.msl b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.msl
index daafd40..53da747 100644
--- a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.msl
+++ b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void storageBarrier_d87211() {
-    threadgroup_barrier(mem_flags::mem_device);
+  threadgroup_barrier(mem_flags::mem_device);
 }
 
 kernel void compute_main() {
diff --git a/test/intrinsics/gen/tan/244e2a.wgsl.expected.msl b/test/intrinsics/gen/tan/244e2a.wgsl.expected.msl
index 71c4d77..d1b34a4 100644
--- a/test/intrinsics/gen/tan/244e2a.wgsl.expected.msl
+++ b/test/intrinsics/gen/tan/244e2a.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void tan_244e2a() {
-  float4 res =   tan(float4());
+  float4 res = tan(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/tan/2f030e.wgsl.expected.msl b/test/intrinsics/gen/tan/2f030e.wgsl.expected.msl
index 10fd660..81c0766 100644
--- a/test/intrinsics/gen/tan/2f030e.wgsl.expected.msl
+++ b/test/intrinsics/gen/tan/2f030e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void tan_2f030e() {
-  float res =   tan(1.0f);
+  float res = tan(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/tan/7ea104.wgsl.expected.msl b/test/intrinsics/gen/tan/7ea104.wgsl.expected.msl
index f4ef836..89db1ac 100644
--- a/test/intrinsics/gen/tan/7ea104.wgsl.expected.msl
+++ b/test/intrinsics/gen/tan/7ea104.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void tan_7ea104() {
-  float3 res =   tan(float3());
+  float3 res = tan(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.msl b/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.msl
index 89bfdfe..e460fae 100644
--- a/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.msl
+++ b/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void tan_8ce3e9() {
-  float2 res =   tan(float2());
+  float2 res = tan(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/tanh/5663c5.wgsl.expected.msl b/test/intrinsics/gen/tanh/5663c5.wgsl.expected.msl
index 421d1a1..5a82feb 100644
--- a/test/intrinsics/gen/tanh/5663c5.wgsl.expected.msl
+++ b/test/intrinsics/gen/tanh/5663c5.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void tanh_5663c5() {
-  float4 res =   tanh(float4());
+  float4 res = tanh(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/tanh/5724b3.wgsl.expected.msl b/test/intrinsics/gen/tanh/5724b3.wgsl.expected.msl
index 90440da..878775f 100644
--- a/test/intrinsics/gen/tanh/5724b3.wgsl.expected.msl
+++ b/test/intrinsics/gen/tanh/5724b3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void tanh_5724b3() {
-  float2 res =   tanh(float2());
+  float2 res = tanh(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.msl b/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.msl
index 9e0039b..b93aca0 100644
--- a/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.msl
+++ b/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void tanh_9f9fb9() {
-  float3 res =   tanh(float3());
+  float3 res = tanh(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.msl b/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.msl
index 31287f6..be4a4b6 100644
--- a/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.msl
+++ b/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void tanh_c15fdb() {
-  float res =   tanh(1.0f);
+  float res = tanh(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/transpose/2585cd.wgsl.expected.msl b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.msl
index 4ee05b0..6ae1bbd 100644
--- a/test/intrinsics/gen/transpose/2585cd.wgsl.expected.msl
+++ b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void transpose_2585cd() {
-  float3x4 res =   transpose(float4x3());
+  float3x4 res = transpose(float4x3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/transpose/31d679.wgsl.expected.msl b/test/intrinsics/gen/transpose/31d679.wgsl.expected.msl
index 83a7f16..f76b6eb 100644
--- a/test/intrinsics/gen/transpose/31d679.wgsl.expected.msl
+++ b/test/intrinsics/gen/transpose/31d679.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void transpose_31d679() {
-  float2x2 res =   transpose(float2x2());
+  float2x2 res = transpose(float2x2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/transpose/31e37e.wgsl.expected.msl b/test/intrinsics/gen/transpose/31e37e.wgsl.expected.msl
index 8dad9cd..6549c60 100644
--- a/test/intrinsics/gen/transpose/31e37e.wgsl.expected.msl
+++ b/test/intrinsics/gen/transpose/31e37e.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void transpose_31e37e() {
-  float2x4 res =   transpose(float4x2());
+  float2x4 res = transpose(float4x2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/transpose/4ce359.wgsl.expected.msl b/test/intrinsics/gen/transpose/4ce359.wgsl.expected.msl
index 56e2901..82ad61f 100644
--- a/test/intrinsics/gen/transpose/4ce359.wgsl.expected.msl
+++ b/test/intrinsics/gen/transpose/4ce359.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void transpose_4ce359() {
-  float4x2 res =   transpose(float2x4());
+  float4x2 res = transpose(float2x4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.msl b/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.msl
index d152f3c..856b2cc 100644
--- a/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.msl
+++ b/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void transpose_4dc9a1() {
-  float3x2 res =   transpose(float2x3());
+  float3x2 res = transpose(float2x3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/transpose/854336.wgsl.expected.msl b/test/intrinsics/gen/transpose/854336.wgsl.expected.msl
index 66006f0..11184d7 100644
--- a/test/intrinsics/gen/transpose/854336.wgsl.expected.msl
+++ b/test/intrinsics/gen/transpose/854336.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void transpose_854336() {
-  float3x3 res =   transpose(float3x3());
+  float3x3 res = transpose(float3x3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/transpose/c1b600.wgsl.expected.msl b/test/intrinsics/gen/transpose/c1b600.wgsl.expected.msl
index 0a3a993..59920dc 100644
--- a/test/intrinsics/gen/transpose/c1b600.wgsl.expected.msl
+++ b/test/intrinsics/gen/transpose/c1b600.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void transpose_c1b600() {
-  float4x4 res =   transpose(float4x4());
+  float4x4 res = transpose(float4x4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.msl b/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.msl
index ff3a0b9..98f2384 100644
--- a/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.msl
+++ b/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void transpose_d8f8ba() {
-  float4x3 res =   transpose(float3x4());
+  float4x3 res = transpose(float3x4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.msl b/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.msl
index 87823db..4fdec15 100644
--- a/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.msl
+++ b/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void transpose_ed4bdc() {
-  float2x3 res =   transpose(float3x2());
+  float2x3 res = transpose(float3x2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/trunc/562d05.wgsl.expected.msl b/test/intrinsics/gen/trunc/562d05.wgsl.expected.msl
index 061a926..062cae4 100644
--- a/test/intrinsics/gen/trunc/562d05.wgsl.expected.msl
+++ b/test/intrinsics/gen/trunc/562d05.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void trunc_562d05() {
-  float3 res =   trunc(float3());
+  float3 res = trunc(float3());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/trunc/e183aa.wgsl.expected.msl b/test/intrinsics/gen/trunc/e183aa.wgsl.expected.msl
index 4844235..847cb9d 100644
--- a/test/intrinsics/gen/trunc/e183aa.wgsl.expected.msl
+++ b/test/intrinsics/gen/trunc/e183aa.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void trunc_e183aa() {
-  float4 res =   trunc(float4());
+  float4 res = trunc(float4());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/trunc/eb83df.wgsl.expected.msl b/test/intrinsics/gen/trunc/eb83df.wgsl.expected.msl
index 4e8c7ac..e9b0df0 100644
--- a/test/intrinsics/gen/trunc/eb83df.wgsl.expected.msl
+++ b/test/intrinsics/gen/trunc/eb83df.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void trunc_eb83df() {
-  float res =   trunc(1.0f);
+  float res = trunc(1.0f);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/trunc/f370d3.wgsl.expected.msl b/test/intrinsics/gen/trunc/f370d3.wgsl.expected.msl
index 2b58e71..34e6620 100644
--- a/test/intrinsics/gen/trunc/f370d3.wgsl.expected.msl
+++ b/test/intrinsics/gen/trunc/f370d3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void trunc_f370d3() {
-  float2 res =   trunc(float2());
+  float2 res = trunc(float2());
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.msl b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.msl
index 210f23e..e5746f1 100644
--- a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.msl
+++ b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void unpack2x16float_32a5cf() {
-  float2 res =   float2(as_type<half2>(1u));
+  float2 res = float2(as_type<half2>(1u));
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.msl b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.msl
index 2795c37..2374a87 100644
--- a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.msl
+++ b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void unpack2x16snorm_b4aea6() {
-  float2 res =   unpack_snorm2x16_to_float(1u);
+  float2 res = unpack_snorm2x16_to_float(1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.msl b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.msl
index 706b45e..45815ca 100644
--- a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.msl
+++ b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void unpack2x16unorm_7699c0() {
-  float2 res =   unpack_unorm2x16_to_float(1u);
+  float2 res = unpack_unorm2x16_to_float(1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.msl b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.msl
index af4fb45..06cc514 100644
--- a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.msl
+++ b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void unpack4x8snorm_523fb3() {
-  float4 res =   unpack_snorm4x8_to_float(1u);
+  float4 res = unpack_snorm4x8_to_float(1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.msl b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.msl
index 5c4da0d..e6226c8 100644
--- a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.msl
+++ b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 void unpack4x8unorm_750c74() {
-  float4 res =   unpack_unorm4x8_to_float(1u);
+  float4 res = unpack_unorm4x8_to_float(1u);
 }
 
 vertex tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.msl b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.msl
index a3dcb47..ed5ed22 100644
--- a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.msl
+++ b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void workgroupBarrier_a17f7f() {
-    threadgroup_barrier(mem_flags::mem_threadgroup);
+  threadgroup_barrier(mem_flags::mem_threadgroup);
 }
 
 kernel void compute_main() {
diff --git a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.msl b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.msl
index 124f375..f8f9031 100644
--- a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.msl
+++ b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.msl
@@ -6,7 +6,7 @@
   if ((local_invocation_index == 0u)) {
     tint_symbol_2 = int();
   }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
+  threadgroup_barrier(mem_flags::mem_threadgroup);
   tint_symbol_2 = 123;
   int const use = (tint_symbol_2 + 1);
   return;
diff --git a/test/samples/compute_boids.wgsl.expected.msl b/test/samples/compute_boids.wgsl.expected.msl
index f0a1ab8..dae2f1f 100644
--- a/test/samples/compute_boids.wgsl.expected.msl
+++ b/test/samples/compute_boids.wgsl.expected.msl
@@ -36,8 +36,8 @@
   float2 const a_particlePos = tint_symbol.a_particlePos;
   float2 const a_particleVel = tint_symbol.a_particleVel;
   float2 const a_pos = tint_symbol.a_pos;
-  float angle = -(  atan2(a_particleVel.x, a_particleVel.y));
-  float2 pos = float2(((a_pos.x *   cos(angle)) - (a_pos.y *   sin(angle))), ((a_pos.x *   sin(angle)) + (a_pos.y *   cos(angle))));
+  float angle = -(atan2(a_particleVel.x, a_particleVel.y));
+  float2 pos = float2(((a_pos.x * cos(angle)) - (a_pos.y * sin(angle))), ((a_pos.x * sin(angle)) + (a_pos.y * cos(angle))));
   tint_symbol_2 const tint_symbol_5 = {.value=float4((pos + a_particlePos), 0.0f, 1.0f)};
   return tint_symbol_5;
 }
@@ -75,14 +75,14 @@
       }
       pos = particlesA.particles.arr[i].pos.xy;
       vel = particlesA.particles.arr[i].vel.xy;
-      if ((      distance(pos, vPos) < params.rule1Distance)) {
+      if ((distance(pos, vPos) < params.rule1Distance)) {
         cMass = (cMass + pos);
         cMassCount = (cMassCount + 1);
       }
-      if ((      distance(pos, vPos) < params.rule2Distance)) {
+      if ((distance(pos, vPos) < params.rule2Distance)) {
         colVel = (colVel - (pos - vPos));
       }
-      if ((      distance(pos, vPos) < params.rule3Distance)) {
+      if ((distance(pos, vPos) < params.rule3Distance)) {
         cVel = (cVel + vel);
         cVelCount = (cVelCount + 1);
       }
@@ -98,7 +98,7 @@
     cVel = (cVel / float2(float(cVelCount), float(cVelCount)));
   }
   vVel = (((vVel + (cMass * params.rule1Scale)) + (colVel * params.rule2Scale)) + (cVel * params.rule3Scale));
-  vVel = (  normalize(vVel) *   clamp(  length(vVel), 0.0f, 0.100000001f));
+  vVel = (normalize(vVel) * clamp(length(vVel), 0.0f, 0.100000001f));
   vPos = (vPos + (vVel * params.deltaT));
   if ((vPos.x < -1.0f)) {
     vPos.x = 1.0f;
diff --git a/test/var/workgroup.wgsl.expected.msl b/test/var/workgroup.wgsl.expected.msl
index a0c3800..2105f71 100644
--- a/test/var/workgroup.wgsl.expected.msl
+++ b/test/var/workgroup.wgsl.expected.msl
@@ -29,7 +29,7 @@
   if ((local_invocation_index == 0u)) {
     tint_symbol_9 = int();
   }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
+  threadgroup_barrier(mem_flags::mem_threadgroup);
   tint_symbol_9 = 42;
   uses_a(&(tint_symbol_9));
   return;
@@ -40,7 +40,7 @@
   if ((local_invocation_index_1 == 0u)) {
     tint_symbol_10 = int();
   }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
+  threadgroup_barrier(mem_flags::mem_threadgroup);
   tint_symbol_10 = 7;
   uses_b(&(tint_symbol_10));
   return;
@@ -53,7 +53,7 @@
     tint_symbol_11 = int();
     tint_symbol_12 = int();
   }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
+  threadgroup_barrier(mem_flags::mem_threadgroup);
   outer(&(tint_symbol_11), &(tint_symbol_12));
   no_uses();
   return;
