[ir][spirv-writer] Add type manager alias in tests

This allows us to write `ty.i32()` instead of `mod.Types().i32()` in
tests, which is a bit easier on the eyes.

Also use the `type::Manager` helpers in more places.

Bug: tint:1906
Change-Id: Ia88ae06b79f118910f3ccffda30c4d924ba77f59
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/135781
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_binary_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_binary_test.cc
index f6e5015..5ae21b3 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_binary_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_binary_test.cc
@@ -36,7 +36,7 @@
 TEST_P(Arithmetic, Scalar) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(
         utils::Vector{b.CreateBinary(params.kind, MakeScalarType(params.type),
                                      MakeScalarValue(params.type), MakeScalarValue(params.type)),
@@ -48,7 +48,7 @@
 TEST_P(Arithmetic, Vector) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(
         utils::Vector{b.CreateBinary(params.kind, MakeVectorType(params.type),
                                      MakeVectorValue(params.type), MakeVectorValue(params.type)),
@@ -83,7 +83,7 @@
 TEST_P(Bitwise, Scalar) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(
         utils::Vector{b.CreateBinary(params.kind, MakeScalarType(params.type),
                                      MakeScalarValue(params.type), MakeScalarValue(params.type)),
@@ -95,7 +95,7 @@
 TEST_P(Bitwise, Vector) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(
         utils::Vector{b.CreateBinary(params.kind, MakeVectorType(params.type),
                                      MakeVectorValue(params.type), MakeVectorValue(params.type)),
@@ -122,9 +122,9 @@
 TEST_P(Comparison, Scalar) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(
-        utils::Vector{b.CreateBinary(params.kind, mod.Types().bool_(), MakeScalarValue(params.type),
+        utils::Vector{b.CreateBinary(params.kind, ty.bool_(), MakeScalarValue(params.type),
                                      MakeScalarValue(params.type)),
                       b.Return(func)});
 
@@ -134,10 +134,10 @@
 TEST_P(Comparison, Vector) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(
-        utils::Vector{b.CreateBinary(params.kind, mod.Types().vec2(mod.Types().bool_()),
-                                     MakeVectorValue(params.type), MakeVectorValue(params.type)),
+        utils::Vector{b.CreateBinary(params.kind, ty.vec2(ty.bool_()), MakeVectorValue(params.type),
+                                     MakeVectorValue(params.type)),
 
                       b.Return(func)});
 
@@ -191,10 +191,9 @@
                     BinaryTestCase{kBool, ir::Binary::Kind::kNotEqual, "OpLogicalNotEqual"}));
 
 TEST_F(SpvGeneratorImplTest, Binary_Chain) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
-    auto* a = b.Subtract(mod.Types().i32(), b.Constant(1_i), b.Constant(2_i));
-    func->StartTarget()->SetInstructions(
-        utils::Vector{a, b.Add(mod.Types().i32(), a, a), b.Return(func)});
+    auto* func = b.CreateFunction("foo", ty.void_());
+    auto* a = b.Subtract(ty.i32(), b.Constant(1_i), b.Constant(2_i));
+    func->StartTarget()->SetInstructions(utils::Vector{a, b.Add(ty.i32(), a, a), b.Return(func)});
 
     generator_.EmitFunction(func);
     EXPECT_EQ(DumpModule(generator_.Module()), R"(OpName %1 "foo"
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc
index 3bc06c1..69d3f0f 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc
@@ -37,7 +37,7 @@
 TEST_P(Builtin_1arg, Scalar) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(
         utils::Vector{b.Builtin(MakeScalarType(params.type), params.function,
                                 utils::Vector{MakeScalarValue(params.type)}),
@@ -49,7 +49,7 @@
 TEST_P(Builtin_1arg, Vector) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(
         utils::Vector{b.Builtin(MakeVectorType(params.type), params.function,
                                 utils::Vector{MakeVectorValue(params.type)}),
@@ -110,7 +110,7 @@
 TEST_P(Builtin_2arg, Scalar) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(utils::Vector{
         b.Builtin(MakeScalarType(params.type), params.function,
                   utils::Vector{MakeScalarValue(params.type), MakeScalarValue(params.type)}),
@@ -122,7 +122,7 @@
 TEST_P(Builtin_2arg, Vector) {
     auto params = GetParam();
 
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(utils::Vector{
         b.Builtin(MakeVectorType(params.type), params.function,
                   utils::Vector{MakeVectorValue(params.type), MakeVectorValue(params.type)}),
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_constant_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_constant_test.cc
index 7cb240a..2875f63 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_constant_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_constant_test.cc
@@ -65,7 +65,7 @@
 TEST_F(SpvGeneratorImplTest, Constant_Vec4Bool) {
     auto const_bool = [&](bool val) { return mod.constant_values.Get(val); };
     auto* v = mod.constant_values.Composite(
-        mod.Types().vec4(mod.Types().bool_()),
+        ty.vec4(ty.bool_()),
         utils::Vector{const_bool(true), const_bool(false), const_bool(false), const_bool(true)});
 
     generator_.Constant(b.Constant(v));
@@ -79,7 +79,7 @@
 
 TEST_F(SpvGeneratorImplTest, Constant_Vec2i) {
     auto const_i32 = [&](float val) { return mod.constant_values.Get(i32(val)); };
-    auto* v = mod.constant_values.Composite(mod.Types().vec2(mod.Types().i32()),
+    auto* v = mod.constant_values.Composite(ty.vec2(ty.i32()),
                                             utils::Vector{const_i32(42), const_i32(-1)});
     generator_.Constant(b.Constant(v));
     EXPECT_EQ(DumpTypes(), R"(%3 = OpTypeInt 32 1
@@ -93,8 +93,7 @@
 TEST_F(SpvGeneratorImplTest, Constant_Vec3u) {
     auto const_u32 = [&](float val) { return mod.constant_values.Get(u32(val)); };
     auto* v = mod.constant_values.Composite(
-        mod.Types().vec3(mod.Types().u32()),
-        utils::Vector{const_u32(42), const_u32(0), const_u32(4000000000)});
+        ty.vec3(ty.u32()), utils::Vector{const_u32(42), const_u32(0), const_u32(4000000000)});
     generator_.Constant(b.Constant(v));
     EXPECT_EQ(DumpTypes(), R"(%3 = OpTypeInt 32 0
 %2 = OpTypeVector %3 3
@@ -108,7 +107,7 @@
 TEST_F(SpvGeneratorImplTest, Constant_Vec4f) {
     auto const_f32 = [&](float val) { return mod.constant_values.Get(f32(val)); };
     auto* v = mod.constant_values.Composite(
-        mod.Types().vec4(mod.Types().f32()),
+        ty.vec4(ty.f32()),
         utils::Vector{const_f32(42), const_f32(0), const_f32(0.25), const_f32(-1)});
     generator_.Constant(b.Constant(v));
     EXPECT_EQ(DumpTypes(), R"(%3 = OpTypeFloat 32
@@ -123,7 +122,7 @@
 
 TEST_F(SpvGeneratorImplTest, Constant_Vec2h) {
     auto const_f16 = [&](float val) { return mod.constant_values.Get(f16(val)); };
-    auto* v = mod.constant_values.Composite(mod.Types().vec2(mod.Types().f16()),
+    auto* v = mod.constant_values.Composite(ty.vec2(ty.f16()),
                                             utils::Vector{const_f16(42), const_f16(0.25)});
     generator_.Constant(b.Constant(v));
     EXPECT_EQ(DumpTypes(), R"(%3 = OpTypeFloat 16
@@ -136,16 +135,14 @@
 
 TEST_F(SpvGeneratorImplTest, Constant_Mat2x3f) {
     auto const_f32 = [&](float val) { return mod.constant_values.Get(f32(val)); };
-    auto* f32 = mod.Types().f32();
+    auto* f32 = ty.f32();
     auto* v = mod.constant_values.Composite(
-        mod.Types().mat2x3(f32),
+        ty.mat2x3(f32),
         utils::Vector{
             mod.constant_values.Composite(
-                mod.Types().vec3(f32),
-                utils::Vector{const_f32(42), const_f32(-1), const_f32(0.25)}),
+                ty.vec3(f32), utils::Vector{const_f32(42), const_f32(-1), const_f32(0.25)}),
             mod.constant_values.Composite(
-                mod.Types().vec3(f32),
-                utils::Vector{const_f32(-42), const_f32(0), const_f32(-0.25)}),
+                ty.vec3(f32), utils::Vector{const_f32(-42), const_f32(0), const_f32(-0.25)}),
         });
     generator_.Constant(b.Constant(v));
     EXPECT_EQ(DumpTypes(), R"(%4 = OpTypeFloat 32
@@ -165,19 +162,18 @@
 
 TEST_F(SpvGeneratorImplTest, Constant_Mat4x2h) {
     auto const_f16 = [&](float val) { return mod.constant_values.Get(f16(val)); };
-    auto* f16 = mod.Types().f16();
+    auto* f16 = ty.f16();
     auto* v = mod.constant_values.Composite(
-        mod.Types().mat4x2(f16),
-        utils::Vector{
-            mod.constant_values.Composite(mod.Types().vec2(f16),
-                                          utils::Vector{const_f16(42), const_f16(-1)}),
-            mod.constant_values.Composite(mod.Types().vec2(f16),
-                                          utils::Vector{const_f16(0), const_f16(0.25)}),
-            mod.constant_values.Composite(mod.Types().vec2(f16),
-                                          utils::Vector{const_f16(-42), const_f16(1)}),
-            mod.constant_values.Composite(mod.Types().vec2(f16),
-                                          utils::Vector{const_f16(0.5), const_f16(-0)}),
-        });
+        ty.mat4x2(f16), utils::Vector{
+                            mod.constant_values.Composite(
+                                ty.vec2(f16), utils::Vector{const_f16(42), const_f16(-1)}),
+                            mod.constant_values.Composite(
+                                ty.vec2(f16), utils::Vector{const_f16(0), const_f16(0.25)}),
+                            mod.constant_values.Composite(
+                                ty.vec2(f16), utils::Vector{const_f16(-42), const_f16(1)}),
+                            mod.constant_values.Composite(
+                                ty.vec2(f16), utils::Vector{const_f16(0.5), const_f16(-0)}),
+                        });
     generator_.Constant(b.Constant(v));
     EXPECT_EQ(DumpTypes(), R"(%4 = OpTypeFloat 16
 %3 = OpTypeVector %4 2
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_function_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_function_test.cc
index 6412bc6..0eaa859 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_function_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_function_test.cc
@@ -18,7 +18,7 @@
 namespace {
 
 TEST_F(SpvGeneratorImplTest, Function_Empty) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(utils::Vector{b.Return(func)});
 
     generator_.EmitFunction(func);
@@ -34,7 +34,7 @@
 
 // Test that we do not emit the same function type more than once.
 TEST_F(SpvGeneratorImplTest, Function_DeduplicateType) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
     func->StartTarget()->SetInstructions(utils::Vector{b.Return(func)});
 
     generator_.EmitFunction(func);
@@ -46,8 +46,8 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Function_EntryPoint_Compute) {
-    auto* func = b.CreateFunction("main", mod.Types().void_(),
-                                  ir::Function::PipelineStage::kCompute, {{32, 4, 1}});
+    auto* func =
+        b.CreateFunction("main", ty.void_(), ir::Function::PipelineStage::kCompute, {{32, 4, 1}});
     func->StartTarget()->SetInstructions(utils::Vector{b.Return(func)});
 
     generator_.EmitFunction(func);
@@ -64,8 +64,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Function_EntryPoint_Fragment) {
-    auto* func =
-        b.CreateFunction("main", mod.Types().void_(), ir::Function::PipelineStage::kFragment);
+    auto* func = b.CreateFunction("main", ty.void_(), ir::Function::PipelineStage::kFragment);
     func->StartTarget()->SetInstructions(utils::Vector{b.Return(func)});
 
     generator_.EmitFunction(func);
@@ -82,8 +81,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Function_EntryPoint_Vertex) {
-    auto* func =
-        b.CreateFunction("main", mod.Types().void_(), ir::Function::PipelineStage::kVertex);
+    auto* func = b.CreateFunction("main", ty.void_(), ir::Function::PipelineStage::kVertex);
     func->StartTarget()->SetInstructions(utils::Vector{b.Return(func)});
 
     generator_.EmitFunction(func);
@@ -99,16 +97,15 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Function_EntryPoint_Multiple) {
-    auto* f1 = b.CreateFunction("main1", mod.Types().void_(), ir::Function::PipelineStage::kCompute,
-                                {{32, 4, 1}});
+    auto* f1 =
+        b.CreateFunction("main1", ty.void_(), ir::Function::PipelineStage::kCompute, {{32, 4, 1}});
     f1->StartTarget()->SetInstructions(utils::Vector{b.Return(f1)});
 
-    auto* f2 = b.CreateFunction("main2", mod.Types().void_(), ir::Function::PipelineStage::kCompute,
-                                {{8, 2, 16}});
+    auto* f2 =
+        b.CreateFunction("main2", ty.void_(), ir::Function::PipelineStage::kCompute, {{8, 2, 16}});
     f2->StartTarget()->SetInstructions(utils::Vector{b.Return(f2)});
 
-    auto* f3 =
-        b.CreateFunction("main3", mod.Types().void_(), ir::Function::PipelineStage::kFragment);
+    auto* f3 = b.CreateFunction("main3", ty.void_(), ir::Function::PipelineStage::kFragment);
     f3->StartTarget()->SetInstructions(utils::Vector{b.Return(f3)});
 
     generator_.EmitFunction(f1);
@@ -141,7 +138,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Function_ReturnValue) {
-    auto* func = b.CreateFunction("foo", mod.Types().i32());
+    auto* func = b.CreateFunction("foo", ty.i32());
     func->StartTarget()->SetInstructions(
         utils::Vector{b.Return(func, utils::Vector{b.Constant(i32(42))})});
 
@@ -158,7 +155,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Function_Parameters) {
-    auto* i32 = mod.Types().i32();
+    auto* i32 = ty.i32();
     auto* x = b.FunctionParam(i32);
     auto* y = b.FunctionParam(i32);
     auto* result = b.Add(i32, x, y);
@@ -186,7 +183,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Function_Call) {
-    auto* i32_ty = mod.Types().i32();
+    auto* i32_ty = ty.i32();
     auto* x = b.FunctionParam(i32_ty);
     auto* y = b.FunctionParam(i32_ty);
     auto* result = b.Add(i32_ty, x, y);
@@ -195,7 +192,7 @@
     foo->StartTarget()->SetInstructions(
         utils::Vector{result, b.Return(foo, utils::Vector{result})});
 
-    auto* bar = b.CreateFunction("bar", mod.Types().void_());
+    auto* bar = b.CreateFunction("bar", ty.void_());
     bar->StartTarget()->SetInstructions(utils::Vector{
         b.UserCall(i32_ty, foo, utils::Vector{b.Constant(i32(2)), b.Constant(i32(3))}),
         b.Return(bar)});
@@ -226,12 +223,12 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Function_Call_Void) {
-    auto* foo = b.CreateFunction("foo", mod.Types().void_());
+    auto* foo = b.CreateFunction("foo", ty.void_());
     foo->StartTarget()->SetInstructions(utils::Vector{b.Return(foo)});
 
-    auto* bar = b.CreateFunction("bar", mod.Types().void_());
+    auto* bar = b.CreateFunction("bar", ty.void_());
     bar->StartTarget()->SetInstructions(
-        utils::Vector{b.UserCall(mod.Types().void_(), foo, utils::Empty), b.Return(bar)});
+        utils::Vector{b.UserCall(ty.void_(), foo, utils::Empty), b.Return(bar)});
 
     generator_.EmitFunction(foo);
     generator_.EmitFunction(bar);
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_if_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_if_test.cc
index 8d88852..792b735 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_if_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_if_test.cc
@@ -20,7 +20,7 @@
 namespace {
 
 TEST_F(SpvGeneratorImplTest, If_TrueEmpty_FalseEmpty) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* i = b.CreateIf(b.Constant(true));
     i->True()->SetInstructions(utils::Vector{b.ExitIf(i)});
@@ -46,7 +46,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, If_FalseEmpty) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* i = b.CreateIf(b.Constant(true));
     i->False()->SetInstructions(utils::Vector{b.ExitIf(i)});
@@ -54,7 +54,7 @@
 
     auto* true_block = i->True();
     true_block->SetInstructions(
-        utils::Vector{b.Add(mod.Types().i32(), b.Constant(1_i), b.Constant(1_i)), b.ExitIf(i)});
+        utils::Vector{b.Add(ty.i32(), b.Constant(1_i), b.Constant(1_i)), b.ExitIf(i)});
 
     func->StartTarget()->SetInstructions(utils::Vector{i});
 
@@ -80,7 +80,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, If_TrueEmpty) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* i = b.CreateIf(b.Constant(true));
     i->True()->SetInstructions(utils::Vector{b.ExitIf(i)});
@@ -88,7 +88,7 @@
 
     auto* false_block = i->False();
     false_block->SetInstructions(
-        utils::Vector{b.Add(mod.Types().i32(), b.Constant(1_i), b.Constant(1_i)), b.ExitIf(i)});
+        utils::Vector{b.Add(ty.i32(), b.Constant(1_i), b.Constant(1_i)), b.ExitIf(i)});
 
     func->StartTarget()->SetInstructions(utils::Vector{i});
 
@@ -114,7 +114,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, If_BothBranchesReturn) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* i = b.CreateIf(b.Constant(true));
     i->True()->SetInstructions(utils::Vector{b.Return(func)});
@@ -143,7 +143,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, If_Phi_SingleValue) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* merge_param = b.BlockParam(b.ir.Types().i32());
 
@@ -180,7 +180,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, If_Phi_SingleValue_TrueReturn) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* merge_param = b.BlockParam(b.ir.Types().i32());
 
@@ -217,7 +217,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, If_Phi_SingleValue_FalseReturn) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* merge_param = b.BlockParam(b.ir.Types().i32());
 
@@ -254,7 +254,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, If_Phi_MultipleValue) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* merge_param_0 = b.BlockParam(b.ir.Types().i32());
     auto* merge_param_1 = b.BlockParam(b.ir.Types().bool_());
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_loop_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_loop_test.cc
index 577d9d2..cb43f9d 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_loop_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_loop_test.cc
@@ -20,7 +20,7 @@
 namespace {
 
 TEST_F(SpvGeneratorImplTest, Loop_BreakIf) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* loop = b.CreateLoop();
 
@@ -54,7 +54,7 @@
 
 // Test that we still emit the continuing block with a back-edge, even when it is unreachable.
 TEST_F(SpvGeneratorImplTest, Loop_UnconditionalBreakInBody) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* loop = b.CreateLoop();
 
@@ -84,7 +84,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Loop_ConditionalBreakInBody) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* loop = b.CreateLoop();
 
@@ -127,7 +127,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Loop_ConditionalContinueInBody) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* loop = b.CreateLoop();
 
@@ -172,7 +172,7 @@
 // Test that we still emit the continuing block with a back-edge, and the merge block, even when
 // they are unreachable.
 TEST_F(SpvGeneratorImplTest, Loop_UnconditionalReturnInBody) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* loop = b.CreateLoop();
 
@@ -201,11 +201,11 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Loop_UseResultFromBodyInContinuing) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* loop = b.CreateLoop();
 
-    auto* result = b.Equal(mod.Types().i32(), b.Constant(1_i), b.Constant(2_i));
+    auto* result = b.Equal(ty.i32(), b.Constant(1_i), b.Constant(2_i));
 
     loop->Body()->Append(result);
     loop->Continuing()->Append(b.BreakIf(result, loop));
@@ -237,7 +237,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Loop_NestedLoopInBody) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* outer_loop = b.CreateLoop();
     auto* inner_loop = b.CreateLoop();
@@ -284,7 +284,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Loop_NestedLoopInContinuing) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* outer_loop = b.CreateLoop();
     auto* inner_loop = b.CreateLoop();
@@ -331,7 +331,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Loop_Phi_SingleValue) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* l = b.CreateLoop(utils::Vector{b.Constant(1_i)});
     func->StartTarget()->Append(l);
@@ -377,7 +377,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Loop_Phi_MultipleValue) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* l = b.CreateLoop(utils::Vector{b.Constant(1_i), b.Constant(false)});
     func->StartTarget()->Append(l);
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_switch_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_switch_test.cc
index 2773ae0..dca1dac 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_switch_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_switch_test.cc
@@ -20,7 +20,7 @@
 namespace {
 
 TEST_F(SpvGeneratorImplTest, Switch_Basic) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* swtch = b.CreateSwitch(b.Constant(42_i));
 
@@ -50,7 +50,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Switch_MultipleCases) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* swtch = b.CreateSwitch(b.Constant(42_i));
 
@@ -90,7 +90,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Switch_MultipleSelectorsPerCase) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* swtch = b.CreateSwitch(b.Constant(42_i));
 
@@ -133,7 +133,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Switch_AllCasesReturn) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* swtch = b.CreateSwitch(b.Constant(42_i));
 
@@ -171,7 +171,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Switch_ConditionalBreak) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* swtch = b.CreateSwitch(b.Constant(42_i));
 
@@ -218,7 +218,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Switch_Phi_SingleValue) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* merge_param = b.BlockParam(b.ir.Types().i32());
 
@@ -259,7 +259,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Switch_Phi_SingleValue_CaseReturn) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* s = b.CreateSwitch(b.Constant(42_i));
     auto* case_a = b.CreateCase(s, utils::Vector{ir::Switch::CaseSelector{b.Constant(1_i)},
@@ -298,7 +298,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Switch_Phi_MultipleValue) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
     auto* merge_param_0 = b.BlockParam(b.ir.Types().i32());
     auto* merge_param_1 = b.BlockParam(b.ir.Types().bool_());
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_type_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_type_test.cc
index d6c654f..5deefe0 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_type_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_type_test.cc
@@ -25,44 +25,43 @@
 namespace {
 
 TEST_F(SpvGeneratorImplTest, Type_Void) {
-    auto id = generator_.Type(mod.Types().void_());
+    auto id = generator_.Type(ty.void_());
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(), "%1 = OpTypeVoid\n");
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Bool) {
-    auto id = generator_.Type(mod.Types().bool_());
+    auto id = generator_.Type(ty.bool_());
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(), "%1 = OpTypeBool\n");
 }
 
 TEST_F(SpvGeneratorImplTest, Type_I32) {
-    auto id = generator_.Type(mod.Types().i32());
+    auto id = generator_.Type(ty.i32());
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(), "%1 = OpTypeInt 32 1\n");
 }
 
 TEST_F(SpvGeneratorImplTest, Type_U32) {
-    auto id = generator_.Type(mod.Types().u32());
+    auto id = generator_.Type(ty.u32());
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(), "%1 = OpTypeInt 32 0\n");
 }
 
 TEST_F(SpvGeneratorImplTest, Type_F32) {
-    auto id = generator_.Type(mod.Types().f32());
+    auto id = generator_.Type(ty.f32());
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(), "%1 = OpTypeFloat 32\n");
 }
 
 TEST_F(SpvGeneratorImplTest, Type_F16) {
-    auto id = generator_.Type(mod.Types().f16());
+    auto id = generator_.Type(ty.f16());
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(), "%1 = OpTypeFloat 16\n");
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Vec2i) {
-    auto* vec = mod.Types().Get<type::Vector>(mod.Types().i32(), 2u);
-    auto id = generator_.Type(vec);
+    auto id = generator_.Type(ty.vec2(ty.i32()));
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
               "%2 = OpTypeInt 32 1\n"
@@ -70,8 +69,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Vec3u) {
-    auto* vec = mod.Types().Get<type::Vector>(mod.Types().u32(), 3u);
-    auto id = generator_.Type(vec);
+    auto id = generator_.Type(ty.vec3(ty.u32()));
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
               "%2 = OpTypeInt 32 0\n"
@@ -79,17 +77,15 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Vec4f) {
-    auto* vec = mod.Types().Get<type::Vector>(mod.Types().f32(), 4u);
-    auto id = generator_.Type(vec);
+    auto id = generator_.Type(ty.vec4(ty.f32()));
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
               "%2 = OpTypeFloat 32\n"
               "%1 = OpTypeVector %2 4\n");
 }
 
-TEST_F(SpvGeneratorImplTest, Type_Vec4h) {
-    auto* vec = mod.Types().Get<type::Vector>(mod.Types().f16(), 2u);
-    auto id = generator_.Type(vec);
+TEST_F(SpvGeneratorImplTest, Type_Vec2h) {
+    auto id = generator_.Type(ty.vec2(ty.f16()));
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
               "%2 = OpTypeFloat 16\n"
@@ -97,8 +93,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Vec4Bool) {
-    auto* vec = mod.Types().Get<type::Vector>(mod.Types().bool_(), 4u);
-    auto id = generator_.Type(vec);
+    auto id = generator_.Type(ty.vec4(ty.bool_()));
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
               "%2 = OpTypeBool\n"
@@ -106,7 +101,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Mat2x3f) {
-    auto* vec = mod.Types().mat2x3(mod.Types().f32());
+    auto* vec = ty.mat2x3(ty.f32());
     auto id = generator_.Type(vec);
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
@@ -116,7 +111,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Mat4x2h) {
-    auto* vec = mod.Types().mat4x2(mod.Types().f16());
+    auto* vec = ty.mat4x2(ty.f16());
     auto id = generator_.Type(vec);
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
@@ -126,7 +121,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Array_DefaultStride) {
-    auto* arr = mod.Types().array(mod.Types().f32(), 4u);
+    auto* arr = ty.array(ty.f32(), 4u);
     auto id = generator_.Type(arr);
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
@@ -138,7 +133,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Array_ExplicitStride) {
-    auto* arr = mod.Types().array(mod.Types().f32(), 4u, 16);
+    auto* arr = ty.array(ty.f32(), 4u, 16);
     auto id = generator_.Type(arr);
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
@@ -150,7 +145,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Array_NestedArray) {
-    auto* arr = mod.Types().array(mod.Types().array(mod.Types().f32(), 64u), 4u);
+    auto* arr = ty.array(ty.array(ty.f32(), 64u), 4u);
     auto id = generator_.Type(arr);
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
@@ -166,7 +161,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_RuntimeArray_DefaultStride) {
-    auto* arr = mod.Types().runtime_array(mod.Types().f32());
+    auto* arr = ty.runtime_array(ty.f32());
     auto id = generator_.Type(arr);
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
@@ -176,7 +171,7 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_RuntimeArray_ExplicitStride) {
-    auto* arr = mod.Types().runtime_array(mod.Types().f32(), 16);
+    auto* arr = ty.runtime_array(ty.f32(), 16);
     auto id = generator_.Type(arr);
     EXPECT_EQ(id, 1u);
     EXPECT_EQ(DumpTypes(),
@@ -186,14 +181,13 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Struct) {
-    auto* str = mod.Types().Get<type::Struct>(
+    auto* str = ty.Get<type::Struct>(
         mod.symbols.Register("MyStruct"),
         utils::Vector{
-            mod.Types().Get<type::StructMember>(mod.symbols.Register("a"), mod.Types().f32(), 0u,
-                                                0u, 4u, 4u, type::StructMemberAttributes{}),
-            mod.Types().Get<type::StructMember>(mod.symbols.Register("b"),
-                                                mod.Types().vec4(mod.Types().i32()), 1u, 16u, 16u,
-                                                16u, type::StructMemberAttributes{}),
+            ty.Get<type::StructMember>(mod.symbols.Register("a"), ty.f32(), 0u, 0u, 4u, 4u,
+                                       type::StructMemberAttributes{}),
+            ty.Get<type::StructMember>(mod.symbols.Register("b"), ty.vec4(ty.i32()), 1u, 16u, 16u,
+                                       16u, type::StructMemberAttributes{}),
         },
         16u, 32u, 32u);
     auto id = generator_.Type(str);
@@ -213,17 +207,15 @@
 }
 
 TEST_F(SpvGeneratorImplTest, Type_Struct_MatrixLayout) {
-    auto* str = mod.Types().Get<type::Struct>(
+    auto* str = ty.Get<type::Struct>(
         mod.symbols.Register("MyStruct"),
         utils::Vector{
-            mod.Types().Get<type::StructMember>(mod.symbols.Register("m"),
-                                                mod.Types().mat3x3(mod.Types().f32()), 0u, 0u, 16u,
-                                                48u, type::StructMemberAttributes{}),
+            ty.Get<type::StructMember>(mod.symbols.Register("m"), ty.mat3x3(ty.f32()), 0u, 0u, 16u,
+                                       48u, type::StructMemberAttributes{}),
             // Matrices nested inside arrays need layout decorations on the struct member too.
-            mod.Types().Get<type::StructMember>(
-                mod.symbols.Register("arr"),
-                mod.Types().array(mod.Types().array(mod.Types().mat2x4(mod.Types().f16()), 4), 4),
-                1u, 64u, 8u, 64u, type::StructMemberAttributes{}),
+            ty.Get<type::StructMember>(mod.symbols.Register("arr"),
+                                       ty.array(ty.array(ty.mat2x4(ty.f16()), 4), 4), 1u, 64u, 8u,
+                                       64u, type::StructMemberAttributes{}),
         },
         16u, 128u, 128u);
     auto id = generator_.Type(str);
@@ -258,10 +250,10 @@
 // Test that we can emit multiple types.
 // Includes types with the same opcode but different parameters.
 TEST_F(SpvGeneratorImplTest, Type_Multiple) {
-    EXPECT_EQ(generator_.Type(mod.Types().i32()), 1u);
-    EXPECT_EQ(generator_.Type(mod.Types().u32()), 2u);
-    EXPECT_EQ(generator_.Type(mod.Types().f32()), 3u);
-    EXPECT_EQ(generator_.Type(mod.Types().f16()), 4u);
+    EXPECT_EQ(generator_.Type(ty.i32()), 1u);
+    EXPECT_EQ(generator_.Type(ty.u32()), 2u);
+    EXPECT_EQ(generator_.Type(ty.f32()), 3u);
+    EXPECT_EQ(generator_.Type(ty.f16()), 4u);
     EXPECT_EQ(DumpTypes(), R"(%1 = OpTypeInt 32 1
 %2 = OpTypeInt 32 0
 %3 = OpTypeFloat 32
@@ -271,7 +263,7 @@
 
 // Test that we do not emit the same type more than once.
 TEST_F(SpvGeneratorImplTest, Type_Deduplicate) {
-    auto* i32 = mod.Types().i32();
+    auto* i32 = ty.i32();
     EXPECT_EQ(generator_.Type(i32), 1u);
     EXPECT_EQ(generator_.Type(i32), 1u);
     EXPECT_EQ(generator_.Type(i32), 1u);
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_var_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_var_test.cc
index 8ad2c10..516e504 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_var_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_var_test.cc
@@ -21,11 +21,12 @@
 namespace {
 
 TEST_F(SpvGeneratorImplTest, FunctionVar_NoInit) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kFunction,
-                                              builtin::Access::kReadWrite);
-    func->StartTarget()->SetInstructions(utils::Vector{b.Declare(ty), b.Return(func)});
+    func->StartTarget()->SetInstructions(
+        utils::Vector{b.Declare(ty.pointer(ty.i32(), builtin::AddressSpace::kFunction,
+                                           builtin::Access::kReadWrite)),
+                      b.Return(func)});
 
     generator_.EmitFunction(func);
     EXPECT_EQ(DumpModule(generator_.Module()), R"(OpName %1 "foo"
@@ -42,11 +43,10 @@
 }
 
 TEST_F(SpvGeneratorImplTest, FunctionVar_WithInit) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kFunction,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* v = b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kFunction, builtin::Access::kReadWrite));
     v->SetInitializer(b.Constant(42_i));
 
     func->StartTarget()->SetInstructions(utils::Vector{v, b.Return(func)});
@@ -68,11 +68,10 @@
 }
 
 TEST_F(SpvGeneratorImplTest, FunctionVar_Name) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kFunction,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* v = b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kFunction, builtin::Access::kReadWrite));
     func->StartTarget()->SetInstructions(utils::Vector{v, b.Return(func)});
     mod.SetName(v, "myvar");
 
@@ -92,11 +91,10 @@
 }
 
 TEST_F(SpvGeneratorImplTest, FunctionVar_DeclInsideBlock) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kFunction,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* v = b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kFunction, builtin::Access::kReadWrite));
     v->SetInitializer(b.Constant(42_i));
 
     auto* i = b.CreateIf(b.Constant(true));
@@ -132,12 +130,11 @@
 }
 
 TEST_F(SpvGeneratorImplTest, FunctionVar_Load) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
-    auto* store_ty = mod.Types().i32();
-    auto* ty = mod.Types().Get<type::Pointer>(store_ty, builtin::AddressSpace::kFunction,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* store_ty = ty.i32();
+    auto* v = b.Declare(
+        ty.pointer(store_ty, builtin::AddressSpace::kFunction, builtin::Access::kReadWrite));
     func->StartTarget()->SetInstructions(utils::Vector{v, b.Load(v), b.Return(func)});
 
     generator_.EmitFunction(func);
@@ -156,11 +153,10 @@
 }
 
 TEST_F(SpvGeneratorImplTest, FunctionVar_Store) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_());
+    auto* func = b.CreateFunction("foo", ty.void_());
 
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kFunction,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* v = b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kFunction, builtin::Access::kReadWrite));
     func->StartTarget()->SetInstructions(
         utils::Vector{v, b.Store(v, b.Constant(42_i)), b.Return(func)});
 
@@ -181,9 +177,8 @@
 }
 
 TEST_F(SpvGeneratorImplTest, PrivateVar_NoInit) {
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kPrivate,
-                                              builtin::Access::kReadWrite);
-    b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{b.Declare(ty)});
+    b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kPrivate, builtin::Access::kReadWrite))});
 
     generator_.Generate();
     EXPECT_EQ(DumpModule(generator_.Module()), R"(OpCapability Shader
@@ -204,9 +199,8 @@
 }
 
 TEST_F(SpvGeneratorImplTest, PrivateVar_WithInit) {
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kPrivate,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* v = b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kPrivate, builtin::Access::kReadWrite));
     b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{v});
     v->SetInitializer(b.Constant(42_i));
 
