writer/hlsl: Use Symbols().New()

Instead of rolling another implementation inside GeneratorImpl.

Bug: tint:712
Change-Id: I26af0d68f6529c0c6dc45f51233f4618389edb55
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/47638
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 23172b9..3738d69 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -47,7 +47,7 @@
 const char kOutStructNameSuffix[] = "out";
 const char kTintStructInVarPrefix[] = "tint_in";
 const char kTintStructOutVarPrefix[] = "tint_out";
-const char kTempNamePrefix[] = "_tint_tmp";
+const char kTempNamePrefix[] = "tint_tmp";
 
 bool last_is_break_or_fallthrough(const ast::BlockStatement* stmts) {
   if (stmts->empty()) {
@@ -176,18 +176,7 @@
 }
 
 std::string GeneratorImpl::generate_name(const std::string& prefix) {
-  if (!builder_.Symbols().Get(prefix).IsValid()) {
-    builder_.Symbols().Register(prefix);
-    return prefix;
-  }
-  for (uint32_t i = 0;; i++) {
-    std::string name = prefix + "_" + std::to_string(i);
-    if (builder_.Symbols().Get(name).IsValid()) {
-      continue;
-    }
-    builder_.Symbols().Register(name);
-    return name;
-  }
+  return builder_.Symbols().NameFor(builder_.Symbols().New(prefix));
 }
 
 std::string GeneratorImpl::current_ep_var_name(VarType type) {
diff --git a/src/writer/hlsl/generator_impl_binary_test.cc b/src/writer/hlsl/generator_impl_binary_test.cc
index 1c56bfc..41d1289 100644
--- a/src/writer/hlsl/generator_impl_binary_test.cc
+++ b/src/writer/hlsl/generator_impl_binary_test.cc
@@ -241,10 +241,10 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.EmitExpression(pre, out, expr)) << gen.error();
-  EXPECT_EQ(result(), "(_tint_tmp)");
-  EXPECT_EQ(pre_result(), R"(bool _tint_tmp = left;
-if (_tint_tmp) {
-  _tint_tmp = right;
+  EXPECT_EQ(result(), "(tint_tmp)");
+  EXPECT_EQ(pre_result(), R"(bool tint_tmp = left;
+if (tint_tmp) {
+  tint_tmp = right;
 }
 )");
 }
@@ -264,18 +264,18 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.EmitExpression(pre, out, expr)) << gen.error();
-  EXPECT_EQ(result(), "(_tint_tmp_0)");
-  EXPECT_EQ(pre_result(), R"(bool _tint_tmp = a;
-if (_tint_tmp) {
-  _tint_tmp = b;
+  EXPECT_EQ(result(), "(tint_tmp_1)");
+  EXPECT_EQ(pre_result(), R"(bool tint_tmp = a;
+if (tint_tmp) {
+  tint_tmp = b;
 }
-bool _tint_tmp_0 = (_tint_tmp);
-if (!_tint_tmp_0) {
-  bool _tint_tmp_1 = c;
-  if (!_tint_tmp_1) {
-    _tint_tmp_1 = d;
+bool tint_tmp_1 = (tint_tmp);
+if (!tint_tmp_1) {
+  bool tint_tmp_2 = c;
+  if (!tint_tmp_2) {
+    tint_tmp_2 = d;
   }
-  _tint_tmp_0 = (_tint_tmp_1);
+  tint_tmp_1 = (tint_tmp_2);
 }
 )");
 }
@@ -290,10 +290,10 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.EmitExpression(pre, out, expr)) << gen.error();
-  EXPECT_EQ(result(), "(_tint_tmp)");
-  EXPECT_EQ(pre_result(), R"(bool _tint_tmp = left;
-if (!_tint_tmp) {
-  _tint_tmp = right;
+  EXPECT_EQ(result(), "(tint_tmp)");
+  EXPECT_EQ(pre_result(), R"(bool tint_tmp = left;
+if (!tint_tmp) {
+  tint_tmp = right;
 }
 )");
 }
@@ -336,18 +336,18 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.EmitStatement(out, expr)) << gen.error();
-  EXPECT_EQ(result(), R"(bool _tint_tmp = a;
-if (_tint_tmp) {
-  _tint_tmp = b;
+  EXPECT_EQ(result(), R"(bool tint_tmp = a;
+if (tint_tmp) {
+  tint_tmp = b;
 }
-if ((_tint_tmp)) {
+if ((tint_tmp)) {
   return 1;
 } else {
-  bool _tint_tmp_0 = b;
-  if (!_tint_tmp_0) {
-    _tint_tmp_0 = c;
+  bool tint_tmp_1 = b;
+  if (!tint_tmp_1) {
+    tint_tmp_1 = c;
   }
-  if ((_tint_tmp_0)) {
+  if ((tint_tmp_1)) {
     return 2;
   } else {
     return 3;
@@ -369,15 +369,15 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.EmitStatement(out, expr)) << gen.error();
-  EXPECT_EQ(result(), R"(bool _tint_tmp = a;
-if (_tint_tmp) {
-  _tint_tmp = b;
+  EXPECT_EQ(result(), R"(bool tint_tmp = a;
+if (tint_tmp) {
+  tint_tmp = b;
 }
-bool _tint_tmp_0 = (_tint_tmp);
-if (!_tint_tmp_0) {
-  _tint_tmp_0 = c;
+bool tint_tmp_1 = (tint_tmp);
+if (!tint_tmp_1) {
+  tint_tmp_1 = c;
 }
-return (_tint_tmp_0);
+return (tint_tmp_1);
 )");
 }
 
@@ -397,15 +397,15 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.EmitStatement(out, expr)) << gen.error();
-  EXPECT_EQ(result(), R"(bool _tint_tmp = b;
-if (!_tint_tmp) {
-  _tint_tmp = c;
+  EXPECT_EQ(result(), R"(bool tint_tmp = b;
+if (!tint_tmp) {
+  tint_tmp = c;
 }
-bool _tint_tmp_0 = (_tint_tmp);
-if (_tint_tmp_0) {
-  _tint_tmp_0 = d;
+bool tint_tmp_1 = (tint_tmp);
+if (tint_tmp_1) {
+  tint_tmp_1 = d;
 }
-a = (_tint_tmp_0);
+a = (tint_tmp_1);
 )");
 }
 
@@ -432,15 +432,15 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.EmitStatement(out, decl)) << gen.error();
-  EXPECT_EQ(result(), R"(bool _tint_tmp = b;
-if (_tint_tmp) {
-  _tint_tmp = c;
+  EXPECT_EQ(result(), R"(bool tint_tmp = b;
+if (tint_tmp) {
+  tint_tmp = c;
 }
-bool _tint_tmp_0 = (_tint_tmp);
-if (!_tint_tmp_0) {
-  _tint_tmp_0 = d;
+bool tint_tmp_1 = (tint_tmp);
+if (!tint_tmp_1) {
+  tint_tmp_1 = d;
 }
-bool a = (_tint_tmp_0);
+bool a = (tint_tmp_1);
 )");
 }
 
@@ -460,16 +460,16 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.EmitExpression(pre, out, expr)) << gen.error();
-  EXPECT_EQ(pre_result(), R"(bool _tint_tmp = a;
-if (_tint_tmp) {
-  bool _tint_tmp_0 = b;
-  if (!_tint_tmp_0) {
-    _tint_tmp_0 = c;
+  EXPECT_EQ(pre_result(), R"(bool tint_tmp = a;
+if (tint_tmp) {
+  bool tint_tmp_1 = b;
+  if (!tint_tmp_1) {
+    tint_tmp_1 = c;
   }
-  _tint_tmp = (_tint_tmp_0);
+  tint_tmp = (tint_tmp_1);
 }
 )");
-  EXPECT_EQ(result(), R"(asint((_tint_tmp)))");
+  EXPECT_EQ(result(), R"(asint((tint_tmp)))");
 }
 
 TEST_F(HlslGeneratorImplTest_Binary, Call_WithLogical) {
@@ -500,27 +500,27 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.EmitStatement(out, expr)) << gen.error();
-  EXPECT_EQ(result(), R"(bool _tint_tmp = a;
-if (_tint_tmp) {
-  _tint_tmp = b;
+  EXPECT_EQ(result(), R"(bool tint_tmp = a;
+if (tint_tmp) {
+  tint_tmp = b;
 }
-bool _tint_tmp_0 = c;
-if (!_tint_tmp_0) {
-  _tint_tmp_0 = d;
+bool tint_tmp_1 = c;
+if (!tint_tmp_1) {
+  tint_tmp_1 = d;
 }
-bool _tint_tmp_1 = a;
-if (!_tint_tmp_1) {
-  _tint_tmp_1 = c;
+bool tint_tmp_2 = a;
+if (!tint_tmp_2) {
+  tint_tmp_2 = c;
 }
-bool _tint_tmp_2 = (_tint_tmp_1);
-if (_tint_tmp_2) {
-  bool _tint_tmp_3 = b;
-  if (!_tint_tmp_3) {
-    _tint_tmp_3 = d;
+bool tint_tmp_3 = (tint_tmp_2);
+if (tint_tmp_3) {
+  bool tint_tmp_4 = b;
+  if (!tint_tmp_4) {
+    tint_tmp_4 = d;
   }
-  _tint_tmp_2 = (_tint_tmp_3);
+  tint_tmp_3 = (tint_tmp_4);
 }
-foo((_tint_tmp), (_tint_tmp_0), (_tint_tmp_2));
+foo((tint_tmp), (tint_tmp_1), (tint_tmp_3));
 )");
 }
 
diff --git a/src/writer/hlsl/generator_impl_intrinsic_test.cc b/src/writer/hlsl/generator_impl_intrinsic_test.cc
index 372e145..baac6d1 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_test.cc
@@ -278,10 +278,10 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("int4 _tint_tmp = int4(round(clamp(p1, "
+  EXPECT_THAT(pre_result(), HasSubstr("int4 tint_tmp = int4(round(clamp(p1, "
                                       "-1.0, 1.0) * 127.0)) & 0xff;"));
-  EXPECT_THAT(result(), HasSubstr("asuint(_tint_tmp.x | _tint_tmp.y << 8 | "
-                                  "_tint_tmp.z << 16 | _tint_tmp.w << 24)"));
+  EXPECT_THAT(result(), HasSubstr("asuint(tint_tmp.x | tint_tmp.y << 8 | "
+                                  "tint_tmp.z << 16 | tint_tmp.w << 24)"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack4x8Unorm) {
@@ -292,10 +292,10 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("uint4 _tint_tmp = uint4(round(clamp(p1, "
+  EXPECT_THAT(pre_result(), HasSubstr("uint4 tint_tmp = uint4(round(clamp(p1, "
                                       "0.0, 1.0) * 255.0));"));
-  EXPECT_THAT(result(), HasSubstr("(_tint_tmp.x | _tint_tmp.y << 8 | "
-                                  "_tint_tmp.z << 16 | _tint_tmp.w << 24)"));
+  EXPECT_THAT(result(), HasSubstr("(tint_tmp.x | tint_tmp.y << 8 | "
+                                  "tint_tmp.z << 16 | tint_tmp.w << 24)"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack2x16Snorm) {
@@ -306,9 +306,9 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("int2 _tint_tmp = int2(round(clamp(p1, "
+  EXPECT_THAT(pre_result(), HasSubstr("int2 tint_tmp = int2(round(clamp(p1, "
                                       "-1.0, 1.0) * 32767.0)) & 0xffff;"));
-  EXPECT_THAT(result(), HasSubstr("asuint(_tint_tmp.x | _tint_tmp.y << 16)"));
+  EXPECT_THAT(result(), HasSubstr("asuint(tint_tmp.x | tint_tmp.y << 16)"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack2x16Unorm) {
@@ -319,9 +319,9 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("uint2 _tint_tmp = uint2(round(clamp(p1, "
+  EXPECT_THAT(pre_result(), HasSubstr("uint2 tint_tmp = uint2(round(clamp(p1, "
                                       "0.0, 1.0) * 65535.0));"));
-  EXPECT_THAT(result(), HasSubstr("(_tint_tmp.x | _tint_tmp.y << 16)"));
+  EXPECT_THAT(result(), HasSubstr("(tint_tmp.x | tint_tmp.y << 16)"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack2x16Float) {
@@ -332,8 +332,8 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("uint2 _tint_tmp = f32tof16(p1);"));
-  EXPECT_THAT(result(), HasSubstr("(_tint_tmp.x | _tint_tmp.y << 16)"));
+  EXPECT_THAT(pre_result(), HasSubstr("uint2 tint_tmp = f32tof16(p1);"));
+  EXPECT_THAT(result(), HasSubstr("(tint_tmp.x | tint_tmp.y << 16)"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack4x8Snorm) {
@@ -344,12 +344,12 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("int _tint_tmp_0 = int(p1);"));
+  EXPECT_THAT(pre_result(), HasSubstr("int tint_tmp_1 = int(p1);"));
   EXPECT_THAT(pre_result(),
-              HasSubstr("int4 _tint_tmp = int4(_tint_tmp_0 << 24, _tint_tmp_0 "
-                        "<< 16, _tint_tmp_0 << 8, _tint_tmp_0) >> 24;"));
+              HasSubstr("int4 tint_tmp = int4(tint_tmp_1 << 24, tint_tmp_1 "
+                        "<< 16, tint_tmp_1 << 8, tint_tmp_1) >> 24;"));
   EXPECT_THAT(result(),
-              HasSubstr("clamp(float4(_tint_tmp) / 127.0, -1.0, 1.0)"));
+              HasSubstr("clamp(float4(tint_tmp) / 127.0, -1.0, 1.0)"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack4x8Unorm) {
@@ -360,12 +360,12 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("uint _tint_tmp_0 = p1;"));
+  EXPECT_THAT(pre_result(), HasSubstr("uint tint_tmp_1 = p1;"));
   EXPECT_THAT(
       pre_result(),
-      HasSubstr("uint4 _tint_tmp = uint4(_tint_tmp_0 & 0xff, (_tint_tmp_0 >> "
-                "8) & 0xff, (_tint_tmp_0 >> 16) & 0xff, _tint_tmp_0 >> 24);"));
-  EXPECT_THAT(result(), HasSubstr("float4(_tint_tmp) / 255.0"));
+      HasSubstr("uint4 tint_tmp = uint4(tint_tmp_1 & 0xff, (tint_tmp_1 >> "
+                "8) & 0xff, (tint_tmp_1 >> 16) & 0xff, tint_tmp_1 >> 24);"));
+  EXPECT_THAT(result(), HasSubstr("float4(tint_tmp) / 255.0"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack2x16Snorm) {
@@ -376,13 +376,12 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("int _tint_tmp_0 = int(p1);"));
+  EXPECT_THAT(pre_result(), HasSubstr("int tint_tmp_1 = int(p1);"));
   EXPECT_THAT(
       pre_result(),
-      HasSubstr(
-          "int2 _tint_tmp = int2(_tint_tmp_0 << 16, _tint_tmp_0) >> 16;"));
+      HasSubstr("int2 tint_tmp = int2(tint_tmp_1 << 16, tint_tmp_1) >> 16;"));
   EXPECT_THAT(result(),
-              HasSubstr("clamp(float2(_tint_tmp) / 32767.0, -1.0, 1.0)"));
+              HasSubstr("clamp(float2(tint_tmp) / 32767.0, -1.0, 1.0)"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack2x16Unorm) {
@@ -393,12 +392,12 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("uint _tint_tmp_0 = p1;"));
+  EXPECT_THAT(pre_result(), HasSubstr("uint tint_tmp_1 = p1;"));
   EXPECT_THAT(
       pre_result(),
       HasSubstr(
-          "uint2 _tint_tmp = uint2(_tint_tmp_0 & 0xffff, _tint_tmp_0 >> 16);"));
-  EXPECT_THAT(result(), HasSubstr("float2(_tint_tmp) / 65535.0"));
+          "uint2 tint_tmp = uint2(tint_tmp_1 & 0xffff, tint_tmp_1 >> 16);"));
+  EXPECT_THAT(result(), HasSubstr("float2(tint_tmp) / 65535.0"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack2x16Float) {
@@ -409,10 +408,9 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_THAT(pre_result(), HasSubstr("uint _tint_tmp = p1;"));
-  EXPECT_THAT(
-      result(),
-      HasSubstr("f16tof32(uint2(_tint_tmp & 0xffff, _tint_tmp >> 16))"));
+  EXPECT_THAT(pre_result(), HasSubstr("uint tint_tmp = p1;"));
+  EXPECT_THAT(result(),
+              HasSubstr("f16tof32(uint2(tint_tmp & 0xffff, tint_tmp >> 16))"));
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, StorageBarrier) {
diff --git a/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
index fe46286..0633929 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
@@ -41,27 +41,27 @@
     case ValidTextureOverload::kDimensionsStorageRO1d:
     case ValidTextureOverload::kDimensionsStorageWO1d:
       return {
-          R"(int _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp);
+          R"(int tint_tmp;
+  tint_texture.GetDimensions(tint_tmp);
 )",
-          "_tint_tmp",
+          "tint_tmp",
       };
     case ValidTextureOverload::kDimensions2d:
     case ValidTextureOverload::kDimensionsDepth2d:
     case ValidTextureOverload::kDimensionsStorageRO2d:
     case ValidTextureOverload::kDimensionsStorageWO2d:
       return {
-          R"(int2 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y);
+          R"(int2 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y);
 )",
-          "_tint_tmp",
+          "tint_tmp",
       };
     case ValidTextureOverload::kDimensionsMultisampled2d:
       return {
-          R"(int3 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
+          R"(int3 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
 )",
-          "_tint_tmp.xy",
+          "tint_tmp.xy",
       };
 
     case ValidTextureOverload::kDimensions2dArray:
@@ -69,81 +69,81 @@
     case ValidTextureOverload::kDimensionsStorageRO2dArray:
     case ValidTextureOverload::kDimensionsStorageWO2dArray:
       return {
-          R"(int3 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
+          R"(int3 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
 )",
-          "_tint_tmp.xy",
+          "tint_tmp.xy",
       };
     case ValidTextureOverload::kDimensionsMultisampled2dArray:
       return {
-          R"(int4 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
+          R"(int4 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
 )",
-          "_tint_tmp.xy",
+          "tint_tmp.xy",
       };
     case ValidTextureOverload::kDimensions3d:
     case ValidTextureOverload::kDimensionsStorageRO3d:
     case ValidTextureOverload::kDimensionsStorageWO3d:
       return {
-          R"(int3 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
+          R"(int3 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
 )",
-          "_tint_tmp",
+          "tint_tmp",
       };
     case ValidTextureOverload::kDimensionsCube:
     case ValidTextureOverload::kDimensionsDepthCube:
       return {
-          R"(int2 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y);
+          R"(int2 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y);
 )",
-          "_tint_tmp.xyy",
+          "tint_tmp.xyy",
       };
     case ValidTextureOverload::kDimensionsCubeArray:
     case ValidTextureOverload::kDimensionsDepthCubeArray:
       return {
-          R"(int3 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
+          R"(int3 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
 )",
-          "_tint_tmp.xyy",
+          "tint_tmp.xyy",
       };
     case ValidTextureOverload::kDimensions2dLevel:
     case ValidTextureOverload::kDimensionsDepth2dLevel:
       return {
-          R"(int3 _tint_tmp;
-  tint_texture.GetDimensions(1, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
+          R"(int3 tint_tmp;
+  tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
 )",
-          "_tint_tmp.xy",
+          "tint_tmp.xy",
       };
     case ValidTextureOverload::kDimensions2dArrayLevel:
     case ValidTextureOverload::kDimensionsDepth2dArrayLevel:
       return {
-          R"(int4 _tint_tmp;
-  tint_texture.GetDimensions(1, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
+          R"(int4 tint_tmp;
+  tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
 )",
-          "_tint_tmp.xy",
+          "tint_tmp.xy",
       };
     case ValidTextureOverload::kDimensions3dLevel:
       return {
-          R"(int4 _tint_tmp;
-  tint_texture.GetDimensions(1, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
+          R"(int4 tint_tmp;
+  tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
 )",
-          "_tint_tmp.xyz",
+          "tint_tmp.xyz",
       };
     case ValidTextureOverload::kDimensionsCubeLevel:
     case ValidTextureOverload::kDimensionsDepthCubeLevel:
       return {
-          R"(int3 _tint_tmp;
-  tint_texture.GetDimensions(1, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
+          R"(int3 tint_tmp;
+  tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
 )",
-          "_tint_tmp.xyy",
+          "tint_tmp.xyy",
       };
     case ValidTextureOverload::kDimensionsCubeArrayLevel:
     case ValidTextureOverload::kDimensionsDepthCubeArrayLevel:
       return {
-          R"(int4 _tint_tmp;
-  tint_texture.GetDimensions(1, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
+          R"(int4 tint_tmp;
+  tint_texture.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
 )",
-          "_tint_tmp.xyy",
+          "tint_tmp.xyy",
       };
     case ValidTextureOverload::kNumLayers2dArray:
     case ValidTextureOverload::kNumLayersDepth2dArray:
@@ -151,17 +151,17 @@
     case ValidTextureOverload::kNumLayersDepthCubeArray:
     case ValidTextureOverload::kNumLayersStorageWO2dArray:
       return {
-          R"(int3 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
+          R"(int3 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
 )",
-          "_tint_tmp.z",
+          "tint_tmp.z",
       };
     case ValidTextureOverload::kNumLayersMultisampled2dArray:
       return {
-          R"(int4 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
+          R"(int4 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
 )",
-          "_tint_tmp.z",
+          "tint_tmp.z",
       };
 
     case ValidTextureOverload::kNumLevels2d:
@@ -169,10 +169,10 @@
     case ValidTextureOverload::kNumLevelsDepth2d:
     case ValidTextureOverload::kNumLevelsDepthCube:
       return {
-          R"(int3 _tint_tmp;
-  tint_texture.GetDimensions(0, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
+          R"(int3 tint_tmp;
+  tint_texture.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
 )",
-          "_tint_tmp.z",
+          "tint_tmp.z",
       };
     case ValidTextureOverload::kNumLevels2dArray:
     case ValidTextureOverload::kNumLevels3d:
@@ -180,24 +180,24 @@
     case ValidTextureOverload::kNumLevelsDepth2dArray:
     case ValidTextureOverload::kNumLevelsDepthCubeArray:
       return {
-          R"(int4 _tint_tmp;
-  tint_texture.GetDimensions(0, _tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
+          R"(int4 tint_tmp;
+  tint_texture.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
 )",
-          "_tint_tmp.w",
+          "tint_tmp.w",
       };
     case ValidTextureOverload::kNumSamplesMultisampled2d:
       return {
-          R"(int3 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z);
+          R"(int3 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
 )",
-          "_tint_tmp.z",
+          "tint_tmp.z",
       };
     case ValidTextureOverload::kNumSamplesMultisampled2dArray:
       return {
-          R"(int4 _tint_tmp;
-  tint_texture.GetDimensions(_tint_tmp.x, _tint_tmp.y, _tint_tmp.z, _tint_tmp.w);
+          R"(int4 tint_tmp;
+  tint_texture.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
 )",
-          "_tint_tmp.w",
+          "tint_tmp.w",
       };
     case ValidTextureOverload::kSample1dF32:
       return R"(tint_texture.Sample(tint_sampler, 1.0f))";
diff --git a/src/writer/hlsl/generator_impl_test.cc b/src/writer/hlsl/generator_impl_test.cc
index a47cd9e..773c1de 100644
--- a/src/writer/hlsl/generator_impl_test.cc
+++ b/src/writer/hlsl/generator_impl_test.cc
@@ -47,9 +47,9 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_EQ(gen.generate_name("func_main_out"), "func_main_out");
-  ASSERT_EQ(gen.generate_name("func_main_out"), "func_main_out_0");
   ASSERT_EQ(gen.generate_name("func_main_out"), "func_main_out_3");
   ASSERT_EQ(gen.generate_name("func_main_out"), "func_main_out_4");
+  ASSERT_EQ(gen.generate_name("func_main_out"), "func_main_out_5");
 }
 
 struct HlslBuiltinData {