@@ -230,9 +224,8 @@
 }
 
 TEST_F(SpvGeneratorImplTest, PrivateVar_Name) {
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kPrivate,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* v = b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kPrivate, builtin::Access::kReadWrite));
     b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{v});
     v->SetInitializer(b.Constant(42_i));
     mod.SetName(v, "myvar");
@@ -258,14 +251,12 @@
 }
 
 TEST_F(SpvGeneratorImplTest, PrivateVar_LoadAndStore) {
-    auto* func =
-        b.CreateFunction("foo", mod.Types().void_(), ir::Function::PipelineStage::kFragment);
+    auto* func = b.CreateFunction("foo", ty.void_(), ir::Function::PipelineStage::kFragment);
     mod.functions.Push(func);
 
-    auto* store_ty = mod.Types().i32();
-    auto* ty = mod.Types().Get<type::Pointer>(store_ty, builtin::AddressSpace::kPrivate,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* store_ty = ty.i32();
+    auto* v = b.Declare(
+        ty.pointer(store_ty, builtin::AddressSpace::kPrivate, builtin::Access::kReadWrite));
     b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{v});
     v->SetInitializer(b.Constant(42_i));
 
@@ -298,9 +289,8 @@
 }
 
 TEST_F(SpvGeneratorImplTest, WorkgroupVar) {
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kWorkgroup,
-                                              builtin::Access::kReadWrite);
-    b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{b.Declare(ty)});
+    b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kWorkgroup, builtin::Access::kReadWrite))});
 
     generator_.Generate();
     EXPECT_EQ(DumpModule(generator_.Module()), R"(OpCapability Shader
@@ -321,9 +311,8 @@
 }
 
 TEST_F(SpvGeneratorImplTest, WorkgroupVar_Name) {
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kWorkgroup,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* v = b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kWorkgroup, builtin::Access::kReadWrite));
     b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{v});
     mod.SetName(v, "myvar");
 
@@ -347,14 +336,13 @@
 }
 
 TEST_F(SpvGeneratorImplTest, WorkgroupVar_LoadAndStore) {
-    auto* func = b.CreateFunction("foo", mod.Types().void_(), ir::Function::PipelineStage::kCompute,
+    auto* func = b.CreateFunction("foo", ty.void_(), ir::Function::PipelineStage::kCompute,
                                   std::array{1u, 1u, 1u});
     mod.functions.Push(func);
 
-    auto* store_ty = mod.Types().i32();
-    auto* ty = mod.Types().Get<type::Pointer>(store_ty, builtin::AddressSpace::kWorkgroup,
-                                              builtin::Access::kReadWrite);
-    auto* v = b.Declare(ty);
+    auto* store_ty = ty.i32();
+    auto* v = b.Declare(
+        ty.pointer(store_ty, builtin::AddressSpace::kWorkgroup, builtin::Access::kReadWrite));
     b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{v});
 
     auto* load = b.Load(v);
@@ -385,9 +373,8 @@
 }
 
 TEST_F(SpvGeneratorImplTest, WorkgroupVar_ZeroInitializeWithExtension) {
-    auto* ty = mod.Types().Get<type::Pointer>(mod.Types().i32(), builtin::AddressSpace::kWorkgroup,
-                                              builtin::Access::kReadWrite);
-    b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{b.Declare(ty)});
+    b.CreateRootBlockIfNeeded()->SetInstructions(utils::Vector{b.Declare(
+        ty.pointer(ty.i32(), builtin::AddressSpace::kWorkgroup, builtin::Access::kReadWrite))});
 
     // Create a generator with the zero_init_workgroup_memory flag set to `true`.
     spirv::GeneratorImplIr gen(&mod, true);
diff --git a/src/tint/writer/spirv/ir/test_helper_ir.h b/src/tint/writer/spirv/ir/test_helper_ir.h
index add9eaf..791dfca 100644
--- a/src/tint/writer/spirv/ir/test_helper_ir.h
+++ b/src/tint/writer/spirv/ir/test_helper_ir.h
@@ -39,10 +39,12 @@
   public:
     SpvGeneratorTestHelperBase() : generator_(&mod, false) {}
 
-    /// The test module
+    /// The test module.
     ir::Module mod;
-    /// The test builder
+    /// The test builder.
     ir::Builder b{mod};
+    /// The type manager.
+    type::Manager& ty{mod.Types()};
 
   protected:
     /// The SPIR-V generator.
@@ -51,37 +53,35 @@
     /// @returns the disassembled types from the generated module.
     std::string DumpTypes() { return DumpInstructions(generator_.Module().Types()); }
 
-    /// Helper to make a scalar type corresponding to the element type `ty`.
-    /// @param ty the element type
+    /// Helper to make a scalar type corresponding to the element type `type`.
+    /// @param type the element type
     /// @returns the scalar type
-    const type::Type* MakeScalarType(TestElementType ty) {
-        switch (ty) {
+    const type::Type* MakeScalarType(TestElementType type) {
+        switch (type) {
             case kBool:
-                return mod.Types().bool_();
+                return ty.bool_();
             case kI32:
-                return mod.Types().i32();
+                return ty.i32();
             case kU32:
-                return mod.Types().u32();
+                return ty.u32();
             case kF32:
-                return mod.Types().f32();
+                return ty.f32();
             case kF16:
-                return mod.Types().f16();
+                return ty.f16();
         }
         return nullptr;
     }
 
-    /// Helper to make a vector type corresponding to the element type `ty`.
-    /// @param ty the element type
+    /// Helper to make a vector type corresponding to the element type `type`.
+    /// @param type the element type
     /// @returns the vector type
-    const type::Type* MakeVectorType(TestElementType ty) {
-        return mod.Types().vec2(MakeScalarType(ty));
-    }
+    const type::Type* MakeVectorType(TestElementType type) { return ty.vec2(MakeScalarType(type)); }
 
-    /// Helper to make a scalar value with the scalar type `ty`.
-    /// @param ty the element type
+    /// Helper to make a scalar value with the scalar type `type`.
+    /// @param type the element type
     /// @returns the scalar value
-    ir::Value* MakeScalarValue(TestElementType ty) {
-        switch (ty) {
+    ir::Value* MakeScalarValue(TestElementType type) {
+        switch (type) {
             case kBool:
                 return b.Constant(true);
             case kI32:
@@ -96,34 +96,34 @@
         return nullptr;
     }
 
-    /// Helper to make a vector value with an element type of `ty`.
-    /// @param ty the element type
+    /// Helper to make a vector value with an element type of `type`.
+    /// @param type the element type
     /// @returns the vector value
-    ir::Value* MakeVectorValue(TestElementType ty) {
-        switch (ty) {
+    ir::Value* MakeVectorValue(TestElementType type) {
+        switch (type) {
             case kBool:
                 return b.Constant(mod.constant_values.Composite(
-                    MakeVectorType(ty),
+                    MakeVectorType(type),
                     utils::Vector<const constant::Value*, 2>{mod.constant_values.Get(true),
                                                              mod.constant_values.Get(false)}));
             case kI32:
                 return b.Constant(mod.constant_values.Composite(
-                    MakeVectorType(ty),
+                    MakeVectorType(type),
                     utils::Vector<const constant::Value*, 2>{mod.constant_values.Get(i32(42)),
                                                              mod.constant_values.Get(i32(-10))}));
             case kU32:
                 return b.Constant(mod.constant_values.Composite(
-                    MakeVectorType(ty),
+                    MakeVectorType(type),
                     utils::Vector<const constant::Value*, 2>{mod.constant_values.Get(u32(42)),
                                                              mod.constant_values.Get(u32(10))}));
             case kF32:
                 return b.Constant(mod.constant_values.Composite(
-                    MakeVectorType(ty),
+                    MakeVectorType(type),
                     utils::Vector<const constant::Value*, 2>{mod.constant_values.Get(f32(42)),
                                                              mod.constant_values.Get(f32(-0.5))}));
             case kF16:
                 return b.Constant(mod.constant_values.Composite(
-                    MakeVectorType(ty),
+                    MakeVectorType(type),
                     utils::Vector<const constant::Value*, 2>{mod.constant_values.Get(f16(42)),
                                                              mod.constant_values.Get(f16(-0.5))}));
         }