[ir] Rename Builder::With() to Builder::Append()

This makes it a little clearer what it does.

Bug: tint:1718
Change-Id: I76bc2843f668b2787a7f510d8e6fb387622e9177
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/143085
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/core/ir/builder.h b/src/tint/lang/core/ir/builder.h
index 0d6a9fd..787097f 100644
--- a/src/tint/lang/core/ir/builder.h
+++ b/src/tint/lang/core/ir/builder.h
@@ -118,16 +118,16 @@
     /// Destructor
     ~Builder();
 
-    /// Creates a new builder wrapping the given block
-    /// @param b the block to set as the current block
+    /// Creates a new builder that will append to the given block
+    /// @param b the block to append new instructions to
     /// @returns the builder
-    Builder With(ir::Block* b) { return Builder(ir, b); }
+    Builder Append(ir::Block* b) { return Builder(ir, b); }
 
     /// Calls @p cb with the builder appending to block @p b
     /// @param b the block to set as the block to append to
     /// @param cb the function to call with the builder appending to block @p b
     template <typename FUNCTION>
-    void With(ir::Block* b, FUNCTION&& cb) {
+    void Append(ir::Block* b, FUNCTION&& cb) {
         TINT_SCOPED_ASSIGNMENT(current_block_, b);
         TINT_SCOPED_ASSIGNMENT(current_insertion_point_, nullptr);
         cb();
diff --git a/src/tint/lang/core/ir/from_program.cc b/src/tint/lang/core/ir/from_program.cc
index 10c4c3e..845b228 100644
--- a/src/tint/lang/core/ir/from_program.cc
+++ b/src/tint/lang/core/ir/from_program.cc
@@ -509,7 +509,7 @@
             return;
         }
 
-        auto b = builder_.With(current_block_);
+        auto b = builder_.Append(current_block_);
         if (auto* v = std::get_if<ir::Value*>(&lhs)) {
             b.Store(*v, rhs);
         } else if (auto ref = std::get_if<VectorRefElementAccess>(&lhs)) {
@@ -540,7 +540,7 @@
     }
 
     void EmitCompoundAssignment(ValueOrVecElAccess lhs, ir::Value* rhs, ast::BinaryOp op) {
-        auto b = builder_.With(current_block_);
+        auto b = builder_.Append(current_block_);
         if (auto* v = std::get_if<ir::Value*>(&lhs)) {
             auto* load = b.Load(*v);
             auto* ty = load->Result()->Type();
diff --git a/src/tint/lang/core/ir/to_program_inlining_test.cc b/src/tint/lang/core/ir/to_program_inlining_test.cc
index c93ef6e..d446c73 100644
--- a/src/tint/lang/core/ir/to_program_inlining_test.cc
+++ b/src/tint/lang/core/ir/to_program_inlining_test.cc
@@ -35,7 +35,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramInliningTest, LoadVar_ThenStoreVar_ThenUseLoad) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
@@ -59,11 +59,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramInliningTest, BinaryOpUnsequencedLHSThenUnsequencedRHS) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] {
+    b.Append(fn_b->Block(), [&] {
         auto* lhs = b.Add(ty.i32(), 1_i, 2_i);
         auto* rhs = b.Add(ty.i32(), 3_i, 4_i);
         auto* bin = b.Add(ty.i32(), lhs, rhs);
@@ -83,11 +83,11 @@
 
 TEST_F(IRToProgramInliningTest, BinaryOpSequencedLHSThenUnsequencedRHS) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] {
+    b.Append(fn_b->Block(), [&] {
         auto* lhs = b.Call(ty.i32(), fn_a, 1_i);
         auto* rhs = b.Add(ty.i32(), 2_i, 3_i);
         auto* bin = b.Add(ty.i32(), lhs, rhs);
@@ -107,11 +107,11 @@
 
 TEST_F(IRToProgramInliningTest, BinaryOpUnsequencedLHSThenSequencedRHS) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] {
+    b.Append(fn_b->Block(), [&] {
         auto* lhs = b.Add(ty.i32(), 1_i, 2_i);
         auto* rhs = b.Call(ty.i32(), fn_a, 3_i);
         auto* bin = b.Add(ty.i32(), lhs, rhs);
@@ -131,11 +131,11 @@
 
 TEST_F(IRToProgramInliningTest, BinaryOpSequencedLHSThenSequencedRHS) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] {
+    b.Append(fn_b->Block(), [&] {
         auto* lhs = b.Call(ty.i32(), fn_a, 1_i);
         auto* rhs = b.Call(ty.i32(), fn_a, 2_i);
         auto* bin = b.Add(ty.i32(), lhs, rhs);
@@ -155,11 +155,11 @@
 
 TEST_F(IRToProgramInliningTest, BinaryOpUnsequencedRHSThenUnsequencedLHS) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] {
+    b.Append(fn_b->Block(), [&] {
         auto* rhs = b.Add(ty.i32(), 3_i, 4_i);
         auto* lhs = b.Add(ty.i32(), 1_i, 2_i);
         auto* bin = b.Add(ty.i32(), lhs, rhs);
@@ -179,11 +179,11 @@
 
 TEST_F(IRToProgramInliningTest, BinaryOpUnsequencedRHSThenSequencedLHS) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] {
+    b.Append(fn_b->Block(), [&] {
         auto* rhs = b.Add(ty.i32(), 2_i, 3_i);
         auto* lhs = b.Call(ty.i32(), fn_a, 1_i);
         auto* bin = b.Add(ty.i32(), lhs, rhs);
@@ -203,11 +203,11 @@
 
 TEST_F(IRToProgramInliningTest, BinaryOpSequencedRHSThenUnsequencedLHS) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] {
+    b.Append(fn_b->Block(), [&] {
         auto* rhs = b.Call(ty.i32(), fn_a, 3_i);
         auto* lhs = b.Add(ty.i32(), 1_i, 2_i);
         auto* bin = b.Add(ty.i32(), lhs, rhs);
@@ -227,11 +227,11 @@
 
 TEST_F(IRToProgramInliningTest, BinaryOpSequencedRHSThenSequencedLHS) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] {
+    b.Append(fn_b->Block(), [&] {
         auto* rhs = b.Call(ty.i32(), fn_a, 2_i);
         auto* lhs = b.Call(ty.i32(), fn_a, 1_i);
         auto* bin = b.Add(ty.i32(), lhs, rhs);
@@ -255,16 +255,16 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramInliningTest, CallSequencedXYZ) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
     fn_b->SetParams(
         {b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32())});
 
     auto* fn_c = b.Function("c", ty.i32());
-    b.With(fn_c->Block(), [&] {
+    b.Append(fn_c->Block(), [&] {
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
@@ -289,16 +289,16 @@
 
 TEST_F(IRToProgramInliningTest, CallSequencedYXZ) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
     fn_b->SetParams(
         {b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32())});
 
     auto* fn_c = b.Function("c", ty.i32());
-    b.With(fn_c->Block(), [&] {
+    b.Append(fn_c->Block(), [&] {
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
@@ -324,16 +324,16 @@
 
 TEST_F(IRToProgramInliningTest, CallSequencedXZY) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
     fn_b->SetParams(
         {b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32())});
 
     auto* fn_c = b.Function("c", ty.i32());
-    b.With(fn_c->Block(), [&] {
+    b.Append(fn_c->Block(), [&] {
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
@@ -360,16 +360,16 @@
 
 TEST_F(IRToProgramInliningTest, CallSequencedZXY) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
     fn_b->SetParams(
         {b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32())});
 
     auto* fn_c = b.Function("c", ty.i32());
-    b.With(fn_c->Block(), [&] {
+    b.Append(fn_c->Block(), [&] {
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
@@ -395,16 +395,16 @@
 
 TEST_F(IRToProgramInliningTest, CallSequencedYZX) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
     fn_b->SetParams(
         {b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32())});
 
     auto* fn_c = b.Function("c", ty.i32());
-    b.With(fn_c->Block(), [&] {
+    b.Append(fn_c->Block(), [&] {
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
@@ -431,16 +431,16 @@
 
 TEST_F(IRToProgramInliningTest, CallSequencedZYX) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 0_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn_b = b.Function("b", ty.i32());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, 0_i); });
     fn_b->SetParams(
         {b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32()), b.FunctionParam(ty.i32())});
 
     auto* fn_c = b.Function("c", ty.i32());
-    b.With(fn_c->Block(), [&] {
+    b.Append(fn_c->Block(), [&] {
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
@@ -467,10 +467,10 @@
 
 TEST_F(IRToProgramInliningTest, LoadVar_ThenCallVoidFn_ThenUseLoad) {
     auto* fn_a = b.Function("a", ty.void_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a); });
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
@@ -494,10 +494,10 @@
 
 TEST_F(IRToProgramInliningTest, LoadVar_ThenCallUnusedi32Fn_ThenUseLoad) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
@@ -522,10 +522,10 @@
 
 TEST_F(IRToProgramInliningTest, LoadVar_ThenCalli32Fn_ThenUseLoadBeforeCall) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
@@ -548,10 +548,10 @@
 
 TEST_F(IRToProgramInliningTest, LoadVar_ThenCalli32Fn_ThenUseCallBeforeLoad) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
@@ -578,11 +578,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramInliningTest, Access_ArrayOfArrayOfArray_XYZ) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* arr = b.Var(ty.ptr<function, array<array<array<i32, 3>, 4>, 5>>());
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
@@ -605,11 +605,11 @@
 
 TEST_F(IRToProgramInliningTest, Access_ArrayOfArrayOfArray_YXZ) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* arr = b.Var(ty.ptr<function, array<array<array<i32, 3>, 4>, 5>>());
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
@@ -633,11 +633,11 @@
 
 TEST_F(IRToProgramInliningTest, Access_ArrayOfArrayOfArray_ZXY) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* arr = b.Var(ty.ptr<function, array<array<array<i32, 3>, 4>, 5>>());
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
@@ -661,11 +661,11 @@
 
 TEST_F(IRToProgramInliningTest, Access_ArrayOfArrayOfArray_ZYX) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* arr = b.Var(ty.ptr<function, array<array<array<i32, 3>, 4>, 5>>());
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
@@ -690,11 +690,11 @@
 
 TEST_F(IRToProgramInliningTest, Access_ArrayOfMat3x4f_XYZ) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn = b.Function("f", ty.f32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* arr = b.Construct(ty.array<mat3x4<f32>, 5>());
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
@@ -716,11 +716,11 @@
 
 TEST_F(IRToProgramInliningTest, Access_ArrayOfMat3x4f_YXZ) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn = b.Function("f", ty.f32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* arr = b.Construct(ty.array<mat3x4<f32>, 5>());
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
@@ -744,11 +744,11 @@
 
 TEST_F(IRToProgramInliningTest, Access_ArrayOfMat3x4f_ZXY) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn = b.Function("f", ty.f32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* arr = b.Construct(ty.array<mat3x4<f32>, 5>());
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
         auto* x = b.Call(ty.i32(), fn_a, 1_i);
@@ -772,11 +772,11 @@
 
 TEST_F(IRToProgramInliningTest, Access_ArrayOfMat3x4f_ZYX) {
     auto* fn_a = b.Function("a", ty.i32());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, 1_i); });
     fn_a->SetParams({b.FunctionParam(ty.i32())});
 
     auto* fn = b.Function("f", ty.f32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* arr = b.Construct(ty.array<mat3x4<f32>, 5>());
         auto* z = b.Call(ty.i32(), fn_a, 3_i);
         auto* y = b.Call(ty.i32(), fn_a, 2_i);
@@ -804,10 +804,10 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramInliningTest, UnsequencedOutsideIf) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Add(ty.i32(), 1_i, 2_i);
         auto* if_ = b.If(true);
-        b.With(if_->True(), [&] { b.Return(fn, v); });
+        b.Append(if_->True(), [&] { b.Return(fn, v); });
         b.Return(fn, 0_i);
     });
 
@@ -823,13 +823,13 @@
 
 TEST_F(IRToProgramInliningTest, SequencedOutsideIf) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         var->SetInitializer(b.Constant(1_i));
         auto* v_1 = b.Load(var);
         auto* v_2 = b.Add(ty.i32(), v_1, 2_i);
         auto* if_ = b.If(true);
-        b.With(if_->True(), [&] { b.Return(fn, v_2); });
+        b.Append(if_->True(), [&] { b.Return(fn, v_2); });
         b.Return(fn, 0_i);
     });
 
@@ -847,10 +847,10 @@
 
 TEST_F(IRToProgramInliningTest, UnsequencedUsedByIfCondition) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Equal(ty.bool_(), 1_i, 2_i);
         auto* if_ = b.If(v);
-        b.With(if_->True(), [&] { b.Return(fn, 3_i); });
+        b.Append(if_->True(), [&] { b.Return(fn, 3_i); });
         b.Return(fn, 0_i);
     });
 
@@ -866,13 +866,13 @@
 
 TEST_F(IRToProgramInliningTest, SequencedUsedByIfCondition) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         var->SetInitializer(b.Constant(1_i));
         auto* v_1 = b.Load(var);
         auto* v_2 = b.Equal(ty.bool_(), v_1, 2_i);
         auto* if_ = b.If(v_2);
-        b.With(if_->True(), [&] { b.Return(fn, 3_i); });
+        b.Append(if_->True(), [&] { b.Return(fn, 3_i); });
         b.Return(fn, 0_i);
     });
 
@@ -889,12 +889,12 @@
 
 TEST_F(IRToProgramInliningTest, LoadVar_ThenWriteToVarInIf_ThenUseLoad) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
         auto* if_ = b.If(true);
-        b.With(if_->True(), [&] {
+        b.Append(if_->True(), [&] {
             b.Store(var, 2_i);
             b.ExitIf(if_);
         });
@@ -919,11 +919,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramInliningTest, UnsequencedOutsideSwitch) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Add(ty.i32(), 1_i, 2_i);
         auto* switch_ = b.Switch(3_i);
         auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
-        b.With(case_, [&] { b.Return(fn, v); });
+        b.Append(case_, [&] { b.Return(fn, v); });
         b.Return(fn, 0_i);
     });
 
@@ -941,14 +941,14 @@
 
 TEST_F(IRToProgramInliningTest, SequencedOutsideSwitch) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         var->SetInitializer(b.Constant(1_i));
         auto* v_1 = b.Load(var);
         auto* v_2 = b.Add(ty.i32(), v_1, 2_i);
         auto* switch_ = b.Switch(3_i);
         auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
-        b.With(case_, [&] { b.Return(fn, v_2); });
+        b.Append(case_, [&] { b.Return(fn, v_2); });
         b.Return(fn, 0_i);
     });
 
@@ -968,11 +968,11 @@
 
 TEST_F(IRToProgramInliningTest, UnsequencedUsedBySwitchCondition) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Add(ty.i32(), 1_i, 2_i);
         auto* switch_ = b.Switch(v);
         auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
-        b.With(case_, [&] { b.Return(fn, 3_i); });
+        b.Append(case_, [&] { b.Return(fn, 3_i); });
         b.Return(fn, 0_i);
     });
 
@@ -990,13 +990,13 @@
 
 TEST_F(IRToProgramInliningTest, SequencedUsedBySwitchCondition) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         var->SetInitializer(b.Constant(1_i));
         auto* v_1 = b.Load(var);
         auto* switch_ = b.Switch(v_1);
         auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
-        b.With(case_, [&] { b.Return(fn, 3_i); });
+        b.Append(case_, [&] { b.Return(fn, 3_i); });
         b.Return(fn, 0_i);
     });
 
@@ -1015,13 +1015,13 @@
 
 TEST_F(IRToProgramInliningTest, LoadVar_ThenWriteToVarInSwitch_ThenUseLoad) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
         auto* switch_ = b.Switch(1_i);
         auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
-        b.With(case_, [&] {
+        b.Append(case_, [&] {
             b.Store(var, 2_i);
             b.ExitSwitch(switch_);
         });
@@ -1048,15 +1048,15 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramInliningTest, UnsequencedOutsideLoopInitializer) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         auto* v = b.Add(ty.i32(), 1_i, 2_i);
         auto* loop = b.Loop();
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             b.Store(var, v);
             b.NextIteration(loop);
         });
-        b.With(loop->Body(), [&] { b.ExitLoop(loop); });
+        b.Append(loop->Body(), [&] { b.ExitLoop(loop); });
         b.Return(fn, 0_i);
     });
 
@@ -1076,16 +1076,16 @@
 
 TEST_F(IRToProgramInliningTest, SequencedOutsideLoopInitializer) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         auto* v_1 = b.Load(var);
         auto* v_2 = b.Add(ty.i32(), v_1, 2_i);
         auto* loop = b.Loop();
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             b.Store(var, v_2);
             b.NextIteration(loop);
         });
-        b.With(loop->Body(), [&] { b.ExitLoop(loop); });
+        b.Append(loop->Body(), [&] { b.ExitLoop(loop); });
         b.Return(fn, 0_i);
     });
 
@@ -1106,16 +1106,16 @@
 
 TEST_F(IRToProgramInliningTest, LoadVar_ThenWriteToVarInLoopInitializer_ThenUseLoad) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
         auto* loop = b.Loop();
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             b.Store(var, 2_i);
             b.NextIteration(loop);
         });
-        b.With(loop->Body(), [&] { b.ExitLoop(loop); });
+        b.Append(loop->Body(), [&] { b.ExitLoop(loop); });
         b.Return(fn, load);
     });
 
@@ -1137,10 +1137,10 @@
 
 TEST_F(IRToProgramInliningTest, UnsequencedOutsideLoopBody) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Add(ty.i32(), 1_i, 2_i);
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] { b.Return(fn, v); });
+        b.Append(loop->Body(), [&] { b.Return(fn, v); });
         b.Return(fn, 0_i);
     });
 
@@ -1156,12 +1156,12 @@
 
 TEST_F(IRToProgramInliningTest, SequencedOutsideLoopBody) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         auto* v_1 = b.Load(var);
         auto* v_2 = b.Add(ty.i32(), v_1, 2_i);
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] { b.Return(fn, v_2); });
+        b.Append(loop->Body(), [&] { b.Return(fn, v_2); });
         b.Return(fn, 0_i);
     });
 
@@ -1179,12 +1179,12 @@
 
 TEST_F(IRToProgramInliningTest, LoadVar_ThenWriteToVarInLoopBody_ThenUseLoad) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             b.Store(var, 2_i);
             b.ExitLoop(loop);
         });
@@ -1207,11 +1207,11 @@
 
 TEST_F(IRToProgramInliningTest, UnsequencedOutsideLoopContinuing) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Add(ty.i32(), 1_i, 2_i);
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] { b.Continue(loop); });
-        b.With(loop->Continuing(), [&] { b.BreakIf(loop, b.Equal(ty.bool_(), v, 3_i)); });
+        b.Append(loop->Body(), [&] { b.Continue(loop); });
+        b.Append(loop->Continuing(), [&] { b.BreakIf(loop, b.Equal(ty.bool_(), v, 3_i)); });
         b.Return(fn, 0_i);
     });
 
@@ -1230,13 +1230,13 @@
 
 TEST_F(IRToProgramInliningTest, SequencedOutsideLoopContinuing) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         auto* v_1 = b.Load(var);
         auto* v_2 = b.Add(ty.i32(), v_1, 2_i);
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] { b.Continue(loop); });
-        b.With(loop->Continuing(), [&] { b.BreakIf(loop, b.Equal(ty.bool_(), v_2, 3_i)); });
+        b.Append(loop->Body(), [&] { b.Continue(loop); });
+        b.Append(loop->Continuing(), [&] { b.BreakIf(loop, b.Equal(ty.bool_(), v_2, 3_i)); });
         b.Return(fn, 0_i);
     });
 
@@ -1257,13 +1257,13 @@
 
 TEST_F(IRToProgramInliningTest, LoadVar_ThenWriteToVarInLoopContinuing_ThenUseLoad) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* load = b.Load(var);
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] { b.Continue(loop); });
-        b.With(loop->Continuing(), [&] {
+        b.Append(loop->Body(), [&] { b.Continue(loop); });
+        b.Append(loop->Continuing(), [&] {
             b.Store(var, 2_i);
             b.BreakIf(loop, true);
         });
@@ -1289,14 +1289,14 @@
 
 TEST_F(IRToProgramInliningTest, LoadVarInLoopInitializer_ThenReadAndWriteToVarInLoopBody) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* loop = b.Loop();
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             auto* load = b.Load(var);
             b.NextIteration(loop);
-            b.With(loop->Body(), [&] {
+            b.Append(loop->Body(), [&] {
                 b.Store(var, b.Add(ty.i32(), load, 1_i));
                 b.ExitLoop(loop);
             });
@@ -1322,15 +1322,15 @@
 
 TEST_F(IRToProgramInliningTest, LoadVarInLoopInitializer_ThenReadAndWriteToVarInLoopContinuing) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* loop = b.Loop();
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             auto* load = b.Load(var);
             b.NextIteration(loop);
-            b.With(loop->Body(), [&] { b.Continue(loop); });
-            b.With(loop->Continuing(), [&] {
+            b.Append(loop->Body(), [&] { b.Continue(loop); });
+            b.Append(loop->Continuing(), [&] {
                 b.Store(var, b.Add(ty.i32(), load, 1_i));
                 b.BreakIf(loop, true);
             });
@@ -1359,15 +1359,15 @@
 
 TEST_F(IRToProgramInliningTest, LoadVarInLoopBody_ThenReadAndWriteToVarInLoopContinuing) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, i32>());
         b.Store(var, 1_i);
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* load = b.Load(var);
             b.Continue(loop);
 
-            b.With(loop->Continuing(), [&] {
+            b.Append(loop->Continuing(), [&] {
                 b.Store(var, b.Add(ty.i32(), load, 1_i));
                 b.BreakIf(loop, true);
             });
diff --git a/src/tint/lang/core/ir/to_program_test.cc b/src/tint/lang/core/ir/to_program_test.cc
index 36e0272..bae2be9 100644
--- a/src/tint/lang/core/ir/to_program_test.cc
+++ b/src/tint/lang/core/ir/to_program_test.cc
@@ -107,7 +107,7 @@
     auto* i = b.FunctionParam("i", ty.i32());
     fn->SetParams({i});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Negation(ty.i32(), i)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Negation(ty.i32(), i)); });
 
     EXPECT_WGSL(R"(
 fn f(i : i32) -> i32 {
@@ -121,7 +121,7 @@
     auto* i = b.FunctionParam("i", ty.u32());
     fn->SetParams({i});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Complement(ty.u32(), i)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Complement(ty.u32(), i)); });
 
     EXPECT_WGSL(R"(
 fn f(i : u32) -> u32 {
@@ -135,7 +135,7 @@
     auto* i = b.FunctionParam("b", ty.bool_());
     fn->SetParams({i});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Not(ty.bool_(), i)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Not(ty.bool_(), i)); });
 
     EXPECT_WGSL(R"(
 fn f(b : bool) -> bool {
@@ -153,7 +153,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Add(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Add(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> i32 {
@@ -168,7 +168,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Subtract(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Subtract(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> i32 {
@@ -183,7 +183,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Multiply(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Multiply(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> i32 {
@@ -198,7 +198,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Divide(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Divide(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> i32 {
@@ -213,7 +213,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Modulo(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Modulo(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> i32 {
@@ -228,7 +228,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.And(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.And(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> i32 {
@@ -243,7 +243,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Or(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Or(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> i32 {
@@ -258,7 +258,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Xor(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Xor(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> i32 {
@@ -273,7 +273,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.Equal(ty.bool_(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Equal(ty.bool_(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> bool {
@@ -288,7 +288,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.NotEqual(ty.bool_(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.NotEqual(ty.bool_(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> bool {
@@ -303,7 +303,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.LessThan(ty.bool_(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.LessThan(ty.bool_(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> bool {
@@ -318,7 +318,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.GreaterThan(ty.bool_(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.GreaterThan(ty.bool_(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> bool {
@@ -333,7 +333,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.LessThanEqual(ty.bool_(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.LessThanEqual(ty.bool_(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> bool {
@@ -348,7 +348,7 @@
     auto* pb = b.FunctionParam("b", ty.i32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.GreaterThanEqual(ty.bool_(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.GreaterThanEqual(ty.bool_(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : i32) -> bool {
@@ -363,7 +363,7 @@
     auto* pb = b.FunctionParam("b", ty.u32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.ShiftLeft(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.ShiftLeft(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : u32) -> i32 {
@@ -378,7 +378,7 @@
     auto* pb = b.FunctionParam("b", ty.u32());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] { b.Return(fn, b.ShiftRight(ty.i32(), pa, pb)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.ShiftRight(ty.i32(), pa, pb)); });
 
     EXPECT_WGSL(R"(
 fn f(a : i32, b : u32) -> i32 {
@@ -396,11 +396,11 @@
     auto* pb = b.FunctionParam("b", ty.bool_());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if_ = b.If(pa);
         if_->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if_->True(), [&] { b.ExitIf(if_, pb); });
-        b.With(if_->False(), [&] { b.ExitIf(if_, false); });
+        b.Append(if_->True(), [&] { b.ExitIf(if_, pb); });
+        b.Append(if_->False(), [&] { b.ExitIf(if_, false); });
 
         b.Return(fn, if_->Result(0));
     });
@@ -419,16 +419,16 @@
     auto* pc = b.FunctionParam("c", ty.bool_());
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(pa);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, pb); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, false); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, pb); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, false); });
 
         auto* if2 = b.If(if1->Result(0));
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, pc); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, pc); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
 
         b.Return(fn, if2->Result(0));
     });
@@ -447,18 +447,18 @@
     auto* pc = b.FunctionParam("c", ty.bool_());
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(pa);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] {
+        b.Append(if1->True(), [&] {
             auto* if2 = b.If(pb);
             if2->SetResults(b.InstructionResult(ty.bool_()));
-            b.With(if2->True(), [&] { b.ExitIf(if2, pc); });
-            b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+            b.Append(if2->True(), [&] { b.ExitIf(if2, pc); });
+            b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
 
             b.ExitIf(if1, if2->Result(0));
         });
-        b.With(if1->False(), [&] { b.ExitIf(if1, false); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, false); });
         b.Return(fn, if1->Result(0));
     });
 
@@ -475,11 +475,11 @@
     auto* pb = b.FunctionParam("b", ty.bool_());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if_ = b.If(pa);
         if_->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if_->True(), [&] { b.ExitIf(if_, pb); });
-        b.With(if_->False(), [&] { b.ExitIf(if_, false); });
+        b.Append(if_->True(), [&] { b.ExitIf(if_, pb); });
+        b.Append(if_->False(), [&] { b.ExitIf(if_, false); });
 
         mod.SetName(if_->Result(0), "l");
         b.Return(fn, if_->Result(0));
@@ -500,16 +500,16 @@
     auto* pc = b.FunctionParam("c", ty.bool_());
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(pa);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, pb); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, false); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, pb); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, false); });
 
         auto* if2 = b.If(if1->Result(0));
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, pc); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, pc); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
 
         mod.SetName(if2->Result(0), "l");
         b.Return(fn, if2->Result(0));
@@ -530,18 +530,18 @@
     auto* pc = b.FunctionParam("c", ty.bool_());
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(pa);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] {
+        b.Append(if1->True(), [&] {
             auto* if2 = b.If(pb);
             if2->SetResults(b.InstructionResult(ty.bool_()));
-            b.With(if2->True(), [&] { b.ExitIf(if2, pc); });
-            b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+            b.Append(if2->True(), [&] { b.ExitIf(if2, pc); });
+            b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
 
             b.ExitIf(if1, if2->Result(0));
         });
-        b.With(if1->False(), [&] { b.ExitIf(if1, false); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, false); });
 
         mod.SetName(if1->Result(0), "l");
         b.Return(fn, if1->Result(0));
@@ -557,18 +557,18 @@
 
 TEST_F(IRToProgramTest, ShortCircuit_And_Call_2) {
     auto* fn_a = b.Function("a", ty.bool_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, true); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, true); });
 
     auto* fn_b = b.Function("b", ty.bool_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn = b.Function("f", ty.bool_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if_ = b.If(b.Call(ty.bool_(), fn_a));
         if_->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if_->True(), [&] { b.ExitIf(if_, b.Call(ty.bool_(), fn_b)); });
-        b.With(if_->False(), [&] { b.ExitIf(if_, false); });
+        b.Append(if_->True(), [&] { b.ExitIf(if_, b.Call(ty.bool_(), fn_b)); });
+        b.Append(if_->False(), [&] { b.ExitIf(if_, false); });
 
         b.Return(fn, if_->Result(0));
     });
@@ -590,26 +590,26 @@
 
 TEST_F(IRToProgramTest, ShortCircuit_And_Call_3_ab_c) {
     auto* fn_a = b.Function("a", ty.bool_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, true); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, true); });
 
     auto* fn_b = b.Function("b", ty.bool_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn_c = b.Function("c", ty.bool_());
-    b.With(fn_c->Block(), [&] { b.Return(fn_c, true); });
+    b.Append(fn_c->Block(), [&] { b.Return(fn_c, true); });
 
     auto* fn = b.Function("f", ty.bool_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(b.Call(ty.bool_(), fn_a));
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_b)); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, false); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_b)); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, false); });
 
         auto* if2 = b.If(if1->Result(0));
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, b.Call(ty.bool_(), fn_c)); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, b.Call(ty.bool_(), fn_c)); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
 
         b.Return(fn, if2->Result(0));
     });
@@ -635,28 +635,28 @@
 
 TEST_F(IRToProgramTest, ShortCircuit_And_Call_3_a_bc) {
     auto* fn_a = b.Function("a", ty.bool_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, true); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, true); });
 
     auto* fn_b = b.Function("b", ty.bool_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn_c = b.Function("c", ty.bool_());
-    b.With(fn_c->Block(), [&] { b.Return(fn_c, true); });
+    b.Append(fn_c->Block(), [&] { b.Return(fn_c, true); });
 
     auto* fn = b.Function("f", ty.bool_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(b.Call(ty.bool_(), fn_a));
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] {
+        b.Append(if1->True(), [&] {
             auto* if2 = b.If(b.Call(ty.bool_(), fn_b));
             if2->SetResults(b.InstructionResult(ty.bool_()));
-            b.With(if2->True(), [&] { b.ExitIf(if2, b.Call(ty.bool_(), fn_c)); });
-            b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+            b.Append(if2->True(), [&] { b.ExitIf(if2, b.Call(ty.bool_(), fn_c)); });
+            b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
 
             b.ExitIf(if1, if2->Result(0));
         });
-        b.With(if1->False(), [&] { b.ExitIf(if1, false); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, false); });
 
         b.Return(fn, if1->Result(0));
     });
@@ -686,11 +686,11 @@
     auto* pb = b.FunctionParam("b", ty.bool_());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if_ = b.If(pa);
         if_->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if_->True(), [&] { b.ExitIf(if_, true); });
-        b.With(if_->False(), [&] { b.ExitIf(if_, pb); });
+        b.Append(if_->True(), [&] { b.ExitIf(if_, true); });
+        b.Append(if_->False(), [&] { b.ExitIf(if_, pb); });
 
         b.Return(fn, if_->Result(0));
     });
@@ -709,16 +709,16 @@
     auto* pc = b.FunctionParam("c", ty.bool_());
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(pa);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, pb); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, pb); });
 
         auto* if2 = b.If(if1->Result(0));
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, true); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, pc); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, true); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, pc); });
 
         b.Return(fn, if2->Result(0));
     });
@@ -737,15 +737,15 @@
     auto* pc = b.FunctionParam("c", ty.bool_());
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(pa);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] {
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] {
             auto* if2 = b.If(pb);
             if2->SetResults(b.InstructionResult(ty.bool_()));
-            b.With(if2->True(), [&] { b.ExitIf(if2, true); });
-            b.With(if2->False(), [&] { b.ExitIf(if2, pc); });
+            b.Append(if2->True(), [&] { b.ExitIf(if2, true); });
+            b.Append(if2->False(), [&] { b.ExitIf(if2, pc); });
 
             b.ExitIf(if1, if2->Result(0));
         });
@@ -766,11 +766,11 @@
     auto* pb = b.FunctionParam("b", ty.bool_());
     fn->SetParams({pa, pb});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if_ = b.If(pa);
         if_->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if_->True(), [&] { b.ExitIf(if_, true); });
-        b.With(if_->False(), [&] { b.ExitIf(if_, pb); });
+        b.Append(if_->True(), [&] { b.ExitIf(if_, true); });
+        b.Append(if_->False(), [&] { b.ExitIf(if_, pb); });
 
         mod.SetName(if_->Result(0), "l");
         b.Return(fn, if_->Result(0));
@@ -791,16 +791,16 @@
     auto* pc = b.FunctionParam("c", ty.bool_());
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(pa);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, pb); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, pb); });
 
         auto* if2 = b.If(if1->Result(0));
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, true); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, pc); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, true); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, pc); });
 
         mod.SetName(if2->Result(0), "l");
         b.Return(fn, if2->Result(0));
@@ -821,15 +821,15 @@
     auto* pc = b.FunctionParam("c", ty.bool_());
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(pa);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] {
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] {
             auto* if2 = b.If(pb);
             if2->SetResults(b.InstructionResult(ty.bool_()));
-            b.With(if2->True(), [&] { b.ExitIf(if2, true); });
-            b.With(if2->False(), [&] { b.ExitIf(if2, pc); });
+            b.Append(if2->True(), [&] { b.ExitIf(if2, true); });
+            b.Append(if2->False(), [&] { b.ExitIf(if2, pc); });
 
             b.ExitIf(if1, if2->Result(0));
         });
@@ -848,18 +848,18 @@
 
 TEST_F(IRToProgramTest, ShortCircuit_Or_Call_2) {
     auto* fn_a = b.Function("a", ty.bool_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, true); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, true); });
 
     auto* fn_b = b.Function("b", ty.bool_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn = b.Function("f", ty.bool_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if_ = b.If(b.Call(ty.bool_(), fn_a));
         if_->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if_->True(), [&] { b.ExitIf(if_, true); });
-        b.With(if_->False(), [&] { b.ExitIf(if_, b.Call(ty.bool_(), fn_b)); });
+        b.Append(if_->True(), [&] { b.ExitIf(if_, true); });
+        b.Append(if_->False(), [&] { b.ExitIf(if_, b.Call(ty.bool_(), fn_b)); });
 
         b.Return(fn, if_->Result(0));
     });
@@ -881,26 +881,26 @@
 
 TEST_F(IRToProgramTest, ShortCircuit_Or_Call_3_ab_c) {
     auto* fn_a = b.Function("a", ty.bool_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, true); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, true); });
 
     auto* fn_b = b.Function("b", ty.bool_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn_c = b.Function("c", ty.bool_());
-    b.With(fn_c->Block(), [&] { b.Return(fn_c, true); });
+    b.Append(fn_c->Block(), [&] { b.Return(fn_c, true); });
 
     auto* fn = b.Function("f", ty.bool_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(b.Call(ty.bool_(), fn_a));
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_b)); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_b)); });
 
         auto* if2 = b.If(if1->Result(0));
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, true); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, b.Call(ty.bool_(), fn_c)); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, true); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, b.Call(ty.bool_(), fn_c)); });
 
         b.Return(fn, if2->Result(0));
     });
@@ -926,25 +926,25 @@
 
 TEST_F(IRToProgramTest, ShortCircuit_Or_Call_3_a_bc) {
     auto* fn_a = b.Function("a", ty.bool_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, true); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, true); });
 
     auto* fn_b = b.Function("b", ty.bool_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn_c = b.Function("c", ty.bool_());
-    b.With(fn_c->Block(), [&] { b.Return(fn_c, true); });
+    b.Append(fn_c->Block(), [&] { b.Return(fn_c, true); });
 
     auto* fn = b.Function("f", ty.bool_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(b.Call(ty.bool_(), fn_a));
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] {
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] {
             auto* if2 = b.If(b.Call(ty.bool_(), fn_b));
             if2->SetResults(b.InstructionResult(ty.bool_()));
-            b.With(if2->True(), [&] { b.ExitIf(if2, true); });
-            b.With(if2->False(), [&] { b.ExitIf(if2, b.Call(ty.bool_(), fn_c)); });
+            b.Append(if2->True(), [&] { b.ExitIf(if2, true); });
+            b.Append(if2->False(), [&] { b.ExitIf(if2, b.Call(ty.bool_(), fn_c)); });
 
             b.ExitIf(if1, if2->Result(0));
         });
@@ -973,33 +973,33 @@
 
 TEST_F(IRToProgramTest, ShortCircuit_Mixed) {
     auto* fn_b = b.Function("b", ty.bool_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn_d = b.Function("d", ty.bool_());
-    b.With(fn_d->Block(), [&] { b.Return(fn_d, true); });
+    b.Append(fn_d->Block(), [&] { b.Return(fn_d, true); });
 
     auto* fn = b.Function("f", ty.bool_());
     auto* pa = b.FunctionParam("a", ty.bool_());
     auto* pc = b.FunctionParam("c", ty.bool_());
     fn->SetParams({pa, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(pa);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_b)); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_b)); });
 
         auto* if2 = b.If(if1->Result(0));
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] {
+        b.Append(if2->True(), [&] {
             auto* if3 = b.If(pc);
             if3->SetResults(b.InstructionResult(ty.bool_()));
-            b.With(if3->True(), [&] { b.ExitIf(if3, true); });
-            b.With(if3->False(), [&] { b.ExitIf(if3, b.Call(ty.bool_(), fn_d)); });
+            b.Append(if3->True(), [&] { b.ExitIf(if3, true); });
+            b.Append(if3->False(), [&] { b.ExitIf(if3, b.Call(ty.bool_(), fn_d)); });
 
             b.ExitIf(if2, if3->Result(0));
         });
-        b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
 
         mod.SetName(if2->Result(0), "l");
         b.Return(fn, if2->Result(0));
@@ -1028,7 +1028,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramTest, NonShortCircuit_And_ParamCallParam_a_bc) {
     auto* fn_b = b.Function("b", ty.bool_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn = b.Function("f", ty.bool_());
     auto* pa = b.FunctionParam(ty.bool_());
@@ -1037,17 +1037,17 @@
     mod.SetName(pc, "c");
     fn->SetParams({pa, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         // 'b() && c' is evaluated before 'a'.
         auto* if1 = b.If(b.Call(ty.bool_(), fn_b));
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, pc); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, false); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, pc); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, false); });
 
         auto* if2 = b.If(pa);
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, if1->Result(0)); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, if1->Result(0)); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
         b.Return(fn, if2->Result(0));
     });
 
@@ -1066,29 +1066,29 @@
 TEST_F(IRToProgramTest, NonShortCircuit_And_Call_3_a_bc) {
     auto* fn_a = b.Function("a", ty.bool_());
 
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, true); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, true); });
 
     auto* fn_b = b.Function("b", ty.bool_());
 
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn_c = b.Function("c", ty.bool_());
 
-    b.With(fn_c->Block(), [&] { b.Return(fn_c, true); });
+    b.Append(fn_c->Block(), [&] { b.Return(fn_c, true); });
 
     auto* fn = b.Function("f", ty.bool_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         // 'b() && c()' is evaluated before 'a()'.
         auto* if1 = b.If(b.Call(ty.bool_(), fn_b));
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_c)); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, false); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_c)); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, false); });
 
         auto* if2 = b.If(b.Call(ty.bool_(), fn_a));
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, if1->Result(0)); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, if1->Result(0)); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
 
         b.Return(fn, if2->Result(0));
     });
@@ -1123,18 +1123,18 @@
     mod.SetName(pc, "c");
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         // 'b && c' is evaluated outside the true block of if2, but these can be moved to the RHS
         // of the 'a &&' as the 'b && c' is not sequenced.
         auto* if1 = b.If(pb);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, pc); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, false); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, pc); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, false); });
 
         auto* if2 = b.If(pa);
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, if1->Result(0)); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, false); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, if1->Result(0)); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, false); });
 
         b.Return(fn, if2->Result(0));
     });
@@ -1149,7 +1149,7 @@
 
 TEST_F(IRToProgramTest, NonShortCircuit_Or_ParamCallParam_a_bc) {
     auto* fn_b = b.Function("b", ty.bool_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn = b.Function("f", ty.bool_());
     auto* pa = b.FunctionParam(ty.bool_());
@@ -1158,17 +1158,17 @@
     mod.SetName(pc, "c");
     fn->SetParams({pa, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         // 'b() && c' is evaluated before 'a'.
         auto* if1 = b.If(b.Call(ty.bool_(), fn_b));
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, pc); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, pc); });
 
         auto* if2 = b.If(pa);
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, true); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, if1->Result(0)); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, true); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, if1->Result(0)); });
 
         mod.SetName(if2->Result(0), "l");
         b.Return(fn, if2->Result(0));
@@ -1190,28 +1190,28 @@
 TEST_F(IRToProgramTest, NonShortCircuit_Or_Call_3_a_bc) {
     auto* fn_a = b.Function("a", ty.bool_());
 
-    b.With(fn_a->Block(), [&] { b.Return(fn_a, true); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a, true); });
 
     auto* fn_b = b.Function("b", ty.bool_());
 
-    b.With(fn_b->Block(), [&] { b.Return(fn_b, true); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b, true); });
 
     auto* fn_c = b.Function("c", ty.bool_());
 
-    b.With(fn_c->Block(), [&] { b.Return(fn_c, true); });
+    b.Append(fn_c->Block(), [&] { b.Return(fn_c, true); });
 
     auto* fn = b.Function("f", ty.bool_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if1 = b.If(b.Call(ty.bool_(), fn_b));
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_c)); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, b.Call(ty.bool_(), fn_c)); });
 
         auto* if2 = b.If(b.Call(ty.bool_(), fn_a));
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, true); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, if1->Result(0)); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, true); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, if1->Result(0)); });
 
         b.Return(fn, if2->Result(0));
     });
@@ -1246,18 +1246,18 @@
     mod.SetName(pc, "c");
     fn->SetParams({pa, pb, pc});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         // 'b || c' is evaluated outside the true block of if2, but these can be moved to the RHS
         // of the 'a ||' as the 'b || c' is not sequenced.
         auto* if1 = b.If(pb);
         if1->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if1->True(), [&] { b.ExitIf(if1, true); });
-        b.With(if1->False(), [&] { b.ExitIf(if1, pc); });
+        b.Append(if1->True(), [&] { b.ExitIf(if1, true); });
+        b.Append(if1->False(), [&] { b.ExitIf(if1, pc); });
 
         auto* if2 = b.If(pa);
         if2->SetResults(b.InstructionResult(ty.bool_()));
-        b.With(if2->True(), [&] { b.ExitIf(if2, true); });
-        b.With(if2->False(), [&] { b.ExitIf(if2, if1->Result(0)); });
+        b.Append(if2->True(), [&] { b.ExitIf(if2, true); });
+        b.Append(if2->False(), [&] { b.ExitIf(if2, if1->Result(0)); });
 
         b.Return(fn, if2->Result(0));
     });
@@ -1276,7 +1276,7 @@
 TEST_F(IRToProgramTest, CompoundAssign_Increment) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         b.Store(v, b.Add(ty.i32(), b.Load(v), 1_i));
 
@@ -1294,7 +1294,7 @@
 TEST_F(IRToProgramTest, CompoundAssign_Decrement) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         b.Store(v, b.Subtract(ty.i32(), b.Load(v), 1_i));
 
@@ -1312,7 +1312,7 @@
 TEST_F(IRToProgramTest, CompoundAssign_Add) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         b.Store(v, b.Add(ty.i32(), b.Load(v), 8_i));
 
@@ -1330,7 +1330,7 @@
 TEST_F(IRToProgramTest, CompoundAssign_Subtract) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         b.Store(v, b.Subtract(ty.i32(), b.Load(v), 8_i));
 
@@ -1348,7 +1348,7 @@
 TEST_F(IRToProgramTest, CompoundAssign_Multiply) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         b.Store(v, b.Multiply(ty.i32(), b.Load(v), 8_i));
 
@@ -1366,7 +1366,7 @@
 TEST_F(IRToProgramTest, CompoundAssign_Divide) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         b.Store(v, b.Divide(ty.i32(), b.Load(v), 8_i));
 
@@ -1384,7 +1384,7 @@
 TEST_F(IRToProgramTest, CompoundAssign_Xor) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         b.Store(v, b.Xor(ty.i32(), b.Load(v), 8_i));
 
@@ -1407,7 +1407,7 @@
     auto* i = b.FunctionParam("i", ty.u32());
     fn->SetParams({i});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Complement(ty.u32(), i);
         b.Return(fn, v);
         mod.SetName(v, "v");
@@ -1426,7 +1426,7 @@
     auto* i = b.FunctionParam("i", ty.i32());
     fn->SetParams({i});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Multiply(ty.i32(), i, 2_i);
         b.Return(fn, b.Add(ty.i32(), v, v));
         mod.SetName(v, "v");
@@ -1446,7 +1446,7 @@
 TEST_F(IRToProgramTest, FunctionScopeVar_i32) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {  //
+    b.Append(fn->Block(), [&] {  //
         b.Var("i", ty.ptr<function, i32>());
 
         b.Return(fn);
@@ -1462,7 +1462,7 @@
 TEST_F(IRToProgramTest, FunctionScopeVar_i32_InitLiteral) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* i = b.Var("i", ty.ptr<function, i32>());
         i->SetInitializer(b.Constant(42_i));
 
@@ -1479,7 +1479,7 @@
 TEST_F(IRToProgramTest, FunctionScopeVar_Chained) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* va = b.Var("a", ty.ptr<function, i32>());
         va->SetInitializer(b.Constant(42_i));
 
@@ -1508,15 +1508,15 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramTest, If_CallFn) {
     auto* fn_a = b.Function("a", ty.void_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a); });
 
     auto* fn = b.Function("f", ty.void_());
     auto* cond = b.FunctionParam("cond", ty.bool_());
     fn->SetParams({cond});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* if_ = b.If(cond);
-        b.With(if_->True(), [&] {
+        b.Append(if_->True(), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitIf(if_);
         });
@@ -1541,9 +1541,9 @@
     auto* cond = b.FunctionParam("cond", ty.bool_());
     fn->SetParams({cond});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto if_ = b.If(cond);
-        b.With(if_->True(), [&] { b.Return(fn); });
+        b.Append(if_->True(), [&] { b.Return(fn); });
 
         b.Return(fn);
     });
@@ -1560,11 +1560,11 @@
 TEST_F(IRToProgramTest, If_Return_i32) {
     auto* fn = b.Function("f", ty.i32());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* cond = b.Var("cond", ty.ptr<function, bool>());
         cond->SetInitializer(b.Constant(true));
         auto if_ = b.If(b.Load(cond));
-        b.With(if_->True(), [&] { b.Return(fn, 42_i); });
+        b.Append(if_->True(), [&] { b.Return(fn, 42_i); });
 
         b.Return(fn, 10_i);
     });
@@ -1582,22 +1582,22 @@
 
 TEST_F(IRToProgramTest, If_CallFn_Else_CallFn) {
     auto* fn_a = b.Function("a", ty.void_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a); });
 
     auto* fn_b = b.Function("b", ty.void_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b); });
 
     auto* fn = b.Function("f", ty.void_());
     auto* cond = b.FunctionParam("cond", ty.bool_());
     fn->SetParams({cond});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto if_ = b.If(cond);
-        b.With(if_->True(), [&] {
+        b.Append(if_->True(), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitIf(if_);
         });
-        b.With(if_->False(), [&] {
+        b.Append(if_->False(), [&] {
             b.Call(ty.void_(), fn_b);
             b.ExitIf(if_);
         });
@@ -1625,12 +1625,12 @@
 TEST_F(IRToProgramTest, If_Return_f32_Else_Return_f32) {
     auto* fn = b.Function("f", ty.f32());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* cond = b.Var("cond", ty.ptr<function, bool>());
         cond->SetInitializer(b.Constant(true));
         auto if_ = b.If(b.Load(cond));
-        b.With(if_->True(), [&] { b.Return(fn, 1.0_f); });
-        b.With(if_->False(), [&] { b.Return(fn, 2.0_f); });
+        b.Append(if_->True(), [&] { b.Return(fn, 1.0_f); });
+        b.Append(if_->False(), [&] { b.Return(fn, 2.0_f); });
 
         b.Unreachable();
     });
@@ -1649,19 +1649,19 @@
 
 TEST_F(IRToProgramTest, If_Return_u32_Else_CallFn) {
     auto* fn_a = b.Function("a", ty.void_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a); });
 
     auto* fn_b = b.Function("b", ty.void_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b); });
 
     auto* fn = b.Function("f", ty.u32());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* cond = b.Var("cond", ty.ptr<function, bool>());
         cond->SetInitializer(b.Constant(true));
         auto if_ = b.If(b.Load(cond));
-        b.With(if_->True(), [&] { b.Return(fn, 1_u); });
-        b.With(if_->False(), [&] {
+        b.Append(if_->True(), [&] { b.Return(fn, 1_u); });
+        b.Append(if_->False(), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitIf(if_);
         });
@@ -1691,27 +1691,27 @@
 
 TEST_F(IRToProgramTest, If_CallFn_ElseIf_CallFn) {
     auto* fn_a = b.Function("a", ty.void_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a); });
 
     auto* fn_b = b.Function("b", ty.void_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b); });
 
     auto* fn_c = b.Function("c", ty.void_());
-    b.With(fn_c->Block(), [&] { b.Return(fn_c); });
+    b.Append(fn_c->Block(), [&] { b.Return(fn_c); });
 
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* cond = b.Var("cond", ty.ptr<function, bool>());
         cond->SetInitializer(b.Constant(true));
         auto if1 = b.If(b.Load(cond));
-        b.With(if1->True(), [&] {
+        b.Append(if1->True(), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitIf(if1);
         });
-        b.With(if1->False(), [&] {
+        b.Append(if1->False(), [&] {
             auto* if2 = b.If(b.Constant(false));
-            b.With(if2->True(), [&] {
+            b.Append(if2->True(), [&] {
                 b.Call(ty.void_(), fn_b);
                 b.ExitIf(if2);
             });
@@ -1748,7 +1748,7 @@
     auto* x = b.Function("x", ty.bool_());
     auto* i = b.FunctionParam("i", ty.i32());
     x->SetParams({i});
-    b.With(x->Block(), [&] { b.Return(x, true); });
+    b.Append(x->Block(), [&] { b.Return(x, true); });
 
     auto* fn = b.Function("f", ty.void_());
     auto* pa = b.FunctionParam("a", ty.bool_());
@@ -1757,25 +1757,25 @@
     auto* pd = b.FunctionParam("d", ty.bool_());
     fn->SetParams({pa, pb, pc, pd});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto if1 = b.If(pa);
-        b.With(if1->True(), [&] {
+        b.Append(if1->True(), [&] {
             b.Call(ty.void_(), x, 0_i);
             b.ExitIf(if1);
         });
-        b.With(if1->False(), [&] {
+        b.Append(if1->False(), [&] {
             auto* if2 = b.If(pb);
-            b.With(if2->True(), [&] {
+            b.Append(if2->True(), [&] {
                 b.Call(ty.void_(), x, 1_i);
                 b.ExitIf(if2);
             });
-            b.With(if2->False(), [&] {
+            b.Append(if2->False(), [&] {
                 auto* if3 = b.If(pc);
-                b.With(if3->True(), [&] {
+                b.Append(if3->True(), [&] {
                     b.Call(ty.void_(), x, 2_i);
                     b.ExitIf(if3);
                 });
-                b.With(if3->False(), [&] {
+                b.Append(if3->False(), [&] {
                     b.Call(ty.void_(), x, 3_i);
                     b.ExitIf(if3);
                 });
@@ -1810,16 +1810,16 @@
 ////////////////////////////////////////////////////////////////////////////////
 TEST_F(IRToProgramTest, Switch_Default) {
     auto* fn_a = b.Function("a", ty.void_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a); });
 
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         v->SetInitializer(b.Constant(42_i));
 
         auto s = b.Switch(b.Load(v));
-        b.With(b.Case(s, {Switch::CaseSelector{}}), [&] {
+        b.Append(b.Case(s, {Switch::CaseSelector{}}), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitSwitch(s);
         });
@@ -1844,35 +1844,35 @@
 
 TEST_F(IRToProgramTest, Switch_3_Cases) {
     auto* fn_a = b.Function("a", ty.void_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a); });
 
     auto* fn_b = b.Function("b", ty.void_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b); });
 
     auto* fn_c = b.Function("c", ty.void_());
-    b.With(fn_c->Block(), [&] { b.Return(fn_c); });
+    b.Append(fn_c->Block(), [&] { b.Return(fn_c); });
 
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         v->SetInitializer(b.Constant(42_i));
 
         auto s = b.Switch(b.Load(v));
-        b.With(b.Case(s, {Switch::CaseSelector{b.Constant(0_i)}}), [&] {
+        b.Append(b.Case(s, {Switch::CaseSelector{b.Constant(0_i)}}), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitSwitch(s);
         });
-        b.With(b.Case(s,
-                      {
-                          Switch::CaseSelector{b.Constant(1_i)},
-                          Switch::CaseSelector{},
-                      }),
-               [&] {
-                   b.Call(ty.void_(), fn_b);
-                   b.ExitSwitch(s);
-               });
-        b.With(b.Case(s, {Switch::CaseSelector{b.Constant(2_i)}}), [&] {
+        b.Append(b.Case(s,
+                        {
+                            Switch::CaseSelector{b.Constant(1_i)},
+                            Switch::CaseSelector{},
+                        }),
+                 [&] {
+                     b.Call(ty.void_(), fn_b);
+                     b.ExitSwitch(s);
+                 });
+        b.Append(b.Case(s, {Switch::CaseSelector{b.Constant(2_i)}}), [&] {
             b.Call(ty.void_(), fn_c);
             b.ExitSwitch(s);
         });
@@ -1909,23 +1909,23 @@
 
 TEST_F(IRToProgramTest, Switch_3_Cases_AllReturn) {
     auto* fn_a = b.Function("a", ty.void_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a); });
 
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         v->SetInitializer(b.Constant(42_i));
 
         auto s = b.Switch(b.Load(v));
-        b.With(b.Case(s, {Switch::CaseSelector{b.Constant(0_i)}}), [&] { b.Return(fn); });
-        b.With(b.Case(s,
-                      {
-                          Switch::CaseSelector{b.Constant(1_i)},
-                          Switch::CaseSelector{},
-                      }),
-               [&] { b.Return(fn); });
-        b.With(b.Case(s, {Switch::CaseSelector{b.Constant(2_i)}}), [&] { b.Return(fn); });
+        b.Append(b.Case(s, {Switch::CaseSelector{b.Constant(0_i)}}), [&] { b.Return(fn); });
+        b.Append(b.Case(s,
+                        {
+                            Switch::CaseSelector{b.Constant(1_i)},
+                            Switch::CaseSelector{},
+                        }),
+                 [&] { b.Return(fn); });
+        b.Append(b.Case(s, {Switch::CaseSelector{b.Constant(2_i)}}), [&] { b.Return(fn); });
 
         b.Call(ty.void_(), fn_a);
         b.Return(fn);
@@ -1955,16 +1955,16 @@
 
 TEST_F(IRToProgramTest, Switch_Nested) {
     auto* fn_a = b.Function("a", ty.void_());
-    b.With(fn_a->Block(), [&] { b.Return(fn_a); });
+    b.Append(fn_a->Block(), [&] { b.Return(fn_a); });
 
     auto* fn_b = b.Function("b", ty.void_());
-    b.With(fn_b->Block(), [&] { b.Return(fn_b); });
+    b.Append(fn_b->Block(), [&] { b.Return(fn_b); });
 
     auto* fn_c = b.Function("c", ty.void_());
-    b.With(fn_c->Block(), [&] { b.Return(fn_c); });
+    b.Append(fn_c->Block(), [&] { b.Return(fn_c); });
 
     auto* fn = b.Function("f", ty.void_());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v1 = b.Var("v1", ty.ptr<function, i32>());
         v1->SetInitializer(b.Constant(42_i));
 
@@ -1972,29 +1972,29 @@
         v2->SetInitializer(b.Constant(24_i));
 
         auto s1 = b.Switch(b.Load(v1));
-        b.With(b.Case(s1, {Switch::CaseSelector{b.Constant(0_i)}}), [&] {
+        b.Append(b.Case(s1, {Switch::CaseSelector{b.Constant(0_i)}}), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitSwitch(s1);
         });
-        b.With(b.Case(s1,
-                      {
-                          Switch::CaseSelector{b.Constant(1_i)},
-                          Switch::CaseSelector{},
-                      }),
-               [&] {
-                   auto s2 = b.Switch(b.Load(v2));
-                   b.With(b.Case(s2, {Switch::CaseSelector{b.Constant(0_i)}}),
-                          [&] { b.ExitSwitch(s2); });
-                   b.With(b.Case(s2,
-                                 {
-                                     Switch::CaseSelector{b.Constant(1_i)},
-                                     Switch::CaseSelector{},
-                                 }),
-                          [&] { b.Return(fn); });
+        b.Append(b.Case(s1,
+                        {
+                            Switch::CaseSelector{b.Constant(1_i)},
+                            Switch::CaseSelector{},
+                        }),
+                 [&] {
+                     auto s2 = b.Switch(b.Load(v2));
+                     b.Append(b.Case(s2, {Switch::CaseSelector{b.Constant(0_i)}}),
+                              [&] { b.ExitSwitch(s2); });
+                     b.Append(b.Case(s2,
+                                     {
+                                         Switch::CaseSelector{b.Constant(1_i)},
+                                         Switch::CaseSelector{},
+                                     }),
+                              [&] { b.Return(fn); });
 
-                   b.ExitSwitch(s1);
-               });
-        b.With(b.Case(s1, {Switch::CaseSelector{b.Constant(2_i)}}), [&] {
+                     b.ExitSwitch(s1);
+                 });
+        b.Append(b.Case(s1, {Switch::CaseSelector{b.Constant(2_i)}}), [&] {
             b.Call(ty.void_(), fn_c);
             b.ExitSwitch(s1);
         });
@@ -2041,22 +2041,22 @@
 TEST_F(IRToProgramTest, For_Empty) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             auto* i = b.Var("i", ty.ptr<function, i32>());
             i->SetInitializer(b.Constant(0_i));
             b.NextIteration(loop);
 
-            b.With(loop->Body(), [&] {
+            b.Append(loop->Body(), [&] {
                 auto* if_ = b.If(b.LessThan(ty.bool_(), b.Load(i), 5_i));
-                b.With(if_->True(), [&] { b.ExitIf(if_); });
-                b.With(if_->False(), [&] { b.ExitLoop(loop); });
+                b.Append(if_->True(), [&] { b.ExitIf(if_); });
+                b.Append(if_->False(), [&] { b.ExitLoop(loop); });
                 b.Continue(loop);
             });
 
-            b.With(loop->Continuing(), [&] {
+            b.Append(loop->Continuing(), [&] {
                 b.Store(i, b.Add(ty.i32(), b.Load(i), 1_i));
                 b.NextIteration(loop);
             });
@@ -2076,20 +2076,20 @@
 TEST_F(IRToProgramTest, For_Empty_NoInit) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* i = b.Var("i", ty.ptr<function, i32>());
         i->SetInitializer(b.Constant(0_i));
 
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* if_ = b.If(b.LessThan(ty.bool_(), b.Load(i), 5_i));
-            b.With(if_->True(), [&] { b.ExitIf(if_); });
-            b.With(if_->False(), [&] { b.ExitLoop(loop); });
+            b.Append(if_->True(), [&] { b.ExitIf(if_); });
+            b.Append(if_->False(), [&] { b.ExitLoop(loop); });
             b.Continue(loop);
         });
 
-        b.With(loop->Continuing(), [&] {
+        b.Append(loop->Continuing(), [&] {
             b.Store(i, b.Add(ty.i32(), b.Load(i), 1_i));
             b.NextIteration(loop);
         });
@@ -2109,18 +2109,18 @@
 TEST_F(IRToProgramTest, For_Empty_NoCont) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             auto* i = b.Var("i", ty.ptr<function, i32>());
             i->SetInitializer(b.Constant(0_i));
             b.NextIteration(loop);
 
-            b.With(loop->Body(), [&] {
+            b.Append(loop->Body(), [&] {
                 auto* if_ = b.If(b.LessThan(ty.bool_(), b.Load(i), 5_i));
-                b.With(if_->True(), [&] { b.ExitIf(if_); });
-                b.With(if_->False(), [&] { b.ExitLoop(loop); });
+                b.Append(if_->True(), [&] { b.ExitIf(if_); });
+                b.Append(if_->False(), [&] { b.ExitLoop(loop); });
                 b.Continue(loop);
             });
         });
@@ -2140,30 +2140,30 @@
     auto* a = b.Function("a", ty.bool_());
     auto* v = b.FunctionParam("v", ty.i32());
     a->SetParams({v});
-    b.With(a->Block(), [&] { b.Return(a, b.Equal(ty.bool_(), v, 1_i)); });
+    b.Append(a->Block(), [&] { b.Return(a, b.Equal(ty.bool_(), v, 1_i)); });
 
     auto* fn = b.Function("f", ty.i32());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             auto* i = b.Var("i", ty.ptr<function, i32>());
             i->SetInitializer(b.Constant(0_i));
             b.NextIteration(loop);
 
-            b.With(loop->Body(), [&] {
+            b.Append(loop->Body(), [&] {
                 auto* if1 = b.If(b.LessThan(ty.bool_(), b.Load(i), 5_i));
-                b.With(if1->True(), [&] { b.ExitIf(if1); });
-                b.With(if1->False(), [&] { b.ExitLoop(loop); });
+                b.Append(if1->True(), [&] { b.ExitIf(if1); });
+                b.Append(if1->False(), [&] { b.ExitLoop(loop); });
 
                 auto* if2 = b.If(b.Call(ty.bool_(), a, 42_i));
-                b.With(if2->True(), [&] { b.Return(fn, 1_i); });
-                b.With(if2->False(), [&] { b.Return(fn, 2_i); });
+                b.Append(if2->True(), [&] { b.Return(fn, 1_i); });
+                b.Append(if2->False(), [&] { b.Return(fn, 2_i); });
                 b.Unreachable();
             });
 
-            b.With(loop->Continuing(), [&] {
+            b.Append(loop->Continuing(), [&] {
                 b.Store(i, b.Add(ty.i32(), b.Load(i), 1_i));
                 b.NextIteration(loop);
             });
@@ -2194,29 +2194,29 @@
     auto* a = b.Function("a", ty.bool_());
     auto* v = b.FunctionParam("v", ty.i32());
     a->SetParams({v});
-    b.With(a->Block(), [&] { b.Return(a, b.Equal(ty.bool_(), v, 1_i)); });
+    b.Append(a->Block(), [&] { b.Return(a, b.Equal(ty.bool_(), v, 1_i)); });
 
     auto* fn = b.Function("f", ty.i32());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* i = b.Var("i", ty.ptr<function, i32>());
         i->SetInitializer(b.Constant(0_i));
 
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* if1 = b.If(b.LessThan(ty.bool_(), b.Load(i), 5_i));
-            b.With(if1->True(), [&] { b.ExitIf(if1); });
-            b.With(if1->False(), [&] { b.ExitLoop(loop); });
+            b.Append(if1->True(), [&] { b.ExitIf(if1); });
+            b.Append(if1->False(), [&] { b.ExitLoop(loop); });
 
             auto* if2 = b.If(b.Call(ty.bool_(), a, 42_i));
-            b.With(if2->True(), [&] { b.Return(fn, 1_i); });
-            b.With(if2->False(), [&] { b.Return(fn, 2_i); });
+            b.Append(if2->True(), [&] { b.Return(fn, 1_i); });
+            b.Append(if2->False(), [&] { b.Return(fn, 2_i); });
 
             b.Continue(loop);
         });
 
-        b.With(loop->Continuing(), [&] {
+        b.Append(loop->Continuing(), [&] {
             b.Store(i, b.Add(ty.i32(), b.Load(i), 1_i));
             b.NextIteration(loop);
         });
@@ -2247,26 +2247,26 @@
     auto* a = b.Function("a", ty.bool_());
     auto* v = b.FunctionParam("v", ty.i32());
     a->SetParams({v});
-    b.With(a->Block(), [&] { b.Return(a, b.Equal(ty.bool_(), v, 1_i)); });
+    b.Append(a->Block(), [&] { b.Return(a, b.Equal(ty.bool_(), v, 1_i)); });
 
     auto* fn = b.Function("f", ty.i32());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             auto* i = b.Var("i", ty.ptr<function, i32>());
             i->SetInitializer(b.Constant(0_i));
             b.NextIteration(loop);
 
-            b.With(loop->Body(), [&] {
+            b.Append(loop->Body(), [&] {
                 auto* if1 = b.If(b.LessThan(ty.bool_(), b.Load(i), 5_i));
-                b.With(if1->True(), [&] { b.ExitIf(if1); });
-                b.With(if1->False(), [&] { b.ExitLoop(loop); });
+                b.Append(if1->True(), [&] { b.ExitIf(if1); });
+                b.Append(if1->False(), [&] { b.ExitLoop(loop); });
 
                 auto* if2 = b.If(b.Call(ty.bool_(), a, 42_i));
-                b.With(if2->True(), [&] { b.Return(fn, 1_i); });
-                b.With(if2->False(), [&] { b.Return(fn, 2_i); });
+                b.Append(if2->True(), [&] { b.Return(fn, 1_i); });
+                b.Append(if2->False(), [&] { b.Return(fn, 2_i); });
 
                 b.NextIteration(loop);
             });
@@ -2297,30 +2297,30 @@
     auto* fn_n = b.Function("n", ty.i32());
     auto* v = b.FunctionParam("v", ty.i32());
     fn_n->SetParams({v});
-    b.With(fn_n->Block(), [&] { b.Return(fn_n, b.Add(ty.i32(), v, 1_i)); });
+    b.Append(fn_n->Block(), [&] { b.Return(fn_n, b.Add(ty.i32(), v, 1_i)); });
 
     auto* fn_f = b.Function("f", ty.void_());
 
-    b.With(fn_f->Block(), [&] {
+    b.Append(fn_f->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             auto* n_0 = b.Call(ty.i32(), fn_n, 0_i)->Result();
             auto* i = b.Var("i", ty.ptr<function, i32>());
             i->SetInitializer(n_0);
             b.NextIteration(loop);
 
-            b.With(loop->Body(), [&] {
+            b.Append(loop->Body(), [&] {
                 auto* load = b.Load(i);
                 auto* call = b.Call(ty.i32(), fn_n, 1_i);
                 auto* if_ = b.If(b.LessThan(ty.bool_(), load, call));
-                b.With(if_->True(), [&] { b.ExitIf(if_); });
-                b.With(if_->False(), [&] { b.ExitLoop(loop); });
+                b.Append(if_->True(), [&] { b.ExitIf(if_); });
+                b.Append(if_->False(), [&] { b.ExitLoop(loop); });
 
                 b.Continue(loop);
             });
 
-            b.With(loop->Continuing(), [&] {
+            b.Append(loop->Continuing(), [&] {
                 b.Store(i, b.Call(ty.i32(), fn_n, b.Load(i)));
                 b.NextIteration(loop);
             });
@@ -2373,28 +2373,28 @@
     //   }
     // }
 
-    b.With(b.RootBlock(), [&] {
+    b.Append(b.RootBlock(), [&] {
         auto* i = b.Var(ty.ptr<storage, u32, read_write>());
         i->SetBindingPoint(0, 0);
 
         auto* fn_f = b.Function("f", ty.void_());
 
-        b.With(fn_f->Block(), [&] {
+        b.Append(fn_f->Block(), [&] {
             auto* loop = b.Loop();
 
-            b.With(loop->Initializer(), [&] {
+            b.Append(loop->Initializer(), [&] {
                 auto* load_i = b.Load(i);
                 auto* inc_i = b.Add(ty.i32(), load_i, 1_u);
                 b.Store(i, inc_i);
                 b.NextIteration(loop);
             });
 
-            b.With(loop->Body(), [&] {
+            b.Append(loop->Body(), [&] {
                 auto* load_i = b.Load(i);
                 auto* cmp = b.LessThan(ty.bool_(), load_i, 10_u);
                 auto* if_ = b.If(cmp);
-                b.With(if_->True(), [&] { b.ExitIf(if_); });
-                b.With(if_->False(), [&] { b.ExitLoop(loop); });
+                b.Append(if_->True(), [&] { b.ExitIf(if_); });
+                b.Append(if_->False(), [&] { b.ExitLoop(loop); });
                 b.Continue(loop);
             });
 
@@ -2418,13 +2418,13 @@
 TEST_F(IRToProgramTest, While_Empty) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* cond = b.If(true);
-            b.With(cond->True(), [&] { b.ExitIf(cond); });
-            b.With(cond->False(), [&] { b.ExitLoop(loop); });
+            b.Append(cond->True(), [&] { b.ExitIf(cond); });
+            b.Append(cond->False(), [&] { b.ExitLoop(loop); });
 
             b.Continue(loop);
         });
@@ -2445,13 +2445,13 @@
     auto* cond = b.FunctionParam("cond", ty.bool_());
     fn->SetParams({cond});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* if_ = b.If(cond);
-            b.With(if_->True(), [&] { b.ExitIf(if_); });
-            b.With(if_->False(), [&] { b.ExitLoop(loop); });
+            b.Append(if_->True(), [&] { b.ExitIf(if_); });
+            b.Append(if_->False(), [&] { b.ExitLoop(loop); });
 
             b.Continue(loop);
         });
@@ -2470,13 +2470,13 @@
 TEST_F(IRToProgramTest, While_Break) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* cond = b.If(true);
-            b.With(cond->True(), [&] { b.ExitIf(cond); });
-            b.With(cond->False(), [&] { b.ExitLoop(loop); });
+            b.Append(cond->True(), [&] { b.ExitIf(cond); });
+            b.Append(cond->False(), [&] { b.ExitLoop(loop); });
 
             b.ExitLoop(loop);
         });
@@ -2498,16 +2498,16 @@
     auto* cond = b.FunctionParam("cond", ty.bool_());
     fn->SetParams({cond});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* if1 = b.If(true);
-            b.With(if1->True(), [&] { b.ExitIf(if1); });
-            b.With(if1->False(), [&] { b.ExitLoop(loop); });
+            b.Append(if1->True(), [&] { b.ExitIf(if1); });
+            b.Append(if1->False(), [&] { b.ExitLoop(loop); });
 
             auto* if2 = b.If(cond);
-            b.With(if2->True(), [&] { b.ExitLoop(loop); });
+            b.Append(if2->True(), [&] { b.ExitLoop(loop); });
 
             b.Continue(loop);
         });
@@ -2531,16 +2531,16 @@
     auto* cond = b.FunctionParam("cond", ty.bool_());
     fn->SetParams({cond});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* if1 = b.If(true);
-            b.With(if1->True(), [&] { b.ExitIf(if1); });
-            b.With(if1->False(), [&] { b.ExitLoop(loop); });
+            b.Append(if1->True(), [&] { b.ExitIf(if1); });
+            b.Append(if1->False(), [&] { b.ExitLoop(loop); });
 
             auto* if2 = b.If(cond);
-            b.With(if2->True(), [&] { b.Return(fn); });
+            b.Append(if2->True(), [&] { b.Return(fn); });
 
             b.Continue(loop);
         });
@@ -2565,10 +2565,10 @@
 TEST_F(IRToProgramTest, Loop_Break) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] { b.ExitLoop(loop); });
+        b.Append(loop->Body(), [&] { b.ExitLoop(loop); });
 
         b.Return(fn);
     });
@@ -2587,12 +2587,12 @@
     auto* cond = b.FunctionParam("cond", ty.bool_());
     fn->SetParams({cond});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* if_ = b.If(cond);
-            b.With(if_->True(), [&] { b.ExitLoop(loop); });
+            b.Append(if_->True(), [&] { b.ExitLoop(loop); });
             b.Continue(loop);
         });
 
@@ -2614,12 +2614,12 @@
     auto* cond = b.FunctionParam("cond", ty.bool_());
     fn->SetParams({cond});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* if_ = b.If(cond);
-            b.With(if_->True(), [&] { b.Return(fn); });
+            b.Append(if_->True(), [&] { b.Return(fn); });
             b.Continue(loop);
         });
 
@@ -2640,18 +2640,18 @@
 TEST_F(IRToProgramTest, Loop_IfContinuing) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* cond = b.Var("cond", ty.ptr<function, bool>());
         cond->SetInitializer(b.Constant(false));
 
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* if_ = b.If(b.Load(cond));
-            b.With(if_->True(), [&] { b.Return(fn); });
+            b.Append(if_->True(), [&] { b.Return(fn); });
             b.Continue(loop);
         });
-        b.With(loop->Continuing(), [&] {
+        b.Append(loop->Continuing(), [&] {
             b.Store(cond, true);
             b.NextIteration(loop);
         });
@@ -2678,24 +2678,24 @@
 TEST_F(IRToProgramTest, Loop_VarsDeclaredOutsideAndInside) {
     auto* fn = b.Function("f", ty.void_());
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* var_b = b.Var("b", ty.ptr<function, i32>());
         var_b->SetInitializer(b.Constant(1_i));
 
         auto* loop = b.Loop();
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* var_a = b.Var("a", ty.ptr<function, i32>());
             var_a->SetInitializer(b.Constant(2_i));
 
             auto* body_load_a = b.Load(var_a);
             auto* body_load_b = b.Load(var_b);
             auto* if_ = b.If(b.Equal(ty.bool_(), body_load_a, body_load_b));
-            b.With(if_->True(), [&] { b.Return(fn); });
-            b.With(if_->False(), [&] { b.ExitIf(if_); });
+            b.Append(if_->True(), [&] { b.Return(fn); });
+            b.Append(if_->False(), [&] { b.ExitIf(if_); });
             b.Continue(loop);
 
-            b.With(loop->Continuing(), [&] {
+            b.Append(loop->Continuing(), [&] {
                 auto* cont_load_a = b.Load(var_a);
                 auto* cont_load_b = b.Load(var_b);
                 b.Store(var_b, b.Add(ty.i32(), cont_load_a, cont_load_b));
diff --git a/src/tint/lang/core/ir/transform/block_decorated_structs_test.cc b/src/tint/lang/core/ir/transform/block_decorated_structs_test.cc
index 1085eeb..c978d20 100644
--- a/src/tint/lang/core/ir/transform/block_decorated_structs_test.cc
+++ b/src/tint/lang/core/ir/transform/block_decorated_structs_test.cc
@@ -117,7 +117,7 @@
     b.RootBlock()->Append(buffer);
 
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {  //
+    b.Append(func->Block(), [&] {  //
         b.Return(func, b.Load(buffer));
     });
 
@@ -151,7 +151,7 @@
 
     auto* func = b.Function("foo", ty.void_());
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* access = b.Access(ty.ptr<storage, i32>(), buffer, 1_u);
         b.Store(access, 42_i);
         b.Return(func);
@@ -196,7 +196,7 @@
 
     auto* func = b.Function("foo", ty.void_());
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* val_ptr = b.Access(i32_ptr, buffer, 0_u);
         auto* load = b.Load(val_ptr);
         auto* elem_ptr = b.Access(i32_ptr, buffer, 1_u, 3_u);
diff --git a/src/tint/lang/core/ir/transform/builtin_polyfill_spirv_test.cc b/src/tint/lang/core/ir/transform/builtin_polyfill_spirv_test.cc
index 0bf1cba..2b4648d 100644
--- a/src/tint/lang/core/ir/transform/builtin_polyfill_spirv_test.cc
+++ b/src/tint/lang/core/ir/transform/builtin_polyfill_spirv_test.cc
@@ -45,7 +45,7 @@
     b.RootBlock()->Append(var);
 
     auto* func = b.Function("foo", ty.u32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* access = b.Access(ty.ptr(storage, arr), var, 2_u);
         auto* result = b.Call(ty.u32(), builtin::Function::kArrayLength, access);
         b.Return(func, result);
@@ -109,7 +109,7 @@
     b.RootBlock()->Append(var);
 
     auto* func = b.Function("foo", ty.u32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* let_a = b.Let("a", var);
         auto* let_b = b.Let("b", let_a);
         auto* access = b.Access(ty.ptr(storage, arr), let_b, 2_u);
@@ -179,7 +179,7 @@
     b.RootBlock()->Append(var);
 
     auto* func = b.Function("foo", ty.u32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* access = b.Access(ty.ptr(storage, arr), var, 2_u);
         auto* let_a = b.Let("a", access);
         auto* let_b = b.Let("b", let_a);
@@ -246,7 +246,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicAdd, var, arg1);
         b.Return(func, result);
     });
@@ -290,7 +290,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicAdd, var, arg1);
         b.Return(func, result);
     });
@@ -334,7 +334,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicAnd, var, arg1);
         b.Return(func, result);
     });
@@ -379,7 +379,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cmp, val});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result_ty = type::CreateAtomicCompareExchangeResult(ty, mod.symbols, ty.i32());
         auto* result =
             b.Call(result_ty, builtin::Function::kAtomicCompareExchangeWeak, var, cmp, val);
@@ -439,7 +439,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicExchange, var, arg1);
         b.Return(func, result);
     });
@@ -481,7 +481,7 @@
 
     auto* func = b.Function("foo", ty.i32());
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicLoad, var);
         b.Return(func, result);
     });
@@ -525,7 +525,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicMax, var, arg1);
         b.Return(func, result);
     });
@@ -569,7 +569,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kAtomicMax, var, arg1);
         b.Return(func, result);
     });
@@ -613,7 +613,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicMin, var, arg1);
         b.Return(func, result);
     });
@@ -657,7 +657,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kAtomicMin, var, arg1);
         b.Return(func, result);
     });
@@ -701,7 +701,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicOr, var, arg1);
         b.Return(func, result);
     });
@@ -745,7 +745,7 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(ty.void_(), builtin::Function::kAtomicStore, var, arg1);
         b.Return(func);
     });
@@ -789,7 +789,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicSub, var, arg1);
         b.Return(func, result);
     });
@@ -833,7 +833,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicXor, var, arg1);
         b.Return(func, result);
     });
@@ -876,7 +876,7 @@
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.f32(), builtin::Function::kDot, arg1, arg2);
         b.Return(func, result);
     });
@@ -911,7 +911,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kDot, arg1, arg2);
         b.Return(func, result);
     });
@@ -952,7 +952,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kDot, arg1, arg2);
         b.Return(func, result);
     });
@@ -1002,7 +1002,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({argf, argt, cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kSelect, argf, argt, cond);
         b.Return(func, result);
     });
@@ -1038,7 +1038,7 @@
     auto* func = b.Function("foo", ty.vec4<i32>());
     func->SetParams({argf, argt, cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<i32>(), builtin::Function::kSelect, argf, argt, cond);
         b.Return(func, result);
     });
@@ -1074,7 +1074,7 @@
     auto* func = b.Function("foo", ty.vec4<i32>());
     func->SetParams({argf, argt, cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<i32>(), builtin::Function::kSelect, argf, argt, cond);
         b.Return(func, result);
     });
@@ -1112,7 +1112,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, coords, lod});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kTextureLoad, t, coords, lod);
         b.Return(func, result);
     });
@@ -1150,7 +1150,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, coords, array_idx, lod});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec4<f32>(), builtin::Function::kTextureLoad, t, coords, array_idx, lod);
         b.Return(func, result);
@@ -1190,7 +1190,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, coords, array_idx, lod});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec4<f32>(), builtin::Function::kTextureLoad, t, coords, array_idx, lod);
         b.Return(func, result);
@@ -1230,7 +1230,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, coords, sample_idx});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec4<f32>(), builtin::Function::kTextureLoad, t, coords, sample_idx);
         b.Return(func, result);
@@ -1267,7 +1267,7 @@
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({t, coords, lod});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.f32(), builtin::Function::kTextureLoad, t, coords, lod);
         b.Return(func, result);
     });
@@ -1305,7 +1305,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kTextureSample, t, s, coords);
         b.Return(func, result);
     });
@@ -1343,7 +1343,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kTextureSample, t, s, coords);
         b.Return(func, result);
     });
@@ -1381,7 +1381,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureSample, t, s, coords,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -1422,7 +1422,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, array_idx});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureSample, t, s, coords, array_idx,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -1465,7 +1465,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, bias});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec4<f32>(), builtin::Function::kTextureSampleBias, t, s, coords, bias);
         b.Return(func, result);
@@ -1505,7 +1505,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, bias});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureSampleBias, t, s, coords, bias,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -1547,7 +1547,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, array_idx, bias});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureSampleBias, t, s, coords, array_idx, bias,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -1589,7 +1589,7 @@
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({t, s, coords, dref});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.f32(), builtin::Function::kTextureSampleCompare, t, s, coords, dref);
         b.Return(func, result);
@@ -1628,7 +1628,7 @@
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({t, s, coords, dref});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.f32(), builtin::Function::kTextureSampleCompare, t, s, coords, dref,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -1669,7 +1669,7 @@
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({t, s, coords, array_idx, bias});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.f32(), builtin::Function::kTextureSampleCompare, t, s, coords, array_idx, bias,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -1711,7 +1711,7 @@
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({t, s, coords, dref});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.f32(), builtin::Function::kTextureSampleCompareLevel, t, s, coords, dref);
         b.Return(func, result);
@@ -1750,7 +1750,7 @@
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({t, s, coords, dref});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.f32(), builtin::Function::kTextureSampleCompareLevel, t, s, coords, dref,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -1791,7 +1791,7 @@
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({t, s, coords, array_idx, bias});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.f32(), builtin::Function::kTextureSampleCompareLevel, t, s, coords, array_idx, bias,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -1835,7 +1835,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, ddx, ddy});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec4<f32>(), builtin::Function::kTextureSampleBias, t, s, coords, ddx, ddy);
         b.Return(func, result);
@@ -1876,7 +1876,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, ddx, ddy});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureSampleBias, t, s, coords, ddx, ddy,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -1919,7 +1919,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, array_idx, ddx, ddy});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureSampleBias, t, s, coords, array_idx, ddx,
             ddy,
@@ -1963,7 +1963,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, lod});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec4<f32>(), builtin::Function::kTextureSampleLevel, t, s, coords, lod);
         b.Return(func, result);
@@ -2003,7 +2003,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, lod});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureSampleLevel, t, s, coords, lod,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -2045,7 +2045,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, array_idx, lod});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureSampleLevel, t, s, coords, array_idx, lod,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -2088,7 +2088,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({component, t, s, coords});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec4<f32>(), builtin::Function::kTextureGather, component, t, s, coords);
         b.Return(func, result);
@@ -2128,7 +2128,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, component, coords});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureGather, component, t, s, coords,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -2170,7 +2170,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, component, coords, array_idx});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureGather, component, t, s, coords, array_idx,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -2211,7 +2211,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kTextureGather, t, s, coords);
         b.Return(func, result);
     });
@@ -2249,7 +2249,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, depth});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec4<f32>(), builtin::Function::kTextureGatherCompare, t, s, coords, depth);
         b.Return(func, result);
@@ -2288,7 +2288,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, depth});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(
             ty.vec4<f32>(), builtin::Function::kTextureGatherCompare, t, s, coords, depth,
             b.Constant(mod.constant_values.Splat(ty.vec2<i32>(), mod.constant_values.Get(1_i), 2)));
@@ -2329,7 +2329,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({t, s, coords, array_idx, depth});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kTextureGatherCompare, t, s,
                               coords, array_idx, depth);
         b.Return(func, result);
@@ -2372,7 +2372,7 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({t, coords, texel});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(ty.void_(), builtin::Function::kTextureStore, t, coords, texel);
         b.Return(func);
     });
@@ -2413,7 +2413,7 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({t, coords, array_idx, texel});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(ty.void_(), builtin::Function::kTextureStore, t, coords, array_idx, texel);
         b.Return(func);
     });
@@ -2455,7 +2455,7 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({t, coords, array_idx, texel});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(ty.void_(), builtin::Function::kTextureStore, t, coords, array_idx, texel);
         b.Return(func);
     });
@@ -2492,7 +2492,7 @@
     auto* func = b.Function("foo", ty.vec2<u32>());
     func->SetParams({t});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec2<u32>(), builtin::Function::kTextureDimensions, t);
         b.Return(func, result);
     });
@@ -2528,7 +2528,7 @@
     auto* func = b.Function("foo", ty.vec2<u32>());
     func->SetParams({t, lod});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec2<u32>(), builtin::Function::kTextureDimensions, t, lod);
         b.Return(func, result);
     });
@@ -2563,7 +2563,7 @@
     auto* func = b.Function("foo", ty.vec2<u32>());
     func->SetParams({t});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec2<u32>(), builtin::Function::kTextureDimensions, t);
         b.Return(func, result);
     });
@@ -2599,7 +2599,7 @@
     auto* func = b.Function("foo", ty.vec2<u32>());
     func->SetParams({t});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec2<u32>(), builtin::Function::kTextureDimensions, t);
         b.Return(func, result);
     });
@@ -2634,7 +2634,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({t});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kTextureNumLayers, t);
         b.Return(func, result);
     });
@@ -2670,7 +2670,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({t});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kTextureNumLayers, t);
         b.Return(func, result);
     });
@@ -2705,7 +2705,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({t});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kTextureNumLayers, t);
         b.Return(func, result);
     });
@@ -2740,7 +2740,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({t});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kTextureNumLayers, t);
         b.Return(func, result);
     });
@@ -2778,7 +2778,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({t});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kTextureNumLayers, t);
         b.Return(func, result);
     });
diff --git a/src/tint/lang/core/ir/transform/demote_to_helper_test.cc b/src/tint/lang/core/ir/transform/demote_to_helper_test.cc
index ec1fdbd..92b3046 100644
--- a/src/tint/lang/core/ir/transform/demote_to_helper_test.cc
+++ b/src/tint/lang/core/ir/transform/demote_to_helper_test.cc
@@ -37,7 +37,7 @@
     auto* ep = b.Function("ep", ty.f32(), Function::PipelineStage::kFragment);
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {  //
+    b.Append(ep->Block(), [&] {  //
         b.Store(buffer, 42_i);
         b.Return(ep, 0.5_f);
     });
@@ -74,9 +74,9 @@
     ep->SetParams({front_facing});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
@@ -147,7 +147,7 @@
     b.RootBlock()->Append(buffer);
 
     auto* helper = b.Function("foo", ty.void_());
-    b.With(helper->Block(), [&] {
+    b.Append(helper->Block(), [&] {
         b.Store(buffer, 42_i);
         b.Return(helper);
     });
@@ -158,9 +158,9 @@
     ep->SetParams({front_facing});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
@@ -245,9 +245,9 @@
     auto* cond = b.FunctionParam("cond", ty.bool_());
     auto* helper = b.Function("foo", ty.void_());
     helper->SetParams({cond});
-    b.With(helper->Block(), [&] {
+    b.Append(helper->Block(), [&] {
         auto* ifelse = b.If(cond);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
@@ -260,7 +260,7 @@
     ep->SetParams({front_facing});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         b.Call(ty.void_(), helper, front_facing);
         b.Store(buffer, 42_i);
         b.Return(ep, 0.5_f);
@@ -343,9 +343,9 @@
     auto* cond = b.FunctionParam("cond", ty.bool_());
     auto* helper = b.Function("foo", ty.void_());
     helper->SetParams({cond});
-    b.With(helper->Block(), [&] {
+    b.Append(helper->Block(), [&] {
         auto* ifelse = b.If(cond);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
@@ -359,7 +359,7 @@
     ep->SetParams({front_facing});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         b.Call(ty.void_(), helper, front_facing);
         b.Return(ep, 0.5_f);
     });
@@ -441,10 +441,10 @@
     ep->SetParams({front_facing});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* func = b.Var("func", ty.ptr<function, i32>());
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
@@ -525,9 +525,9 @@
     ep->SetParams({front_facing, coord});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
@@ -603,9 +603,9 @@
     ep->SetParams({front_facing});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
@@ -681,9 +681,9 @@
     ep->SetParams({front_facing});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
@@ -763,9 +763,9 @@
     ep->SetParams({front_facing});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
diff --git a/src/tint/lang/core/ir/transform/expand_implicit_splats_test.cc b/src/tint/lang/core/ir/transform/expand_implicit_splats_test.cc
index 55edaa8..66a23cc 100644
--- a/src/tint/lang/core/ir/transform/expand_implicit_splats_test.cc
+++ b/src/tint/lang/core/ir/transform/expand_implicit_splats_test.cc
@@ -31,7 +31,7 @@
     auto* func = b.Function("foo", ty.vec2<i32>());
     func->SetParams({vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.vec2<i32>(), vector);
         b.Return(func, result);
     });
@@ -56,7 +56,7 @@
     auto* func = b.Function("foo", ty.vec3<i32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.vec3<i32>(), scalar, vector);
         b.Return(func, result);
     });
@@ -80,7 +80,7 @@
     auto* func = b.Function("foo", ty.vec3<i32>());
     func->SetParams({scalar});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.vec3<i32>(), scalar, scalar, scalar);
         b.Return(func, result);
     });
@@ -104,7 +104,7 @@
     auto* func = b.Function("foo", ty.vec2<i32>());
     func->SetParams({scalar});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.vec2<i32>(), scalar);
         b.Return(func, result);
     });
@@ -138,7 +138,7 @@
     auto* func = b.Function("foo", ty.vec3<u32>());
     func->SetParams({scalar});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.vec3<u32>(), scalar);
         b.Return(func, result);
     });
@@ -172,7 +172,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.vec4<f32>(), scalar);
         b.Return(func, result);
     });
@@ -207,7 +207,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Add(ty.vec4<f32>(), vector, scalar);
         b.Return(func, result);
     });
@@ -243,7 +243,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Add(ty.vec4<f32>(), scalar, vector);
         b.Return(func, result);
     });
@@ -279,7 +279,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Subtract(ty.vec4<f32>(), vector, scalar);
         b.Return(func, result);
     });
@@ -315,7 +315,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Subtract(ty.vec4<f32>(), scalar, vector);
         b.Return(func, result);
     });
@@ -351,7 +351,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Divide(ty.vec4<f32>(), vector, scalar);
         b.Return(func, result);
     });
@@ -387,7 +387,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Divide(ty.vec4<f32>(), scalar, vector);
         b.Return(func, result);
     });
@@ -423,7 +423,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Modulo(ty.vec4<f32>(), vector, scalar);
         b.Return(func, result);
     });
@@ -459,7 +459,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Modulo(ty.vec4<f32>(), scalar, vector);
         b.Return(func, result);
     });
@@ -495,7 +495,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec4<f32>(), vector, scalar);
         b.Return(func, result);
     });
@@ -530,7 +530,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec4<f32>(), scalar, vector);
         b.Return(func, result);
     });
@@ -565,7 +565,7 @@
     auto* func = b.Function("foo", ty.vec4<i32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec4<i32>(), vector, scalar);
         b.Return(func, result);
     });
@@ -601,7 +601,7 @@
     auto* func = b.Function("foo", ty.vec4<i32>());
     func->SetParams({scalar, vector});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec4<i32>(), scalar, vector);
         b.Return(func, result);
     });
@@ -638,7 +638,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({arg1, arg2, factor});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kMix, arg1, arg2, factor);
         b.Return(func, result);
     });
diff --git a/src/tint/lang/core/ir/transform/handle_matrix_arithmetic_test.cc b/src/tint/lang/core/ir/transform/handle_matrix_arithmetic_test.cc
index 20ef140..462f0c8 100644
--- a/src/tint/lang/core/ir/transform/handle_matrix_arithmetic_test.cc
+++ b/src/tint/lang/core/ir/transform/handle_matrix_arithmetic_test.cc
@@ -33,7 +33,7 @@
     auto* func = b.Function("foo", ty.mat2x3<f32>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Add(ty.mat2x3<f32>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -74,7 +74,7 @@
     auto* func = b.Function("foo", ty.mat4x2<f16>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Add(ty.mat4x2<f16>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -121,7 +121,7 @@
     auto* func = b.Function("foo", ty.mat3x2<f32>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Subtract(ty.mat3x2<f32>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -165,7 +165,7 @@
     auto* func = b.Function("foo", ty.mat2x4<f16>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Subtract(ty.mat2x4<f16>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -206,7 +206,7 @@
     auto* func = b.Function("foo", ty.mat2x3<f32>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.mat2x3<f32>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -241,7 +241,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec4<f32>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -276,7 +276,7 @@
     auto* func = b.Function("foo", ty.mat2x2<f32>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.mat2x2<f32>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -311,7 +311,7 @@
     auto* func = b.Function("foo", ty.mat3x2<f16>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.mat3x2<f16>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -346,7 +346,7 @@
     auto* func = b.Function("foo", ty.vec4<f16>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec4<f16>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -381,7 +381,7 @@
     auto* func = b.Function("foo", ty.mat3x3<f16>());
     func->SetParams({arg1, arg2});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.mat3x3<f16>(), arg1, arg2);
         b.Return(func, result);
     });
@@ -415,7 +415,7 @@
     auto* func = b.Function("foo", ty.mat2x3<f16>());
     func->SetParams({arg});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Convert(ty.mat2x3<f16>(), arg);
         b.Return(func, result);
     });
@@ -453,7 +453,7 @@
     auto* func = b.Function("foo", ty.mat4x4<f16>());
     func->SetParams({arg});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Convert(ty.mat4x4<f16>(), arg);
         b.Return(func, result);
     });
@@ -495,7 +495,7 @@
     auto* func = b.Function("foo", ty.mat4x3<f32>());
     func->SetParams({arg});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Convert(ty.mat4x3<f32>(), arg);
         b.Return(func, result);
     });
@@ -537,7 +537,7 @@
     auto* func = b.Function("foo", ty.mat2x2<f16>());
     func->SetParams({arg});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Convert(ty.mat2x2<f16>(), arg);
         b.Return(func, result);
     });
diff --git a/src/tint/lang/core/ir/transform/merge_return.cc b/src/tint/lang/core/ir/transform/merge_return.cc
index 1d321c7..5eaa976 100644
--- a/src/tint/lang/core/ir/transform/merge_return.cc
+++ b/src/tint/lang/core/ir/transform/merge_return.cc
@@ -277,7 +277,7 @@
     /// Adds a final return instruction to the end of @p fn
     /// @param fn the function
     void AppendFinalReturn(Function* fn) {
-        b.With(fn->Block(), [&] {
+        b.Append(fn->Block(), [&] {
             if (return_val) {
                 b.Return(fn, b.Load(return_val));
             } else {
diff --git a/src/tint/lang/core/ir/transform/merge_return_test.cc b/src/tint/lang/core/ir/transform/merge_return_test.cc
index 055de57..2fb5bd0 100644
--- a/src/tint/lang/core/ir/transform/merge_return_test.cc
+++ b/src/tint/lang/core/ir/transform/merge_return_test.cc
@@ -31,7 +31,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({in});
 
-    b.With(func->Block(), [&] { b.Return(func, b.Add(ty.i32(), in, 1_i)); });
+    b.Append(func->Block(), [&] { b.Return(func, b.Add(ty.i32(), in, 1_i)); });
 
     auto* src = R"(
 %foo = func(%2:i32):i32 -> %b1 {
@@ -56,11 +56,11 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({in});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse = b.If(cond);
         ifelse->SetResults(b.InstructionResult(ty.i32()));
-        b.With(ifelse->True(), [&] { b.ExitIf(ifelse, b.Add(ty.i32(), in, 1_i)); });
-        b.With(ifelse->False(), [&] { b.ExitIf(ifelse, b.Add(ty.i32(), in, 2_i)); });
+        b.Append(ifelse->True(), [&] { b.ExitIf(ifelse, b.Add(ty.i32(), in, 1_i)); });
+        b.Append(ifelse->False(), [&] { b.ExitIf(ifelse, b.Add(ty.i32(), in, 2_i)); });
 
         b.Return(func, ifelse->Result(0));
     });
@@ -96,17 +96,17 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({in});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* swtch = b.Switch(in);
-        b.With(b.Case(swtch, {Switch::CaseSelector{}}), [&] { b.ExitSwitch(swtch); });
+        b.Append(b.Case(swtch, {Switch::CaseSelector{}}), [&] { b.ExitSwitch(swtch); });
 
         auto* l = b.Loop();
-        b.With(l->Body(), [&] { b.ExitLoop(l); });
+        b.Append(l->Body(), [&] { b.ExitLoop(l); });
 
         auto* ifelse = b.If(cond);
         ifelse->SetResults(b.InstructionResult(ty.i32()));
-        b.With(ifelse->True(), [&] { b.ExitIf(ifelse, b.Add(ty.i32(), in, 1_i)); });
-        b.With(ifelse->False(), [&] { b.ExitIf(ifelse, b.Add(ty.i32(), in, 2_i)); });
+        b.Append(ifelse->True(), [&] { b.ExitIf(ifelse, b.Add(ty.i32(), in, 1_i)); });
+        b.Append(ifelse->False(), [&] { b.ExitIf(ifelse, b.Add(ty.i32(), in, 2_i)); });
 
         b.Return(func, ifelse->Result(0));
     });
@@ -152,10 +152,10 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse = b.If(cond);
-        b.With(ifelse->True(), [&] { b.Return(func); });
-        b.With(ifelse->False(), [&] { b.ExitIf(ifelse); });
+        b.Append(ifelse->True(), [&] { b.Return(func); });
+        b.Append(ifelse->False(), [&] { b.ExitIf(ifelse); });
 
         b.Return(func);
     });
@@ -205,12 +205,12 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse = b.If(cond);
         b.Return(func);
 
-        b.With(ifelse->True(), [&] { b.Return(func); });
-        b.With(ifelse->False(), [&] { b.ExitIf(ifelse); });
+        b.Append(ifelse->True(), [&] { b.Return(func); });
+        b.Append(ifelse->False(), [&] { b.ExitIf(ifelse); });
     });
 
     auto* src = R"(
@@ -256,10 +256,10 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse = b.If(cond);
-        b.With(ifelse->True(), [&] { b.Return(func, 1_i); });
-        b.With(ifelse->False(), [&] { b.ExitIf(ifelse); });
+        b.Append(ifelse->True(), [&] { b.Return(func, 1_i); });
+        b.Append(ifelse->False(), [&] { b.ExitIf(ifelse); });
 
         b.Return(func, 2_i);
     });
@@ -319,11 +319,11 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse = b.If(cond);
         ifelse->SetResults(b.InstructionResult(ty.i32()));
-        b.With(ifelse->True(), [&] { b.Return(func, 1_i); });
-        b.With(ifelse->False(), [&] { b.ExitIf(ifelse, 2_i); });
+        b.Append(ifelse->True(), [&] { b.Return(func, 1_i); });
+        b.Append(ifelse->False(), [&] { b.ExitIf(ifelse, 2_i); });
 
         b.Return(func, ifelse->Result(0));
     });
@@ -383,11 +383,11 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse = b.If(cond);
         ifelse->SetResults(b.InstructionResult(ty.i32()));
-        b.With(ifelse->True(), [&] { b.Return(func, 1_i); });
-        b.With(ifelse->False(), [&] { b.ExitIf(ifelse, nullptr); });
+        b.Append(ifelse->True(), [&] { b.Return(func, 1_i); });
+        b.Append(ifelse->False(), [&] { b.ExitIf(ifelse, nullptr); });
 
         b.Return(func, ifelse->Result(0));
     });
@@ -447,10 +447,10 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse = b.If(cond);
-        b.With(ifelse->True(), [&] { b.Return(func); });
-        b.With(ifelse->False(), [&] { b.Return(func); });
+        b.Append(ifelse->True(), [&] { b.Return(func); });
+        b.Append(ifelse->False(), [&] { b.Return(func); });
 
         b.Unreachable();
     });
@@ -502,10 +502,10 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse = b.If(cond);
-        b.With(ifelse->True(), [&] { b.Return(func); });
-        b.With(ifelse->False(), [&] { b.ExitIf(ifelse); });
+        b.Append(ifelse->True(), [&] { b.Return(func); });
+        b.Append(ifelse->False(), [&] { b.ExitIf(ifelse); });
 
         b.Store(global, 42_i);
         b.Return(func);
@@ -578,13 +578,13 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse = b.If(cond);
         b.Store(global, 42_i);
         b.Return(func);
 
-        b.With(ifelse->True(), [&] { b.Return(func); });
-        b.With(ifelse->False(), [&] { b.ExitIf(ifelse); });
+        b.Append(ifelse->True(), [&] { b.Return(func); });
+        b.Append(ifelse->False(), [&] { b.ExitIf(ifelse); });
     });
 
     auto* src = R"(
@@ -654,20 +654,20 @@
     auto* condC = b.FunctionParam("condC", ty.bool_());
     func->SetParams({condA, condB, condC});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse_outer = b.If(condA);
-        b.With(ifelse_outer->True(), [&] { b.Return(func, 3_i); });
-        b.With(ifelse_outer->False(), [&] {
+        b.Append(ifelse_outer->True(), [&] { b.Return(func, 3_i); });
+        b.Append(ifelse_outer->False(), [&] {
             auto* ifelse_middle = b.If(condB);
-            b.With(ifelse_middle->True(), [&] {
+            b.Append(ifelse_middle->True(), [&] {
                 auto* ifelse_inner = b.If(condC);
-                b.With(ifelse_inner->True(), [&] { b.Return(func, 1_i); });
-                b.With(ifelse_inner->False(), [&] { b.ExitIf(ifelse_inner); });
+                b.Append(ifelse_inner->True(), [&] { b.Return(func, 1_i); });
+                b.Append(ifelse_inner->False(), [&] { b.ExitIf(ifelse_inner); });
 
                 b.Store(global, 1_i);
                 b.Return(func, 2_i);
             });
-            b.With(ifelse_middle->False(), [&] { b.ExitIf(ifelse_middle); });
+            b.Append(ifelse_middle->False(), [&] { b.ExitIf(ifelse_middle); });
             b.Store(global, 2_i);
             b.ExitIf(ifelse_outer);
         });
@@ -800,19 +800,19 @@
     auto* condC = b.FunctionParam("condC", ty.bool_());
     func->SetParams({condA, condB, condC});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse_outer = b.If(condA);
-        b.With(ifelse_outer->True(), [&] { b.Return(func, 3_i); });
-        b.With(ifelse_outer->False(), [&] {
+        b.Append(ifelse_outer->True(), [&] { b.Return(func, 3_i); });
+        b.Append(ifelse_outer->False(), [&] {
             auto* ifelse_middle = b.If(condB);
-            b.With(ifelse_middle->True(), [&] {
+            b.Append(ifelse_middle->True(), [&] {
                 auto* ifelse_inner = b.If(condC);
-                b.With(ifelse_inner->True(), [&] { b.Return(func, 1_i); });
-                b.With(ifelse_inner->False(), [&] { b.ExitIf(ifelse_inner); });
+                b.Append(ifelse_inner->True(), [&] { b.Return(func, 1_i); });
+                b.Append(ifelse_inner->False(), [&] { b.ExitIf(ifelse_inner); });
 
                 b.ExitIf(ifelse_middle);
             });
-            b.With(ifelse_middle->False(), [&] { b.ExitIf(ifelse_middle); });
+            b.Append(ifelse_middle->False(), [&] { b.ExitIf(ifelse_middle); });
 
             b.ExitIf(ifelse_outer);
         });
@@ -921,23 +921,23 @@
     auto* condC = b.FunctionParam("condC", ty.bool_());
     func->SetParams({condA, condB, condC});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ifelse_outer = b.If(condA);
         ifelse_outer->SetResults(b.InstructionResult(ty.i32()));
-        b.With(ifelse_outer->True(), [&] { b.Return(func, 3_i); });
-        b.With(ifelse_outer->False(), [&] {
+        b.Append(ifelse_outer->True(), [&] { b.Return(func, 3_i); });
+        b.Append(ifelse_outer->False(), [&] {
             auto* ifelse_middle = b.If(condB);
             ifelse_middle->SetResults(b.InstructionResult(ty.i32()));
-            b.With(ifelse_middle->True(), [&] {
+            b.Append(ifelse_middle->True(), [&] {
                 auto* ifelse_inner = b.If(condC);
 
-                b.With(ifelse_inner->True(), [&] { b.Return(func, 1_i); });
-                b.With(ifelse_inner->False(), [&] { b.ExitIf(ifelse_inner); });
+                b.Append(ifelse_inner->True(), [&] { b.Return(func, 1_i); });
+                b.Append(ifelse_inner->False(), [&] { b.ExitIf(ifelse_inner); });
 
                 b.ExitIf(ifelse_middle, b.Add(ty.i32(), 42_i, 1_i));
             });
-            b.With(ifelse_middle->False(),
-                   [&] { b.ExitIf(ifelse_middle, b.Add(ty.i32(), 43_i, 2_i)); });
+            b.Append(ifelse_middle->False(),
+                     [&] { b.ExitIf(ifelse_middle, b.Add(ty.i32(), 43_i, 2_i)); });
             b.ExitIf(ifelse_outer, b.Add(ty.i32(), ifelse_middle->Result(0), 1_i));
         });
 
@@ -1062,9 +1062,9 @@
 TEST_F(IR_MergeReturnTest, Loop_UnconditionalReturnInBody) {
     auto* func = b.Function("foo", ty.i32());
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] { b.Return(func, 42_i); });
+        b.Append(loop->Body(), [&] { b.Return(func, 42_i); });
 
         b.Unreachable();
     });
@@ -1111,18 +1111,18 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* ifelse = b.If(cond);
-            b.With(ifelse->True(), [&] { b.Return(func, 42_i); });
-            b.With(ifelse->False(), [&] { b.ExitIf(ifelse); });
+            b.Append(ifelse->True(), [&] { b.Return(func, 42_i); });
+            b.Append(ifelse->False(), [&] { b.ExitIf(ifelse); });
 
             b.Store(global, 2_i);
             b.Continue(loop);
         });
 
-        b.With(loop->Continuing(), [&] {
+        b.Append(loop->Continuing(), [&] {
             b.Store(global, 1_i);
             b.BreakIf(loop, true);
         });
@@ -1225,19 +1225,19 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* ifelse = b.If(cond);
 
-            b.With(ifelse->True(), [&] { b.Return(func, 42_i); });
-            b.With(ifelse->False(), [&] { b.ExitIf(ifelse); });
+            b.Append(ifelse->True(), [&] { b.Return(func, 42_i); });
+            b.Append(ifelse->False(), [&] { b.ExitIf(ifelse); });
 
             b.Store(global, 2_i);
             b.Continue(loop);
         });
 
-        b.With(loop->Continuing(), [&] {
+        b.Append(loop->Continuing(), [&] {
             b.Store(global, 1_i);
             b.NextIteration(loop);
         });
@@ -1330,19 +1330,19 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
         loop->SetResults(b.InstructionResult(ty.i32()));
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* ifelse = b.If(cond);
-            b.With(ifelse->True(), [&] { b.Return(func, 42_i); });
-            b.With(ifelse->False(), [&] { b.ExitIf(ifelse); });
+            b.Append(ifelse->True(), [&] { b.Return(func, 42_i); });
+            b.Append(ifelse->False(), [&] { b.ExitIf(ifelse); });
 
             b.Store(global, 2_i);
             b.Continue(loop);
         });
 
-        b.With(loop->Continuing(), [&] {
+        b.Append(loop->Continuing(), [&] {
             b.Store(global, 1_i);
             b.BreakIf(loop, true, 4_i);
         });
@@ -1441,10 +1441,11 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* sw = b.Switch(cond);
-        b.With(b.Case(sw, {Switch::CaseSelector{b.Constant(1_i)}}), [&] { b.Return(func, 42_i); });
-        b.With(b.Case(sw, {Switch::CaseSelector{}}), [&] { b.ExitSwitch(sw); });
+        b.Append(b.Case(sw, {Switch::CaseSelector{b.Constant(1_i)}}),
+                 [&] { b.Return(func, 42_i); });
+        b.Append(b.Case(sw, {Switch::CaseSelector{}}), [&] { b.ExitSwitch(sw); });
 
         b.Return(func, 0_i);
     });
@@ -1507,19 +1508,19 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* sw = b.Switch(cond);
-        b.With(b.Case(sw, {Switch::CaseSelector{b.Constant(1_i)}}), [&] {
+        b.Append(b.Case(sw, {Switch::CaseSelector{b.Constant(1_i)}}), [&] {
             auto* ifcond = b.Equal(ty.bool_(), cond, 1_i);
             auto* ifelse = b.If(ifcond);
-            b.With(ifelse->True(), [&] { b.Return(func, 42_i); });
-            b.With(ifelse->False(), [&] { b.ExitIf(ifelse); });
+            b.Append(ifelse->True(), [&] { b.Return(func, 42_i); });
+            b.Append(ifelse->False(), [&] { b.ExitIf(ifelse); });
 
             b.Store(global, 2_i);
             b.ExitSwitch(sw);
         });
 
-        b.With(b.Case(sw, {Switch::CaseSelector{}}), [&] { b.ExitSwitch(sw); });
+        b.Append(b.Case(sw, {Switch::CaseSelector{}}), [&] { b.ExitSwitch(sw); });
 
         b.Return(func, 0_i);
     });
@@ -1613,13 +1614,16 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* sw = b.Switch(cond);
         sw->SetResults(b.InstructionResult(ty.i32()));  // NOLINT: false detection of std::tuple
-        b.With(b.Case(sw, {Switch::CaseSelector{b.Constant(1_i)}}), [&] { b.Return(func, 42_i); });
-        b.With(b.Case(sw, {Switch::CaseSelector{b.Constant(2_i)}}), [&] { b.Return(func, 99_i); });
-        b.With(b.Case(sw, {Switch::CaseSelector{b.Constant(3_i)}}), [&] { b.ExitSwitch(sw, 1_i); });
-        b.With(b.Case(sw, {Switch::CaseSelector{}}), [&] { b.ExitSwitch(sw, 0_i); });
+        b.Append(b.Case(sw, {Switch::CaseSelector{b.Constant(1_i)}}),
+                 [&] { b.Return(func, 42_i); });
+        b.Append(b.Case(sw, {Switch::CaseSelector{b.Constant(2_i)}}),
+                 [&] { b.Return(func, 99_i); });
+        b.Append(b.Case(sw, {Switch::CaseSelector{b.Constant(3_i)}}),
+                 [&] { b.ExitSwitch(sw, 1_i); });
+        b.Append(b.Case(sw, {Switch::CaseSelector{}}), [&] { b.ExitSwitch(sw, 0_i); });
 
         b.Return(func, sw->Result(0));
     });
@@ -1691,10 +1695,10 @@
 TEST_F(IR_MergeReturnTest, LoopIfReturnThenContinue) {
     auto* func = b.Function("foo", ty.void_());
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {
-            b.With(b.If(true)->True(), [&] { b.Return(func); });
+        b.Append(loop->Body(), [&] {
+            b.Append(b.If(true)->True(), [&] { b.Return(func); });
             b.Continue(loop);
         });
         b.Unreachable();
@@ -1753,9 +1757,9 @@
 TEST_F(IR_MergeReturnTest, NestedIfsWithReturns) {
     auto* func = b.Function("foo", ty.i32());
 
-    b.With(func->Block(), [&] {
-        b.With(b.If(true)->True(), [&] {
-            b.With(b.If(true)->True(), [&] { b.Return(func, 1_i); });
+    b.Append(func->Block(), [&] {
+        b.Append(b.If(true)->True(), [&] {
+            b.Append(b.If(true)->True(), [&] { b.Return(func, 1_i); });
             b.Return(func, 2_i);
         });
         b.Return(func, 3_i);
diff --git a/src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc b/src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc
index 3ea134c29a..32dd8bf 100644
--- a/src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc
+++ b/src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc
@@ -28,7 +28,7 @@
 using IR_RenameConflictsWGSLTest = TransformTest;
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_SingleNamedRootBlockVar) {
-    b.With(b.RootBlock(), [&] { b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "v"); });
+    b.Append(b.RootBlock(), [&] { b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "v"); });
 
     auto* src = R"(
 %b1 = block {  # root
@@ -46,7 +46,7 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_TwoRootBlockVarsWithSameName) {
-    b.With(b.RootBlock(), [&] {
+    b.Append(b.RootBlock(), [&] {
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "v");
         b.ir.SetName(b.Var(ty.ptr<private_, u32>()), "v");
     });
@@ -75,7 +75,7 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_RootBlockVarAndStructWithSameName) {
     auto* s = ty.Struct(b.ir.symbols.New("v"), {{b.ir.symbols.New("x"), ty.i32()}});
-    b.With(b.RootBlock(), [&] { b.ir.SetName(b.Var(ty.ptr(function, s)), "v"); });
+    b.Append(b.RootBlock(), [&] { b.ir.SetName(b.Var(ty.ptr(function, s)), "v"); });
 
     auto* src = R"(
 v = struct @align(4) {
@@ -106,10 +106,10 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_RootBlockVarAndFnWithSameName) {
-    b.With(b.RootBlock(), [&] { b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "v"); });
+    b.Append(b.RootBlock(), [&] { b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "v"); });
 
     auto* fn = b.Function("v", ty.void_());
-    b.With(fn->Block(), [&] { b.Return(fn); });
+    b.Append(fn->Block(), [&] { b.Return(fn); });
 
     auto* src = R"(
 %b1 = block {  # root
@@ -142,12 +142,12 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_RootBlockVar_ShadowedBy_FnVar) {
-    b.With(b.RootBlock(), [&] {
+    b.Append(b.RootBlock(), [&] {
         auto* outer = b.Var(ty.ptr<private_, i32>());
         b.ir.SetName(outer, "v");
 
         auto* fn = b.Function("f", ty.i32());
-        b.With(fn->Block(), [&] {
+        b.Append(fn->Block(), [&] {
             auto* load_outer = b.Load(outer);
 
             auto* inner = b.Var(ty.ptr<function, f32>());
@@ -183,12 +183,12 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_RootBlockVar_ShadowedBy_FnVar) {
-    b.With(b.RootBlock(), [&] {
+    b.Append(b.RootBlock(), [&] {
         auto* outer = b.Var(ty.ptr<private_, i32>());
         b.ir.SetName(outer, "v");
 
         auto* fn = b.Function("f", ty.i32());
-        b.With(fn->Block(), [&] {
+        b.Append(fn->Block(), [&] {
             auto* inner = b.Var(ty.ptr<function, f32>());
             b.ir.SetName(inner, "v");
 
@@ -238,12 +238,12 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_FnVar_ShadowedBy_IfVar) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* outer = b.Var(ty.ptr<function, f32>());
         b.ir.SetName(outer, "v");
 
         auto* if_ = b.If(true);
-        b.With(if_->True(), [&] {
+        b.Append(if_->True(), [&] {
             auto* load_outer = b.Load(outer);
 
             auto* inner = b.Var(ty.ptr<function, f32>());
@@ -284,12 +284,12 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_FnVar_ShadowedBy_IfVar) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* outer = b.Var(ty.ptr<function, f32>());
         b.ir.SetName(outer, "v");
 
         auto* if_ = b.If(true);
-        b.With(if_->True(), [&] {
+        b.Append(if_->True(), [&] {
             auto* inner = b.Var(ty.ptr<function, f32>());
             b.ir.SetName(inner, "v");
 
@@ -345,14 +345,14 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_LoopInitVar_ShadowedBy_LoopBodyVar) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             auto* outer = b.Var(ty.ptr<function, f32>());
             b.ir.SetName(outer, "v");
             b.NextIteration(loop);
 
-            b.With(loop->Body(), [&] {
+            b.Append(loop->Body(), [&] {
                 auto* load_outer = b.Load(outer);
 
                 auto* inner = b.Var(ty.ptr<function, f32>());
@@ -397,14 +397,14 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_LoopInitVar_ShadowedBy_LoopBodyVar) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Initializer(), [&] {
+        b.Append(loop->Initializer(), [&] {
             auto* outer = b.Var(ty.ptr<function, f32>());
             b.ir.SetName(outer, "v");
             b.NextIteration(loop);
 
-            b.With(loop->Body(), [&] {
+            b.Append(loop->Body(), [&] {
                 auto* inner = b.Var(ty.ptr<function, f32>());
                 b.ir.SetName(inner, "v");
 
@@ -467,15 +467,15 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_LoopBodyVar_ShadowedBy_LoopContVar) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Initializer(), [&] { b.NextIteration(loop); });
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Initializer(), [&] { b.NextIteration(loop); });
+        b.Append(loop->Body(), [&] {
             auto* outer = b.Var(ty.ptr<function, f32>());
             b.ir.SetName(outer, "v");
             b.Continue(loop);
 
-            b.With(loop->Continuing(), [&] {
+            b.Append(loop->Continuing(), [&] {
                 auto* load_outer = b.Load(outer);
 
                 auto* inner = b.Var(ty.ptr<function, f32>());
@@ -523,15 +523,15 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_LoopBodyVar_ShadowedBy_LoopContVar) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Initializer(), [&] { b.NextIteration(loop); });
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Initializer(), [&] { b.NextIteration(loop); });
+        b.Append(loop->Body(), [&] {
             auto* outer = b.Var(ty.ptr<function, f32>());
             b.ir.SetName(outer, "v");
             b.Continue(loop);
 
-            b.With(loop->Continuing(), [&] {
+            b.Append(loop->Continuing(), [&] {
                 auto* inner = b.Var(ty.ptr<function, f32>());
                 b.ir.SetName(inner, "v");
 
@@ -604,7 +604,7 @@
     b.ir.SetName(p, "i32");
     fn->SetParams({p});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         b.Var(ty.ptr<function, i32>());
         b.Return(fn);
     });
@@ -639,7 +639,7 @@
     b.ir.SetName(p, "vec2");
     fn->SetParams({p});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         b.Var(ty.ptr<function, vec3<i32>>());
         b.Return(fn);
     });
@@ -667,7 +667,7 @@
     b.ir.SetName(p, "vec3");
     fn->SetParams({p});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         b.Var(ty.ptr<function, vec3<i32>>());
         b.Return(fn);
     });
@@ -702,7 +702,7 @@
     b.ir.SetName(p, "mat3x2");
     fn->SetParams({p});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         b.Var(ty.ptr<function, mat2x4<f32>>());
         b.Return(fn);
     });
@@ -730,7 +730,7 @@
     b.ir.SetName(p, "mat2x4");
     fn->SetParams({p});
 
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         b.Var(ty.ptr<function, mat2x4<f32>>());
         b.Return(fn);
     });
@@ -761,7 +761,7 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinScalar_ShadowedBy_FnVar) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var(ty.ptr<function, i32>());
         b.ir.SetName(v, "f32");
 
@@ -788,7 +788,7 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinScalar_ShadowedBy_FnVar) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* v = b.Var(ty.ptr<function, i32>());
         b.ir.SetName(v, "i32");
 
@@ -823,7 +823,7 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinScalar_ShadowedBy_NamedInst) {
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* i = b.Add(ty.i32(), 1_i, 2_i);
         b.ir.SetName(i, "i32");
 
@@ -849,7 +849,7 @@
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinScalar_ShadowedBy_NamedInst) {
     auto* fn = b.Function("f", ty.f32());
-    b.With(fn->Block(), [&] {
+    b.Append(fn->Block(), [&] {
         auto* i = b.Add(ty.i32(), 1_i, 2_i);
         b.ir.SetName(i, "f32");
 
@@ -883,7 +883,7 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinAddressSpace_ShadowedBy_RootBlockVar) {
-    b.With(b.RootBlock(), [&] {  //
+    b.Append(b.RootBlock(), [&] {  //
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "function");
     });
 
@@ -903,7 +903,7 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinAddressSpace_ShadowedBy_RootBlockVar) {
-    b.With(b.RootBlock(), [&] {  //
+    b.Append(b.RootBlock(), [&] {  //
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "private");
     });
 
@@ -928,7 +928,7 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinAccess_ShadowedBy_RootBlockVar) {
-    b.With(b.RootBlock(), [&] {  //
+    b.Append(b.RootBlock(), [&] {  //
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "read");
     });
 
@@ -948,7 +948,7 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinAccess_ShadowedBy_RootBlockVar) {
-    b.With(b.RootBlock(), [&] {  //
+    b.Append(b.RootBlock(), [&] {  //
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "read_write");
     });
 
@@ -973,13 +973,13 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinFn_ShadowedBy_RootBlockVar) {
-    b.With(b.RootBlock(), [&] {  //
+    b.Append(b.RootBlock(), [&] {  //
         auto* v = b.Var(ty.ptr<private_, i32>());
         b.ir.SetName(v, "min");
     });
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {  //
+    b.Append(fn->Block(), [&] {  //
         auto* res = b.Call(ty.i32(), builtin::Function::kMax, 1_i, 2_i)->Result();
         b.Return(fn, res);
     });
@@ -1006,13 +1006,13 @@
 }
 
 TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinFn_ShadowedBy_RootBlockVar) {
-    b.With(b.RootBlock(), [&] {  //
+    b.Append(b.RootBlock(), [&] {  //
         auto* v = b.Var(ty.ptr<private_, i32>());
         b.ir.SetName(v, "max");
     });
 
     auto* fn = b.Function("f", ty.i32());
-    b.With(fn->Block(), [&] {  //
+    b.Append(fn->Block(), [&] {  //
         auto* res = b.Call(ty.i32(), builtin::Function::kMax, 1_i, 2_i)->Result();
         b.Return(fn, res);
     });
diff --git a/src/tint/lang/core/ir/transform/shader_io.cc b/src/tint/lang/core/ir/transform/shader_io.cc
index 45db03e..a324b93 100644
--- a/src/tint/lang/core/ir/transform/shader_io.cc
+++ b/src/tint/lang/core/ir/transform/shader_io.cc
@@ -126,7 +126,7 @@
         if (wgsize) {
             ep->SetWorkgroupSize((*wgsize)[0], (*wgsize)[1], (*wgsize)[2]);
         }
-        auto wrapper = b.With(ep->Block());
+        auto wrapper = b.Append(ep->Block());
 
         // Call the original function, passing it the inputs and capturing its return value.
         auto inner_call_args = BuildInnerCallArgs(wrapper);
diff --git a/src/tint/lang/core/ir/transform/shader_io_spirv_test.cc b/src/tint/lang/core/ir/transform/shader_io_spirv_test.cc
index e85a5270..dd11fcc 100644
--- a/src/tint/lang/core/ir/transform/shader_io_spirv_test.cc
+++ b/src/tint/lang/core/ir/transform/shader_io_spirv_test.cc
@@ -30,7 +30,7 @@
     auto* ep = b.Function("foo", ty.void_());
     ep->SetStage(Function::PipelineStage::kCompute);
 
-    b.With(ep->Block(), [&] {  //
+    b.Append(ep->Block(), [&] {  //
         b.Return(ep);
     });
 
@@ -66,9 +66,9 @@
     ep->SetParams({front_facing, position, color1, color2});
     ep->SetStage(Function::PipelineStage::kFragment);
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {
+        b.Append(ifelse->True(), [&] {
             b.Multiply(ty.vec4<f32>(), position, b.Add(ty.f32(), color1, color2));
             b.ExitIf(ifelse);
         });
@@ -176,9 +176,9 @@
     ep->SetParams({str_param});
     ep->SetStage(Function::PipelineStage::kFragment);
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(b.Access(ty.bool_(), str_param, 0_i));
-        b.With(ifelse->True(), [&] {
+        b.Append(ifelse->True(), [&] {
             auto* position = b.Access(ty.vec4<f32>(), str_param, 1_i);
             auto* color1 = b.Access(ty.f32(), str_param, 2_i);
             auto* color2 = b.Access(ty.f32(), str_param, 3_i);
@@ -302,9 +302,9 @@
     ep->SetParams({front_facing, str_param, color2});
     ep->SetStage(Function::PipelineStage::kFragment);
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {
+        b.Append(ifelse->True(), [&] {
             auto* position = b.Access(ty.vec4<f32>(), str_param, 0_i);
             auto* color1 = b.Access(ty.f32(), str_param, 1_i);
             b.Multiply(ty.vec4<f32>(), position, b.Add(ty.f32(), color1, color2));
@@ -399,7 +399,7 @@
     ep->SetReturnInvariant(true);
     ep->SetStage(Function::PipelineStage::kVertex);
 
-    b.With(ep->Block(), [&] {  //
+    b.Append(ep->Block(), [&] {  //
         b.Return(ep, b.Construct(ty.vec4<f32>(), 0.5_f));
     });
 
@@ -448,7 +448,7 @@
     ep->SetReturnLocation(1u, {});
     ep->SetStage(Function::PipelineStage::kFragment);
 
-    b.With(ep->Block(), [&] {  //
+    b.Append(ep->Block(), [&] {  //
         b.Return(ep, b.Construct(ty.vec4<f32>(), 0.5_f));
     });
 
@@ -521,7 +521,7 @@
     auto* ep = b.Function("foo", str_ty);
     ep->SetStage(Function::PipelineStage::kVertex);
 
-    b.With(ep->Block(), [&] {  //
+    b.Append(ep->Block(), [&] {  //
         b.Return(ep, b.Construct(str_ty, b.Construct(ty.vec4<f32>(), 0_f), 0.25_f, 0.75_f));
     });
 
@@ -613,7 +613,7 @@
         auto* ep = b.Function("vert", str_ty);
         ep->SetStage(Function::PipelineStage::kVertex);
 
-        b.With(ep->Block(), [&] {  //
+        b.Append(ep->Block(), [&] {  //
             auto* position = b.Construct(vec4f, 0_f);
             auto* color = b.Construct(vec4f, 1_f);
             b.Return(ep, b.Construct(str_ty, position, color));
@@ -627,7 +627,7 @@
         ep->SetStage(Function::PipelineStage::kFragment);
         ep->SetParams({inputs});
 
-        b.With(ep->Block(), [&] {  //
+        b.Append(ep->Block(), [&] {  //
             auto* position = b.Access(vec4f, inputs, 0_u);
             auto* color = b.Access(vec4f, inputs, 1_u);
             b.Return(ep, b.Add(vec4f, position, color));
@@ -762,7 +762,7 @@
     auto* ep = b.Function("vert", str_ty);
     ep->SetStage(Function::PipelineStage::kVertex);
 
-    b.With(ep->Block(), [&] {  //
+    b.Append(ep->Block(), [&] {  //
         b.Return(ep, b.Load(buffer));
     });
 
@@ -853,7 +853,7 @@
     ep->SetStage(Function::PipelineStage::kFragment);
     ep->SetParams({mask_in});
 
-    b.With(ep->Block(), [&] {  //
+    b.Append(ep->Block(), [&] {  //
         b.Return(ep, b.Construct(str_ty, 0.5_f, mask_in));
     });
 
diff --git a/src/tint/lang/core/ir/validator_test.cc b/src/tint/lang/core/ir/validator_test.cc
index 9921a81..6701b74 100644
--- a/src/tint/lang/core/ir/validator_test.cc
+++ b/src/tint/lang/core/ir/validator_test.cc
@@ -126,7 +126,7 @@
     auto* obj = b.FunctionParam(ty.vec3<f32>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.f32(), obj, -1_i);
         b.Return(f);
     });
@@ -156,7 +156,7 @@
     auto* obj = b.FunctionParam(ty.mat3x2<f32>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.f32(), obj, 1_u, 3_u);
         b.Return(f);
     });
@@ -190,7 +190,7 @@
     auto* obj = b.FunctionParam(ty.ptr<private_, array<array<f32, 2>, 3>>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.ptr<private_, f32>(), obj, 1_u, 3_u);
         b.Return(f);
     });
@@ -225,7 +225,7 @@
     auto* obj = b.FunctionParam(ty.f32());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.f32(), obj, 1_u);
         b.Return(f);
     });
@@ -255,7 +255,7 @@
     auto* obj = b.FunctionParam(ty.ptr<private_, f32>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.ptr<private_, f32>(), obj, 1_u);
         b.Return(f);
     });
@@ -291,7 +291,7 @@
     auto* idx = b.FunctionParam(ty.i32());
     f->SetParams({obj, idx});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.i32(), obj, idx);
         b.Return(f);
     });
@@ -333,7 +333,7 @@
     auto* idx = b.FunctionParam(ty.i32());
     f->SetParams({obj, idx});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.i32(), obj, idx);
         b.Return(f);
     });
@@ -369,7 +369,7 @@
     auto* obj = b.FunctionParam(ty.mat3x2<f32>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.i32(), obj, 1_u, 1_u);
         b.Return(f);
     });
@@ -400,7 +400,7 @@
     auto* obj = b.FunctionParam(ty.ptr<private_, array<array<f32, 2>, 3>>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.ptr<private_, i32>(), obj, 1_u, 1_u);
         b.Return(f);
     });
@@ -432,7 +432,7 @@
     auto* obj = b.FunctionParam(ty.ptr<private_, array<array<f32, 2>, 3>>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.f32(), obj, 1_u, 1_u);
         b.Return(f);
     });
@@ -464,7 +464,7 @@
     auto* obj = b.FunctionParam(ty.ptr<private_, vec3<f32>>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.f32(), obj, 1_u);
         b.Return(f);
     });
@@ -495,7 +495,7 @@
     auto* obj = b.FunctionParam(ty.ptr<private_, mat3x2<f32>>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.f32(), obj, 1_u, 1_u);
         b.Return(f);
     });
@@ -526,7 +526,7 @@
     auto* obj = b.FunctionParam(ty.vec3<f32>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.f32(), obj, 1_u);
         b.Return(f);
     });
@@ -540,7 +540,7 @@
     auto* obj = b.FunctionParam(ty.mat3x2<f32>());
     f->SetParams({obj});
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Access(ty.f32(), obj, 1_u, 1_u);
         b.Return(f);
     });
@@ -552,7 +552,7 @@
 TEST_F(IR_ValidatorTest, Block_TerminatorInMiddle) {
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Return(f);
         b.Return(f);
     });
@@ -741,7 +741,7 @@
     auto* l = b.Loop();
     l->Body()->Append(b.ExitLoop(l));
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(l);
     sb.Return(f);
 
@@ -752,7 +752,7 @@
 TEST_F(IR_ValidatorTest, Loop_EmptyBody) {
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(b.Loop());
     sb.Return(f);
 
@@ -802,7 +802,7 @@
 
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(v);
     sb.Return(f);
 
@@ -829,7 +829,7 @@
 TEST_F(IR_ValidatorTest, Var_Init_WrongType) {
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     auto* v = sb.Var(ty.ptr<function, f32>());
     sb.Return(f);
 
@@ -861,7 +861,7 @@
 
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(v);
     sb.Return(f);
 
@@ -890,7 +890,7 @@
 
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(v);
     sb.Return(f);
 
@@ -919,7 +919,7 @@
 
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(v);
     sb.Return(f);
 
@@ -946,7 +946,7 @@
 TEST_F(IR_ValidatorTest, Instruction_AppendedDead) {
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     auto* v = sb.Var(ty.ptr<function, f32>());
     auto* ret = sb.Return(f);
 
@@ -984,7 +984,7 @@
 TEST_F(IR_ValidatorTest, Instruction_NullSource) {
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     auto* v = sb.Var(ty.ptr<function, f32>());
     sb.Return(f);
 
@@ -1013,7 +1013,7 @@
 TEST_F(IR_ValidatorTest, Instruction_DeadOperand) {
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     auto* v = sb.Var(ty.ptr<function, f32>());
     sb.Return(f);
 
@@ -1044,7 +1044,7 @@
 TEST_F(IR_ValidatorTest, Instruction_OperandUsageRemoved) {
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     auto* v = sb.Var(ty.ptr<function, f32>());
     sb.Return(f);
 
@@ -1075,7 +1075,7 @@
 TEST_F(IR_ValidatorTest, Binary_LHS_Nullptr) {
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Add(ty.i32(), nullptr, sb.Constant(2_i));
     sb.Return(f);
 
@@ -1102,7 +1102,7 @@
 TEST_F(IR_ValidatorTest, Binary_RHS_Nullptr) {
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Add(ty.i32(), sb.Constant(2_i), nullptr);
     sb.Return(f);
 
@@ -1132,7 +1132,7 @@
 
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(bin);
     sb.Return(f);
 
@@ -1159,7 +1159,7 @@
 TEST_F(IR_ValidatorTest, Unary_Value_Nullptr) {
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Negation(ty.i32(), nullptr);
     sb.Return(f);
 
@@ -1189,7 +1189,7 @@
 
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(bin);
     sb.Return(f);
 
@@ -1218,7 +1218,7 @@
 
     auto* f = b.Function("my_func", ty.void_());
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(bin);
     sb.Return(f);
 
@@ -1247,7 +1247,7 @@
     if_->True()->Append(b.ExitIf(if_));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(if_);
     sb.Return(f);
 
@@ -1260,7 +1260,7 @@
     if_->True()->Append(mod.instructions.Create<ExitIf>(nullptr));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(if_);
     sb.Return(f);
 
@@ -1297,7 +1297,7 @@
     if_->SetResults(utils::Vector{r1, r2});
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(if_);
     sb.Return(f);
 
@@ -1341,7 +1341,7 @@
     if_->SetResults(utils::Vector{r1, r2});
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(if_);
     sb.Return(f);
 
@@ -1385,7 +1385,7 @@
     if_->SetResults(utils::Vector{r1, r2});
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(if_);
     sb.Return(f);
 
@@ -1402,7 +1402,7 @@
     if_->SetResults(utils::Vector{r1, r2});
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(if_);
     sb.Return(f);
 
@@ -1443,7 +1443,7 @@
     auto* if_ = b.If(true);
     if_->True()->Append(b.Return(f));
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(if_);
     sb.ExitIf(if_);
 
@@ -1478,14 +1478,14 @@
     auto* if_inner = b.If(true);
 
     auto* if_outer = b.If(true);
-    b.With(if_outer->True(), [&] {
+    b.Append(if_outer->True(), [&] {
         b.Append(if_inner);
         b.ExitIf(if_outer);
     });
 
-    b.With(if_inner->True(), [&] { b.ExitIf(if_outer); });
+    b.Append(if_inner->True(), [&] { b.ExitIf(if_outer); });
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(if_outer);
         b.Return(f);
     });
@@ -1530,15 +1530,15 @@
     auto* switch_inner = b.Switch(1_i);
 
     auto* if_outer = b.If(true);
-    b.With(if_outer->True(), [&] {
+    b.Append(if_outer->True(), [&] {
         b.Append(switch_inner);
         b.ExitIf(if_outer);
     });
 
     auto* c = b.Case(switch_inner, {Switch::CaseSelector{b.Constant(1_i)}});
-    b.With(c, [&] { b.ExitIf(if_outer); });
+    b.Append(c, [&] { b.ExitIf(if_outer); });
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(if_outer);
         b.Return(f);
     });
@@ -1583,14 +1583,14 @@
     auto* loop = b.Loop();
 
     auto* if_outer = b.If(true);
-    b.With(if_outer->True(), [&] {
+    b.Append(if_outer->True(), [&] {
         b.Append(loop);
         b.ExitIf(if_outer);
     });
 
-    b.With(loop->Body(), [&] { b.ExitIf(if_outer); });
+    b.Append(loop->Body(), [&] { b.ExitIf(if_outer); });
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(if_outer);
         b.Return(f);
     });
@@ -1636,7 +1636,7 @@
     def->Append(b.ExitSwitch(switch_));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(switch_);
     sb.Return(f);
 
@@ -1651,7 +1651,7 @@
     def->Append(mod.instructions.Create<ExitSwitch>(nullptr));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(switch_);
     sb.Return(f);
 
@@ -1690,7 +1690,7 @@
     def->Append(b.ExitSwitch(switch_, 1_i));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(switch_);
     sb.Return(f);
 
@@ -1734,7 +1734,7 @@
     def->Append(b.ExitSwitch(switch_, 1_i, 2_f, 3_i));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(switch_);
     sb.Return(f);
 
@@ -1778,7 +1778,7 @@
     def->Append(b.ExitSwitch(switch_, 1_i, 2_f));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(switch_);
     sb.Return(f);
 
@@ -1796,7 +1796,7 @@
     def->Append(b.ExitSwitch(switch_, 1_i, 2_i));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(switch_);
     sb.Return(f);
 
@@ -1838,11 +1838,11 @@
     auto* def = b.Case(switch_, {Switch::CaseSelector{}});
     def->Append(b.Return(f));
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(switch_);
 
     auto* if_ = sb.Append(b.If(true));
-    b.With(if_->True(), [&] { b.ExitSwitch(switch_); });
+    b.Append(if_->True(), [&] { b.ExitSwitch(switch_); });
     sb.Append(b.Return(f));
 
     auto res = ir::Validate(mod);
@@ -1890,17 +1890,17 @@
     auto* f = b.Function("my_func", ty.void_());
 
     auto* def = b.Case(switch_, {Switch::CaseSelector{}});
-    b.With(def, [&] {
+    b.Append(def, [&] {
         auto* if_ = b.If(true);
-        b.With(if_->True(), [&] {
+        b.Append(if_->True(), [&] {
             auto* inner_if_ = b.If(false);
-            b.With(inner_if_->True(), [&] { b.ExitSwitch(switch_); });
+            b.Append(inner_if_->True(), [&] { b.ExitSwitch(switch_); });
             b.Return(f);
         });
         b.ExitSwitch(switch_);
     });
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(switch_);
     sb.Return(f);
 
@@ -1912,17 +1912,17 @@
     auto* switch_ = b.Switch(true);
 
     auto* def = b.Case(switch_, {Switch::CaseSelector{}});
-    b.With(def, [&] {
+    b.Append(def, [&] {
         auto* inner = b.Switch(false);
         b.ExitSwitch(switch_);
 
         auto* inner_def = b.Case(inner, {Switch::CaseSelector{}});
-        b.With(inner_def, [&] { b.ExitSwitch(switch_); });
+        b.Append(inner_def, [&] { b.ExitSwitch(switch_); });
     });
 
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(switch_);
         b.Return(f);
     });
@@ -1965,15 +1965,15 @@
     auto* switch_ = b.Switch(true);
 
     auto* def = b.Case(switch_, {Switch::CaseSelector{}});
-    b.With(def, [&] {
+    b.Append(def, [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] { b.ExitSwitch(switch_); });
+        b.Append(loop->Body(), [&] { b.ExitSwitch(switch_); });
         b.ExitSwitch(switch_);
     });
 
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(switch_);
         b.Return(f);
     });
@@ -2018,7 +2018,7 @@
     loop->Body()->Append(b.ExitLoop(loop));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(loop);
     sb.Return(f);
 
@@ -2032,7 +2032,7 @@
     loop->Body()->Append(mod.instructions.Create<ExitLoop>(nullptr));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(loop);
     sb.Return(f);
 
@@ -2073,7 +2073,7 @@
     loop->Body()->Append(b.ExitLoop(loop, 1_i));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(loop);
     sb.Return(f);
 
@@ -2120,7 +2120,7 @@
     loop->Body()->Append(b.ExitLoop(loop, 1_i, 2_f, 3_i));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(loop);
     sb.Return(f);
 
@@ -2167,7 +2167,7 @@
     loop->Body()->Append(b.ExitLoop(loop, 1_i, 2_f));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(loop);
     sb.Return(f);
 
@@ -2185,7 +2185,7 @@
     loop->Body()->Append(b.ExitLoop(loop, 1_i, 2_i));
 
     auto* f = b.Function("my_func", ty.void_());
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(loop);
     sb.Return(f);
 
@@ -2229,11 +2229,11 @@
     loop->Continuing()->Append(b.NextIteration(loop));
     loop->Body()->Append(b.Return(f));
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(loop);
 
     auto* if_ = sb.Append(b.If(true));
-    b.With(if_->True(), [&] { b.ExitLoop(loop); });
+    b.Append(if_->True(), [&] { b.ExitLoop(loop); });
     sb.Append(b.Return(f));
 
     auto res = ir::Validate(mod);
@@ -2283,17 +2283,17 @@
 
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(loop->Body(), [&] {
+    b.Append(loop->Body(), [&] {
         auto* if_ = b.If(true);
-        b.With(if_->True(), [&] {
+        b.Append(if_->True(), [&] {
             auto* inner_if_ = b.If(false);
-            b.With(inner_if_->True(), [&] { b.ExitLoop(loop); });
+            b.Append(inner_if_->True(), [&] { b.ExitLoop(loop); });
             b.Return(f);
         });
         b.ExitLoop(loop);
     });
 
-    auto sb = b.With(f->Block());
+    auto sb = b.Append(f->Block());
     sb.Append(loop);
     sb.Return(f);
 
@@ -2305,17 +2305,17 @@
     auto* loop = b.Loop();
     loop->Continuing()->Append(b.NextIteration(loop));
 
-    b.With(loop->Body(), [&] {
+    b.Append(loop->Body(), [&] {
         auto* inner = b.Switch(false);
         b.ExitLoop(loop);
 
         auto* inner_def = b.Case(inner, {Switch::CaseSelector{}});
-        b.With(inner_def, [&] { b.ExitLoop(loop); });
+        b.Append(inner_def, [&] { b.ExitLoop(loop); });
     });
 
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(loop);
         b.Return(f);
     });
@@ -2362,15 +2362,15 @@
 
     outer_loop->Continuing()->Append(b.NextIteration(outer_loop));
 
-    b.With(outer_loop->Body(), [&] {
+    b.Append(outer_loop->Body(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] { b.ExitLoop(outer_loop); });
+        b.Append(loop->Body(), [&] { b.ExitLoop(outer_loop); });
         b.ExitLoop(outer_loop);
     });
 
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(outer_loop);
         b.Return(f);
     });
@@ -2420,7 +2420,7 @@
 
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(loop);
         b.Return(f);
     });
@@ -2456,17 +2456,17 @@
 TEST_F(IR_ValidatorTest, ExitLoop_InvalidInsideContinuingNested) {
     auto* loop = b.Loop();
 
-    b.With(loop->Continuing(), [&]() {
+    b.Append(loop->Continuing(), [&]() {
         auto* if_ = b.If(true);
-        b.With(if_->True(), [&]() { b.ExitLoop(loop); });
+        b.Append(if_->True(), [&]() { b.ExitLoop(loop); });
         b.NextIteration(loop);
     });
 
-    b.With(loop->Body(), [&] { b.Continue(loop); });
+    b.Append(loop->Body(), [&] { b.Continue(loop); });
 
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(loop);
         b.Return(f);
     });
@@ -2514,11 +2514,11 @@
     loop->Initializer()->Append(b.ExitLoop(loop));
     loop->Continuing()->Append(b.NextIteration(loop));
 
-    b.With(loop->Body(), [&] { b.Continue(loop); });
+    b.Append(loop->Body(), [&] { b.Continue(loop); });
 
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(loop);
         b.Return(f);
     });
@@ -2557,18 +2557,18 @@
 TEST_F(IR_ValidatorTest, ExitLoop_InvalidInsideInitializerNested) {
     auto* loop = b.Loop();
 
-    b.With(loop->Initializer(), [&]() {
+    b.Append(loop->Initializer(), [&]() {
         auto* if_ = b.If(true);
-        b.With(if_->True(), [&]() { b.ExitLoop(loop); });
+        b.Append(if_->True(), [&]() { b.ExitLoop(loop); });
         b.NextIteration(loop);
     });
     loop->Continuing()->Append(b.NextIteration(loop));
 
-    b.With(loop->Body(), [&] { b.Continue(loop); });
+    b.Append(loop->Body(), [&] { b.Continue(loop); });
 
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(loop);
         b.Return(f);
     });
@@ -2615,7 +2615,7 @@
 
 TEST_F(IR_ValidatorTest, Return) {
     auto* f = b.Function("my_func", ty.void_());
-    b.With(f->Block(), [&] {  //
+    b.Append(f->Block(), [&] {  //
         b.Return(f);
     });
 
@@ -2625,7 +2625,7 @@
 
 TEST_F(IR_ValidatorTest, Return_WithValue) {
     auto* f = b.Function("my_func", ty.i32());
-    b.With(f->Block(), [&] {  //
+    b.Append(f->Block(), [&] {  //
         b.Return(f, 42_i);
     });
 
@@ -2635,7 +2635,7 @@
 
 TEST_F(IR_ValidatorTest, Return_NullFunction) {
     auto* f = b.Function("my_func", ty.void_());
-    b.With(f->Block(), [&] {  //
+    b.Append(f->Block(), [&] {  //
         b.Return(nullptr);
     });
 
@@ -2660,7 +2660,7 @@
 
 TEST_F(IR_ValidatorTest, Return_UnexpectedValue) {
     auto* f = b.Function("my_func", ty.void_());
-    b.With(f->Block(), [&] {  //
+    b.Append(f->Block(), [&] {  //
         b.Return(f, 42_i);
     });
 
@@ -2685,7 +2685,7 @@
 
 TEST_F(IR_ValidatorTest, Return_MissingValue) {
     auto* f = b.Function("my_func", ty.i32());
-    b.With(f->Block(), [&] {  //
+    b.Append(f->Block(), [&] {  //
         b.Return(f);
     });
 
@@ -2710,7 +2710,7 @@
 
 TEST_F(IR_ValidatorTest, Return_WrongValueType) {
     auto* f = b.Function("my_func", ty.i32());
-    b.With(f->Block(), [&] {  //
+    b.Append(f->Block(), [&] {  //
         b.Return(f, 42_f);
     });
 
@@ -2737,7 +2737,7 @@
 TEST_F(IR_ValidatorTest, LoadVectorElement_NullResult) {
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, vec3<f32>>());
         b.Append(mod.instructions.Create<ir::LoadVectorElement>(nullptr, var->Result(),
                                                                 b.Constant(1_i)));
@@ -2769,7 +2769,7 @@
 TEST_F(IR_ValidatorTest, LoadVectorElement_NullFrom) {
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(mod.instructions.Create<ir::LoadVectorElement>(b.InstructionResult(ty.f32()),
                                                                 nullptr, b.Constant(1_i)));
         b.Return(f);
@@ -2798,7 +2798,7 @@
 TEST_F(IR_ValidatorTest, LoadVectorElement_NullIndex) {
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, vec3<f32>>());
         b.Append(mod.instructions.Create<ir::LoadVectorElement>(b.InstructionResult(ty.f32()),
                                                                 var->Result(), nullptr));
@@ -2829,7 +2829,7 @@
 TEST_F(IR_ValidatorTest, StoreVectorElement_NullTo) {
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         b.Append(mod.instructions.Create<ir::StoreVectorElement>(nullptr, b.Constant(1_i),
                                                                  b.Constant(2_i)));
         b.Return(f);
@@ -2858,7 +2858,7 @@
 TEST_F(IR_ValidatorTest, StoreVectorElement_NullIndex) {
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, vec3<f32>>());
         b.Append(mod.instructions.Create<ir::StoreVectorElement>(var->Result(), nullptr,
                                                                  b.Constant(2_i)));
@@ -2897,7 +2897,7 @@
 TEST_F(IR_ValidatorTest, StoreVectorElement_NullValue) {
     auto* f = b.Function("my_func", ty.void_());
 
-    b.With(f->Block(), [&] {
+    b.Append(f->Block(), [&] {
         auto* var = b.Var(ty.ptr<function, vec3<f32>>());
         b.Append(mod.instructions.Create<ir::StoreVectorElement>(var->Result(), b.Constant(1_i),
                                                                  nullptr));
diff --git a/src/tint/lang/spirv/writer/access_test.cc b/src/tint/lang/spirv/writer/access_test.cc
index 8ae088f..1061393 100644
--- a/src/tint/lang/spirv/writer/access_test.cc
+++ b/src/tint/lang/spirv/writer/access_test.cc
@@ -24,7 +24,7 @@
     auto* arr_val = b.FunctionParam("arr", ty.array(ty.i32(), 4));
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({arr_val});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Access(ty.i32(), arr_val, 1_u);
         b.Return(func);
         mod.SetName(result, "result");
@@ -36,7 +36,7 @@
 
 TEST_F(SpirvWriterTest, Access_Array_Pointer_ConstantIndex) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* arr_var = b.Var("arr", ty.ptr<function, array<i32, 4>>());
         auto* result = b.Access(ty.ptr<function, i32>(), arr_var, 1_u);
         b.Return(func);
@@ -51,7 +51,7 @@
     auto* idx = b.FunctionParam("idx", ty.i32());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({idx});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* arr_var = b.Var("arr", ty.ptr<function, array<i32, 4>>());
         auto* result = b.Access(ty.ptr<function, i32>(), arr_var, idx);
         b.Return(func);
@@ -66,7 +66,7 @@
     auto* mat_val = b.FunctionParam("mat", ty.mat2x2(ty.f32()));
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({mat_val});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result_vector = b.Access(ty.vec2(ty.f32()), mat_val, 1_u);
         auto* result_scalar = b.Access(ty.f32(), mat_val, 1_u, 0_u);
         b.Return(func);
@@ -81,7 +81,7 @@
 
 TEST_F(SpirvWriterTest, Access_Matrix_Pointer_ConstantIndex) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* mat_var = b.Var("mat", ty.ptr<function, mat2x2<f32>>());
         auto* result_vector = b.Access(ty.ptr<function, vec2<f32>>(), mat_var, 1_u);
         auto* result_scalar = b.LoadVectorElement(result_vector, 0_u);
@@ -100,7 +100,7 @@
     auto* idx = b.FunctionParam("idx", ty.i32());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({idx});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* mat_var = b.Var("mat", ty.ptr<function, mat2x2<f32>>());
         auto* result_vector = b.Access(ty.ptr<function, vec2<f32>>(), mat_var, idx);
         auto* result_scalar = b.LoadVectorElement(result_vector, idx);
@@ -119,7 +119,7 @@
     auto* vec_val = b.FunctionParam("vec", ty.vec4(ty.i32()));
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({vec_val});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Access(ty.i32(), vec_val, 1_u);
         b.Return(func);
         mod.SetName(result, "result");
@@ -134,7 +134,7 @@
     auto* idx = b.FunctionParam("idx", ty.i32());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({vec_val, idx});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Access(ty.i32(), vec_val, idx);
         b.Return(func);
         mod.SetName(result, "result");
@@ -149,7 +149,7 @@
     auto* idx = b.FunctionParam("idx", ty.i32());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({val, idx});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Access(ty.i32(), val, 1_u, 2_u, idx);
         b.Return(func);
         mod.SetName(result, "result");
@@ -169,7 +169,7 @@
     auto* str_val = b.FunctionParam("str", str);
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({str_val});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result_a = b.Access(ty.f32(), str_val, 0_u);
         auto* result_b = b.Access(ty.i32(), str_val, 1_u, 2_u);
         b.Return(func);
@@ -189,7 +189,7 @@
                                                    {mod.symbols.Register("b"), ty.vec4<i32>()},
                                                });
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* str_var = b.Var("str", ty.ptr(function, str, read_write));
         auto* result_a = b.Access(ty.ptr<function, f32>(), str_var, 0_u);
         auto* result_b = b.Access(ty.ptr<function, vec4<i32>>(), str_var, 1_u);
@@ -205,7 +205,7 @@
 
 TEST_F(SpirvWriterTest, LoadVectorElement_ConstantIndex) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* vec_var = b.Var("vec", ty.ptr<function, vec4<i32>>());
         auto* result = b.LoadVectorElement(vec_var, 1_u);
         b.Return(func);
@@ -221,7 +221,7 @@
     auto* idx = b.FunctionParam("idx", ty.i32());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({idx});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* vec_var = b.Var("vec", ty.ptr<function, vec4<i32>>());
         auto* result = b.LoadVectorElement(vec_var, idx);
         b.Return(func);
@@ -235,7 +235,7 @@
 
 TEST_F(SpirvWriterTest, StoreVectorElement_ConstantIndex) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* vec_var = b.Var("vec", ty.ptr<function, vec4<i32>>());
         b.StoreVectorElement(vec_var, 1_u, b.Constant(42_i));
         b.Return(func);
@@ -250,7 +250,7 @@
     auto* idx = b.FunctionParam("idx", ty.i32());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({idx});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* vec_var = b.Var("vec", ty.ptr<function, vec4<i32>>());
         b.StoreVectorElement(vec_var, idx, b.Constant(42_i));
         b.Return(func);
diff --git a/src/tint/lang/spirv/writer/atomic_builtin_test.cc b/src/tint/lang/spirv/writer/atomic_builtin_test.cc
index 7667513..da248ce 100644
--- a/src/tint/lang/spirv/writer/atomic_builtin_test.cc
+++ b/src/tint/lang/spirv/writer/atomic_builtin_test.cc
@@ -32,7 +32,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ptr = b.Let("ptr", var);
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicAdd, ptr, arg1);
         b.Return(func, result);
@@ -50,7 +50,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicAdd, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -67,7 +67,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicAnd, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -85,7 +85,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({cmp, val});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result_ty = type::CreateAtomicCompareExchangeResult(ty, mod.symbols, ty.i32());
         auto* result =
             b.Call(result_ty, builtin::Function::kAtomicCompareExchangeWeak, var, cmp, val);
@@ -109,7 +109,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicExchange, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -124,7 +124,7 @@
 
     auto* func = b.Function("foo", ty.i32());
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicLoad, var);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -141,7 +141,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicMax, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -158,7 +158,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kAtomicMax, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -175,7 +175,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicMin, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -192,7 +192,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kAtomicMin, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -209,7 +209,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicOr, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -226,7 +226,7 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(ty.void_(), builtin::Function::kAtomicStore, var, arg1);
         b.Return(func);
     });
@@ -242,7 +242,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicSub, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -259,7 +259,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kAtomicXor, var, arg1);
         b.Return(func, result);
         mod.SetName(result, "result");
diff --git a/src/tint/lang/spirv/writer/binary_test.cc b/src/tint/lang/spirv/writer/binary_test.cc
index 23cf93c..eb1ae08 100644
--- a/src/tint/lang/spirv/writer/binary_test.cc
+++ b/src/tint/lang/spirv/writer/binary_test.cc
@@ -38,7 +38,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* lhs = MakeScalarValue(params.type);
         auto* rhs = MakeScalarValue(params.type);
         auto* result = b.Binary(params.kind, MakeScalarType(params.type), lhs, rhs);
@@ -53,7 +53,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* lhs = MakeVectorValue(params.type);
         auto* rhs = MakeVectorValue(params.type);
         auto* result = b.Binary(params.kind, MakeVectorType(params.type), lhs, rhs);
@@ -119,7 +119,7 @@
     auto* vector = b.FunctionParam("vector", ty.vec4<f32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({scalar, vector});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec4<f32>(), scalar, vector);
         b.Return(func);
         mod.SetName(result, "result");
@@ -134,7 +134,7 @@
     auto* vector = b.FunctionParam("vector", ty.vec4<f32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({scalar, vector});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec4<f32>(), vector, scalar);
         b.Return(func);
         mod.SetName(result, "result");
@@ -149,7 +149,7 @@
     auto* matrix = b.FunctionParam("matrix", ty.mat3x4<f32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({scalar, matrix});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.mat3x4<f32>(), scalar, matrix);
         b.Return(func);
         mod.SetName(result, "result");
@@ -164,7 +164,7 @@
     auto* matrix = b.FunctionParam("matrix", ty.mat3x4<f32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({scalar, matrix});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.mat3x4<f32>(), matrix, scalar);
         b.Return(func);
         mod.SetName(result, "result");
@@ -179,7 +179,7 @@
     auto* matrix = b.FunctionParam("matrix", ty.mat3x4<f32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({vector, matrix});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec3<f32>(), vector, matrix);
         b.Return(func);
         mod.SetName(result, "result");
@@ -194,7 +194,7 @@
     auto* matrix = b.FunctionParam("matrix", ty.mat3x4<f32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({vector, matrix});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.vec4<f32>(), matrix, vector);
         b.Return(func);
         mod.SetName(result, "result");
@@ -209,7 +209,7 @@
     auto* mat2 = b.FunctionParam("mat2", ty.mat3x4<f32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({mat1, mat2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Multiply(ty.mat3x3<f32>(), mat1, mat2);
         b.Return(func);
         mod.SetName(result, "result");
@@ -224,7 +224,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* lhs = MakeScalarValue(params.type);
         auto* rhs = MakeScalarValue(params.type);
         auto* result = b.Binary(params.kind, ty.bool_(), lhs, rhs);
@@ -240,7 +240,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* lhs = MakeVectorValue(params.type);
         auto* rhs = MakeVectorValue(params.type);
         auto* result = b.Binary(params.kind, ty.vec2<bool>(), lhs, rhs);
@@ -301,7 +301,7 @@
 TEST_F(SpirvWriterTest, Binary_Chain) {
     auto* func = b.Function("foo", ty.void_());
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* sub = b.Subtract(ty.i32(), 1_i, 2_i);
         auto* add = b.Add(ty.i32(), sub, sub);
         b.Return(func);
diff --git a/src/tint/lang/spirv/writer/bitcast_test.cc b/src/tint/lang/spirv/writer/bitcast_test.cc
index 3b57441..5faaa0c 100644
--- a/src/tint/lang/spirv/writer/bitcast_test.cc
+++ b/src/tint/lang/spirv/writer/bitcast_test.cc
@@ -40,7 +40,7 @@
     auto& params = GetParam();
     auto* func = b.Function("foo", MakeScalarType(params.out));
     func->SetParams({b.FunctionParam("arg", MakeScalarType(params.in))});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Bitcast(MakeScalarType(params.out), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -57,7 +57,7 @@
     auto& params = GetParam();
     auto* func = b.Function("foo", MakeVectorType(params.out));
     func->SetParams({b.FunctionParam("arg", MakeVectorType(params.in))});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Bitcast(MakeVectorType(params.out), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -95,7 +95,7 @@
 TEST_F(SpirvWriterTest, Bitcast_u32_to_vec2h) {
     auto* func = b.Function("foo", ty.vec2<f16>());
     func->SetParams({b.FunctionParam("arg", ty.u32())});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Bitcast(ty.vec2<f16>(), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -108,7 +108,7 @@
 TEST_F(SpirvWriterTest, Bitcast_vec2i_to_vec4h) {
     auto* func = b.Function("foo", ty.vec4<f16>());
     func->SetParams({b.FunctionParam("arg", ty.vec2<i32>())});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Bitcast(ty.vec4<f16>(), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -121,7 +121,7 @@
 TEST_F(SpirvWriterTest, Bitcast_vec2h_to_u32) {
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({b.FunctionParam("arg", ty.vec2<f16>())});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Bitcast(ty.u32(), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -134,7 +134,7 @@
 TEST_F(SpirvWriterTest, Bitcast_vec4h_to_vec2i) {
     auto* func = b.Function("foo", ty.vec2<i32>());
     func->SetParams({b.FunctionParam("arg", ty.vec4<f16>())});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Bitcast(ty.vec2<i32>(), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
diff --git a/src/tint/lang/spirv/writer/builtin_test.cc b/src/tint/lang/spirv/writer/builtin_test.cc
index 45bbca0..b922413 100644
--- a/src/tint/lang/spirv/writer/builtin_test.cc
+++ b/src/tint/lang/spirv/writer/builtin_test.cc
@@ -39,7 +39,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(MakeScalarType(params.type), params.function, MakeScalarValue(params.type));
         b.Return(func);
     });
@@ -51,7 +51,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(MakeVectorType(params.type), params.function, MakeVectorValue(params.type));
         b.Return(func);
     });
@@ -136,7 +136,7 @@
 // Test that abs of an unsigned value just folds away.
 TEST_F(SpirvWriterTest, Builtin_Abs_u32) {
     auto* func = b.Function("foo", MakeScalarType(kU32));
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* arg = MakeScalarValue(kU32);
         auto* result = b.Call(MakeScalarType(kU32), builtin::Function::kAbs, arg);
         b.Return(func, result);
@@ -154,7 +154,7 @@
 
 TEST_F(SpirvWriterTest, Builtin_Abs_vec2u) {
     auto* func = b.Function("foo", MakeVectorType(kU32));
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* arg = MakeVectorValue(kU32);
         auto* result = b.Call(MakeVectorType(kU32), builtin::Function::kAbs, arg);
         b.Return(func, result);
@@ -175,7 +175,7 @@
     auto* arg = b.FunctionParam("arg", ty.bool_());
     auto* func = b.Function("foo", ty.bool_());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.bool_(), builtin::Function::kAll, arg);
         b.Return(func, result);
     });
@@ -188,7 +188,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec4<bool>());
     auto* func = b.Function("foo", ty.bool_());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.bool_(), builtin::Function::kAll, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -203,7 +203,7 @@
     auto* arg = b.FunctionParam("arg", ty.bool_());
     auto* func = b.Function("foo", ty.bool_());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.bool_(), builtin::Function::kAny, arg);
         b.Return(func, result);
     });
@@ -216,7 +216,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec4<bool>());
     auto* func = b.Function("foo", ty.bool_());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.bool_(), builtin::Function::kAny, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -230,7 +230,7 @@
     auto* arg = b.FunctionParam("arg", ty.mat4x4<f32>());
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.f32(), builtin::Function::kDeterminant, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -244,7 +244,7 @@
     auto* arg = b.FunctionParam("arg", ty.mat3x3<f16>());
     auto* func = b.Function("foo", ty.f16());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.f16(), builtin::Function::kDeterminant, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -259,7 +259,7 @@
     auto* arg = b.FunctionParam("arg", ty.f32());
     auto* func = b.Function("foo", str);
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(str, builtin::Function::kFrexp, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -274,7 +274,7 @@
     auto* arg = b.FunctionParam("arg", ty.f16());
     auto* func = b.Function("foo", str);
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(str, builtin::Function::kFrexp, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -289,7 +289,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec2<f32>());
     auto* func = b.Function("foo", str);
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(str, builtin::Function::kFrexp, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -304,7 +304,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec3<f16>());
     auto* func = b.Function("foo", str);
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(str, builtin::Function::kFrexp, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -318,7 +318,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec4<f32>());
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.f32(), builtin::Function::kLength, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -333,7 +333,7 @@
     auto* arg = b.FunctionParam("arg", ty.f32());
     auto* func = b.Function("foo", str);
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(str, builtin::Function::kModf, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -348,7 +348,7 @@
     auto* arg = b.FunctionParam("arg", ty.f16());
     auto* func = b.Function("foo", str);
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(str, builtin::Function::kModf, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -363,7 +363,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec2<f32>());
     auto* func = b.Function("foo", str);
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(str, builtin::Function::kModf, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -378,7 +378,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec3<f16>());
     auto* func = b.Function("foo", str);
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(str, builtin::Function::kModf, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -392,7 +392,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec4<f32>());
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kNormalize, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -406,7 +406,7 @@
     auto* arg = b.FunctionParam("arg", ty.mat2x3<f32>());
     auto* func = b.Function("foo", ty.mat3x2<f32>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.mat3x2<f32>(), builtin::Function::kTranspose, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -420,7 +420,7 @@
     auto* arg = b.FunctionParam("arg", ty.mat4x4<f32>());
     auto* func = b.Function("foo", ty.mat4x4<f32>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.mat4x4<f32>(), builtin::Function::kTranspose, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -434,7 +434,7 @@
     auto* arg = b.FunctionParam("arg", ty.mat4x3<f16>());
     auto* func = b.Function("foo", ty.mat3x4<f16>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.mat3x4<f16>(), builtin::Function::kTranspose, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -448,7 +448,7 @@
     auto* arg = b.FunctionParam("arg", ty.mat2x2<f16>());
     auto* func = b.Function("foo", ty.mat2x2<f16>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.mat2x2<f16>(), builtin::Function::kTranspose, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -462,7 +462,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec2<f32>());
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kPack2X16Float, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -476,7 +476,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec2<f32>());
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kPack2X16Snorm, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -490,7 +490,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec2<f32>());
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kPack2X16Unorm, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -504,7 +504,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec4<f32>());
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kPack4X8Snorm, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -518,7 +518,7 @@
     auto* arg = b.FunctionParam("arg", ty.vec4<f32>());
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kPack4X8Unorm, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -532,7 +532,7 @@
     auto* arg = b.FunctionParam("arg", ty.u32());
     auto* func = b.Function("foo", ty.vec2<f32>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec2<f32>(), builtin::Function::kUnpack2X16Float, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -546,7 +546,7 @@
     auto* arg = b.FunctionParam("arg", ty.u32());
     auto* func = b.Function("foo", ty.vec2<f32>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec2<f32>(), builtin::Function::kUnpack2X16Snorm, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -560,7 +560,7 @@
     auto* arg = b.FunctionParam("arg", ty.u32());
     auto* func = b.Function("foo", ty.vec2<f32>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec2<f32>(), builtin::Function::kUnpack2X16Unorm, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -574,7 +574,7 @@
     auto* arg = b.FunctionParam("arg", ty.u32());
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kUnpack4X8Snorm, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -588,7 +588,7 @@
     auto* arg = b.FunctionParam("arg", ty.u32());
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kUnpack4X8Unorm, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -604,7 +604,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(MakeScalarType(params.type), params.function, MakeScalarValue(params.type),
                MakeScalarValue(params.type));
         b.Return(func);
@@ -617,7 +617,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(MakeVectorType(params.type), params.function, MakeVectorValue(params.type),
                MakeVectorValue(params.type));
         b.Return(func);
@@ -645,7 +645,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.vec3<f32>());
     auto* func = b.Function("foo", ty.vec3<f32>());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec3<f32>(), builtin::Function::kCross, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -660,7 +660,7 @@
     auto* arg2 = b.FunctionParam("arg2", MakeVectorType(kF32));
     auto* func = b.Function("foo", MakeScalarType(kF32));
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(MakeScalarType(kF32), builtin::Function::kDistance, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -675,7 +675,7 @@
     auto* arg2 = b.FunctionParam("arg2", MakeVectorType(kF16));
     auto* func = b.Function("foo", MakeScalarType(kF16));
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(MakeScalarType(kF16), builtin::Function::kDistance, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -690,7 +690,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.vec4<f32>());
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.f32(), builtin::Function::kDot, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -705,7 +705,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.vec2<i32>());
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kDot, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -728,7 +728,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.vec4<u32>());
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kDot, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -759,7 +759,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.i32());
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.f32(), builtin::Function::kLdexp, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -774,7 +774,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.i32());
     auto* func = b.Function("foo", ty.f16());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.f16(), builtin::Function::kLdexp, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -789,7 +789,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.vec2<i32>());
     auto* func = b.Function("foo", ty.vec2<f32>());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec2<f32>(), builtin::Function::kLdexp, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -804,7 +804,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.vec3<i32>());
     auto* func = b.Function("foo", ty.vec3<f16>());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec3<f16>(), builtin::Function::kLdexp, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -819,7 +819,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.vec3<f32>());
     auto* func = b.Function("foo", ty.vec3<f32>());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec3<f32>(), builtin::Function::kReflect, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -834,7 +834,7 @@
     auto* arg2 = b.FunctionParam("arg2", ty.vec4<f16>());
     auto* func = b.Function("foo", ty.vec4<f16>());
     func->SetParams({arg1, arg2});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f16>(), builtin::Function::kReflect, arg1, arg2);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -850,7 +850,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(MakeScalarType(params.type), params.function, MakeScalarValue(params.type),
                MakeScalarValue(params.type), MakeScalarValue(params.type));
         b.Return(func);
@@ -863,7 +863,7 @@
     auto params = GetParam();
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(MakeVectorType(params.type), params.function, MakeVectorValue(params.type),
                MakeVectorValue(params.type), MakeVectorValue(params.type));
         b.Return(func);
@@ -892,7 +892,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg, offset, count});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kExtractBits, arg, offset, count);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -909,7 +909,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg, offset, count});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.u32(), builtin::Function::kExtractBits, arg, offset, count);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -926,7 +926,7 @@
     auto* func = b.Function("foo", ty.vec4<i32>());
     func->SetParams({arg, offset, count});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<i32>(), builtin::Function::kExtractBits, arg, offset, count);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -943,7 +943,7 @@
     auto* func = b.Function("foo", ty.vec2<u32>());
     func->SetParams({arg, offset, count});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec2<u32>(), builtin::Function::kExtractBits, arg, offset, count);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -961,7 +961,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({arg, newbits, offset, count});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.i32(), builtin::Function::kInsertBits, arg, newbits, offset, count);
         b.Return(func, result);
@@ -980,7 +980,7 @@
     auto* func = b.Function("foo", ty.u32());
     func->SetParams({arg, newbits, offset, count});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.u32(), builtin::Function::kInsertBits, arg, newbits, offset, count);
         b.Return(func, result);
@@ -999,7 +999,7 @@
     auto* func = b.Function("foo", ty.vec4<i32>());
     func->SetParams({arg, newbits, offset, count});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec4<i32>(), builtin::Function::kInsertBits, arg, newbits, offset, count);
         b.Return(func, result);
@@ -1018,7 +1018,7 @@
     auto* func = b.Function("foo", ty.vec2<u32>());
     func->SetParams({arg, newbits, offset, count});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result =
             b.Call(ty.vec2<u32>(), builtin::Function::kInsertBits, arg, newbits, offset, count);
         b.Return(func, result);
@@ -1035,7 +1035,7 @@
     auto* arg3 = b.FunctionParam("arg3", ty.vec3<f32>());
     auto* func = b.Function("foo", ty.vec3<f32>());
     func->SetParams({arg1, arg2, arg3});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec3<f32>(), builtin::Function::kFaceForward, arg1, arg2, arg3);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -1051,7 +1051,7 @@
     auto* arg3 = b.FunctionParam("arg3", ty.vec4<f16>());
     auto* func = b.Function("foo", ty.vec4<f16>());
     func->SetParams({arg1, arg2, arg3});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f16>(), builtin::Function::kFaceForward, arg1, arg2, arg3);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -1068,7 +1068,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({arg1, arg2, factor});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kMix, arg1, arg2, factor);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -1086,7 +1086,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({arg1, arg2, factor});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kMix, arg1, arg2, factor);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -1103,7 +1103,7 @@
     auto* func = b.Function("foo", ty.vec4<f32>());
     func->SetParams({arg1, arg2, i});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f32>(), builtin::Function::kRefract, arg1, arg2, i);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -1120,7 +1120,7 @@
     auto* func = b.Function("foo", ty.vec4<f16>());
     func->SetParams({arg1, arg2, i});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<f16>(), builtin::Function::kRefract, arg1, arg2, i);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -1137,7 +1137,7 @@
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({argf, argt, cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.i32(), builtin::Function::kSelect, argf, argt, cond);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -1154,7 +1154,7 @@
     auto* func = b.Function("foo", ty.vec4<i32>());
     func->SetParams({argf, argt, cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<i32>(), builtin::Function::kSelect, argf, argt, cond);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -1171,7 +1171,7 @@
     auto* func = b.Function("foo", ty.vec4<i32>());
     func->SetParams({argf, argt, cond});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Call(ty.vec4<i32>(), builtin::Function::kSelect, argf, argt, cond);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -1184,7 +1184,7 @@
 
 TEST_F(SpirvWriterTest, Builtin_StorageBarrier) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(ty.void_(), builtin::Function::kStorageBarrier);
         b.Return(func);
     });
@@ -1195,7 +1195,7 @@
 
 TEST_F(SpirvWriterTest, Builtin_WorkgroupBarrier) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Call(ty.void_(), builtin::Function::kWorkgroupBarrier);
         b.Return(func);
     });
@@ -1210,7 +1210,7 @@
     b.RootBlock()->Append(var);
 
     auto* func = b.Function("foo", ty.u32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ptr = b.Let("ptr", var);
         auto* result = b.Call(ty.u32(), builtin::Function::kArrayLength, ptr);
         b.Return(func, result);
@@ -1234,7 +1234,7 @@
     b.RootBlock()->Append(var);
 
     auto* func = b.Function("foo", ty.u32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* ptr = b.Let("ptr", b.Access(ty.ptr(storage, arr), var, 2_u));
         auto* result = b.Call(ty.u32(), builtin::Function::kArrayLength, ptr);
         b.Return(func, result);
diff --git a/src/tint/lang/spirv/writer/construct_test.cc b/src/tint/lang/spirv/writer/construct_test.cc
index cf2decb..67be9a4 100644
--- a/src/tint/lang/spirv/writer/construct_test.cc
+++ b/src/tint/lang/spirv/writer/construct_test.cc
@@ -28,7 +28,7 @@
         b.FunctionParam("c", ty.i32()),
         b.FunctionParam("d", ty.i32()),
     });
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.vec4<i32>(), func->Params());
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -45,7 +45,7 @@
         b.FunctionParam("b", ty.vec4<f32>()),
         b.FunctionParam("c", ty.vec4<f32>()),
     });
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.mat3x4<f32>(), func->Params());
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -63,7 +63,7 @@
         b.FunctionParam("c", ty.f32()),
         b.FunctionParam("d", ty.f32()),
     });
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.array<f32, 4>(), func->Params());
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -86,7 +86,7 @@
         b.FunctionParam("b", ty.u32()),
         b.FunctionParam("c", ty.vec4<f32>()),
     });
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(str, func->Params());
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -99,7 +99,7 @@
 TEST_F(SpirvWriterTest, Construct_Scalar_Identity) {
     auto* func = b.Function("foo", ty.i32());
     func->SetParams({b.FunctionParam("arg", ty.i32())});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.i32(), func->Params()[0]);
         b.Return(func, result);
     });
@@ -111,7 +111,7 @@
 TEST_F(SpirvWriterTest, Construct_Vector_Identity) {
     auto* func = b.Function("foo", ty.vec4<i32>());
     func->SetParams({b.FunctionParam("arg", ty.vec4<i32>())});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Construct(ty.vec4<i32>(), func->Params()[0]);
         b.Return(func, result);
     });
diff --git a/src/tint/lang/spirv/writer/convert_test.cc b/src/tint/lang/spirv/writer/convert_test.cc
index 9a73271..318cc47 100644
--- a/src/tint/lang/spirv/writer/convert_test.cc
+++ b/src/tint/lang/spirv/writer/convert_test.cc
@@ -42,7 +42,7 @@
     auto& params = GetParam();
     auto* func = b.Function("foo", MakeScalarType(params.out));
     func->SetParams({b.FunctionParam("arg", MakeScalarType(params.in))});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Convert(MakeScalarType(params.out), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -55,7 +55,7 @@
     auto& params = GetParam();
     auto* func = b.Function("foo", MakeVectorType(params.out));
     func->SetParams({b.FunctionParam("arg", MakeVectorType(params.in))});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Convert(MakeVectorType(params.out), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -101,7 +101,7 @@
 TEST_F(SpirvWriterTest, Convert_Mat2x3_F16_to_F32) {
     auto* func = b.Function("foo", ty.mat2x3<f32>());
     func->SetParams({b.FunctionParam("arg", ty.mat2x3<f16>())});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Convert(ty.mat2x3<f32>(), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
@@ -120,7 +120,7 @@
 TEST_F(SpirvWriterTest, Convert_Mat4x2_F32_to_F16) {
     auto* func = b.Function("foo", ty.mat4x2<f16>());
     func->SetParams({b.FunctionParam("arg", ty.mat4x2<f32>())});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Convert(ty.mat4x2<f16>(), func->Params()[0]);
         b.Return(func, result);
         mod.SetName(result, "result");
diff --git a/src/tint/lang/spirv/writer/discard_test.cc b/src/tint/lang/spirv/writer/discard_test.cc
index af7446c..435c217 100644
--- a/src/tint/lang/spirv/writer/discard_test.cc
+++ b/src/tint/lang/spirv/writer/discard_test.cc
@@ -31,9 +31,9 @@
     ep->SetParams({front_facing});
     ep->SetReturnLocation(0_u, {});
 
-    b.With(ep->Block(), [&] {
+    b.Append(ep->Block(), [&] {
         auto* ifelse = b.If(front_facing);
-        b.With(ifelse->True(), [&] {  //
+        b.Append(ifelse->True(), [&] {  //
             b.Discard();
             b.ExitIf(ifelse);
         });
diff --git a/src/tint/lang/spirv/writer/function_test.cc b/src/tint/lang/spirv/writer/function_test.cc
index 54196dc..f3ef5b8 100644
--- a/src/tint/lang/spirv/writer/function_test.cc
+++ b/src/tint/lang/spirv/writer/function_test.cc
@@ -22,7 +22,7 @@
 
 TEST_F(SpirvWriterTest, Function_Empty) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {  //
+    b.Append(func->Block(), [&] {  //
         b.Return(func);
     });
 
@@ -38,15 +38,15 @@
 // Test that we do not emit the same function type more than once.
 TEST_F(SpirvWriterTest, Function_DeduplicateType) {
     auto* func_a = b.Function("func_a", ty.void_());
-    b.With(func_a->Block(), [&] {  //
+    b.Append(func_a->Block(), [&] {  //
         b.Return(func_a);
     });
     auto* func_b = b.Function("func_b", ty.void_());
-    b.With(func_b->Block(), [&] {  //
+    b.Append(func_b->Block(), [&] {  //
         b.Return(func_b);
     });
     auto* func_c = b.Function("func_c", ty.void_());
-    b.With(func_c->Block(), [&] {  //
+    b.Append(func_c->Block(), [&] {  //
         b.Return(func_c);
     });
 
@@ -79,7 +79,7 @@
 TEST_F(SpirvWriterTest, Function_EntryPoint_Compute) {
     auto* func =
         b.Function("main", ty.void_(), ir::Function::PipelineStage::kCompute, {{32, 4, 1}});
-    b.With(func->Block(), [&] {  //
+    b.Append(func->Block(), [&] {  //
         b.Return(func);
     });
 
@@ -105,7 +105,7 @@
 
 TEST_F(SpirvWriterTest, Function_EntryPoint_Fragment) {
     auto* func = b.Function("main", ty.void_(), ir::Function::PipelineStage::kFragment);
-    b.With(func->Block(), [&] {  //
+    b.Append(func->Block(), [&] {  //
         b.Return(func);
     });
 
@@ -131,7 +131,7 @@
 
 TEST_F(SpirvWriterTest, Function_EntryPoint_Vertex) {
     auto* func = b.Function("main", ty.void_(), ir::Function::PipelineStage::kVertex);
-    b.With(func->Block(), [&] {  //
+    b.Append(func->Block(), [&] {  //
         b.Return(func);
     });
 
@@ -156,17 +156,17 @@
 
 TEST_F(SpirvWriterTest, Function_EntryPoint_Multiple) {
     auto* f1 = b.Function("main1", ty.void_(), ir::Function::PipelineStage::kCompute, {{32, 4, 1}});
-    b.With(f1->Block(), [&] {  //
+    b.Append(f1->Block(), [&] {  //
         b.Return(f1);
     });
 
     auto* f2 = b.Function("main2", ty.void_(), ir::Function::PipelineStage::kCompute, {{8, 2, 16}});
-    b.With(f2->Block(), [&] {  //
+    b.Append(f2->Block(), [&] {  //
         b.Return(f2);
     });
 
     auto* f3 = b.Function("main3", ty.void_(), ir::Function::PipelineStage::kFragment);
-    b.With(f3->Block(), [&] {  //
+    b.Append(f3->Block(), [&] {  //
         b.Return(f3);
     });
 
@@ -210,7 +210,7 @@
 
 TEST_F(SpirvWriterTest, Function_ReturnValue) {
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {  //
+    b.Append(func->Block(), [&] {  //
         b.Return(func, 42_i);
     });
 
@@ -236,7 +236,7 @@
     auto* func = b.Function("foo", i32);
     func->SetParams({x, y});
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Add(i32, x, y);
         b.Return(func, result);
     });
@@ -265,13 +265,13 @@
     auto* foo = b.Function("foo", i32);
     foo->SetParams({x, y});
 
-    b.With(foo->Block(), [&] {
+    b.Append(foo->Block(), [&] {
         auto* result = b.Add(i32, x, y);
         b.Return(foo, result);
     });
 
     auto* bar = b.Function("bar", ty.void_());
-    b.With(bar->Block(), [&] {
+    b.Append(bar->Block(), [&] {
         auto* result = b.Call(i32, foo, 2_i, 3_i);
         b.Return(bar);
         mod.SetName(result, "result");
@@ -283,12 +283,12 @@
 
 TEST_F(SpirvWriterTest, Function_Call_Void) {
     auto* foo = b.Function("foo", ty.void_());
-    b.With(foo->Block(), [&] {  //
+    b.Append(foo->Block(), [&] {  //
         b.Return(foo);
     });
 
     auto* bar = b.Function("bar", ty.void_());
-    b.With(bar->Block(), [&] {
+    b.Append(bar->Block(), [&] {
         auto* result = b.Call(ty.void_(), foo);
         b.Return(bar);
         mod.SetName(result, "result");
diff --git a/src/tint/lang/spirv/writer/if_test.cc b/src/tint/lang/spirv/writer/if_test.cc
index 1a3c61c..2326d08 100644
--- a/src/tint/lang/spirv/writer/if_test.cc
+++ b/src/tint/lang/spirv/writer/if_test.cc
@@ -21,12 +21,12 @@
 
 TEST_F(SpirvWriterTest, If_TrueEmpty_FalseEmpty) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
-        b.With(i->True(), [&] {  //
+        b.Append(i->True(), [&] {  //
             b.ExitIf(i);
         });
-        b.With(i->False(), [&] {  //
+        b.Append(i->False(), [&] {  //
             b.ExitIf(i);
         });
         b.Return(func);
@@ -44,13 +44,13 @@
 
 TEST_F(SpirvWriterTest, If_FalseEmpty) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
-        b.With(i->True(), [&] {
+        b.Append(i->True(), [&] {
             b.Add(ty.i32(), 1_i, 1_i);
             b.ExitIf(i);
         });
-        b.With(i->False(), [&] {  //
+        b.Append(i->False(), [&] {  //
             b.ExitIf(i);
         });
         b.Return(func);
@@ -71,12 +71,12 @@
 
 TEST_F(SpirvWriterTest, If_TrueEmpty) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
-        b.With(i->True(), [&] {  //
+        b.Append(i->True(), [&] {  //
             b.ExitIf(i);
         });
-        b.With(i->False(), [&] {
+        b.Append(i->False(), [&] {
             b.Add(ty.i32(), 1_i, 1_i);
             b.ExitIf(i);
         });
@@ -98,12 +98,12 @@
 
 TEST_F(SpirvWriterTest, If_BothBranchesReturn) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
-        b.With(i->True(), [&] {  //
+        b.Append(i->True(), [&] {  //
             b.Return(func);
         });
-        b.With(i->False(), [&] {  //
+        b.Append(i->False(), [&] {  //
             b.Return(func);
         });
         b.Unreachable();
@@ -121,13 +121,13 @@
 
 TEST_F(SpirvWriterTest, If_Phi_SingleValue) {
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
         i->SetResults(b.InstructionResult(ty.i32()));
-        b.With(i->True(), [&] {  //
+        b.Append(i->True(), [&] {  //
             b.ExitIf(i, 10_i);
         });
-        b.With(i->False(), [&] {  //
+        b.Append(i->False(), [&] {  //
             b.ExitIf(i, 20_i);
         });
         b.Return(func, i);
@@ -150,13 +150,13 @@
 
 TEST_F(SpirvWriterTest, If_Phi_SingleValue_TrueReturn) {
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
         i->SetResults(b.InstructionResult(ty.i32()));
-        b.With(i->True(), [&] {  //
+        b.Append(i->True(), [&] {  //
             b.Return(func, 42_i);
         });
-        b.With(i->False(), [&] {  //
+        b.Append(i->False(), [&] {  //
             b.ExitIf(i, 20_i);
         });
         b.Return(func, i);
@@ -190,13 +190,13 @@
 
 TEST_F(SpirvWriterTest, If_Phi_SingleValue_FalseReturn) {
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
         i->SetResults(b.InstructionResult(ty.i32()));
-        b.With(i->True(), [&] {  //
+        b.Append(i->True(), [&] {  //
             b.ExitIf(i, 10_i);
         });
-        b.With(i->False(), [&] {  //
+        b.Append(i->False(), [&] {  //
             b.Return(func, 42_i);
         });
         b.Return(func, i);
@@ -230,13 +230,13 @@
 
 TEST_F(SpirvWriterTest, If_Phi_MultipleValue_0) {
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
         i->SetResults(b.InstructionResult(ty.i32()), b.InstructionResult(ty.bool_()));
-        b.With(i->True(), [&] {  //
+        b.Append(i->True(), [&] {  //
             b.ExitIf(i, 10_i, true);
         });
-        b.With(i->False(), [&] {  //
+        b.Append(i->False(), [&] {  //
             b.ExitIf(i, 20_i, false);
         });
         b.Return(func, i->Result(0));
@@ -260,13 +260,13 @@
 
 TEST_F(SpirvWriterTest, If_Phi_MultipleValue_1) {
     auto* func = b.Function("foo", ty.bool_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
         i->SetResults(b.InstructionResult(ty.i32()), b.InstructionResult(ty.bool_()));
-        b.With(i->True(), [&] {  //
+        b.Append(i->True(), [&] {  //
             b.ExitIf(i, 10_i, true);
         });
-        b.With(i->False(), [&] {  //
+        b.Append(i->False(), [&] {  //
             b.ExitIf(i, 20_i, false);
         });
         b.Return(func, i->Result(1));
diff --git a/src/tint/lang/spirv/writer/let_test.cc b/src/tint/lang/spirv/writer/let_test.cc
index 39b71f8..c6febf2 100644
--- a/src/tint/lang/spirv/writer/let_test.cc
+++ b/src/tint/lang/spirv/writer/let_test.cc
@@ -22,7 +22,7 @@
 
 TEST_F(SpirvWriterTest, Let_Constant) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Let("l", u32(42));
         b.Return(func);
     });
@@ -34,7 +34,7 @@
 
 TEST_F(SpirvWriterTest, Let_SharedConstant) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Let("l1", u32(42));
         b.Let("l2", u32(42));
         b.Return(func);
diff --git a/src/tint/lang/spirv/writer/loop_test.cc b/src/tint/lang/spirv/writer/loop_test.cc
index f43e871..79f423c 100644
--- a/src/tint/lang/spirv/writer/loop_test.cc
+++ b/src/tint/lang/spirv/writer/loop_test.cc
@@ -21,12 +21,12 @@
 
 TEST_F(SpirvWriterTest, Loop_BreakIf) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {  //
+        b.Append(loop->Body(), [&] {  //
             b.Continue(loop);
 
-            b.With(loop->Continuing(), [&] {  //
+            b.Append(loop->Continuing(), [&] {  //
                 b.BreakIf(loop, true);
             });
         });
@@ -53,9 +53,9 @@
 // Test that we still emit the continuing block with a back-edge, even when it is unreachable.
 TEST_F(SpirvWriterTest, Loop_UnconditionalBreakInBody) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {  //
+        b.Append(loop->Body(), [&] {  //
             b.ExitLoop(loop);
         });
         b.Return(func);
@@ -80,19 +80,19 @@
 
 TEST_F(SpirvWriterTest, Loop_ConditionalBreakInBody) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* cond_break = b.If(true);
-            b.With(cond_break->True(), [&] {  //
+            b.Append(cond_break->True(), [&] {  //
                 b.ExitLoop(loop);
             });
-            b.With(cond_break->False(), [&] {  //
+            b.Append(cond_break->False(), [&] {  //
                 b.ExitIf(cond_break);
             });
             b.Continue(loop);
 
-            b.With(loop->Continuing(), [&] {  //
+            b.Append(loop->Continuing(), [&] {  //
                 b.NextIteration(loop);
             });
         });
@@ -123,19 +123,19 @@
 
 TEST_F(SpirvWriterTest, Loop_ConditionalContinueInBody) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* cond_break = b.If(true);
-            b.With(cond_break->True(), [&] {  //
+            b.Append(cond_break->True(), [&] {  //
                 b.Continue(loop);
             });
-            b.With(cond_break->False(), [&] {  //
+            b.Append(cond_break->False(), [&] {  //
                 b.ExitIf(cond_break);
             });
             b.ExitLoop(loop);
 
-            b.With(loop->Continuing(), [&] {  //
+            b.Append(loop->Continuing(), [&] {  //
                 b.NextIteration(loop);
             });
         });
@@ -168,9 +168,9 @@
 // they are unreachable.
 TEST_F(SpirvWriterTest, Loop_UnconditionalReturnInBody) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {  //
+        b.Append(loop->Body(), [&] {  //
             b.Return(func);
         });
         b.Unreachable();
@@ -195,13 +195,13 @@
 
 TEST_F(SpirvWriterTest, Loop_UseResultFromBodyInContinuing) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* result = b.Equal(ty.bool_(), 1_i, 2_i);
             b.Continue(loop, result);
 
-            b.With(loop->Continuing(), [&] {  //
+            b.Append(loop->Continuing(), [&] {  //
                 b.BreakIf(loop, result);
             });
         });
@@ -228,23 +228,23 @@
 
 TEST_F(SpirvWriterTest, Loop_NestedLoopInBody) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* outer_loop = b.Loop();
-        b.With(outer_loop->Body(), [&] {
+        b.Append(outer_loop->Body(), [&] {
             auto* inner_loop = b.Loop();
-            b.With(inner_loop->Body(), [&] {
+            b.Append(inner_loop->Body(), [&] {
                 b.ExitLoop(inner_loop);
 
-                b.With(inner_loop->Continuing(), [&] {  //
+                b.Append(inner_loop->Continuing(), [&] {  //
                     b.NextIteration(inner_loop);
                 });
             });
             b.Continue(outer_loop);
 
-            b.With(outer_loop->Continuing(),
-                   [&] {  //
-                       b.BreakIf(outer_loop, true);
-                   });
+            b.Append(outer_loop->Continuing(),
+                     [&] {  //
+                         b.BreakIf(outer_loop, true);
+                     });
         });
         b.Return(func);
     });
@@ -277,17 +277,17 @@
 
 TEST_F(SpirvWriterTest, Loop_NestedLoopInContinuing) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* outer_loop = b.Loop();
-        b.With(outer_loop->Body(), [&] {
+        b.Append(outer_loop->Body(), [&] {
             b.Continue(outer_loop);
 
-            b.With(outer_loop->Continuing(), [&] {
+            b.Append(outer_loop->Continuing(), [&] {
                 auto* inner_loop = b.Loop();
-                b.With(inner_loop->Body(), [&] {
+                b.Append(inner_loop->Body(), [&] {
                     b.Continue(inner_loop);
 
-                    b.With(inner_loop->Continuing(), [&] {  //
+                    b.Append(inner_loop->Continuing(), [&] {  //
                         b.BreakIf(inner_loop, true);
                     });
                 });
@@ -326,24 +326,24 @@
 TEST_F(SpirvWriterTest, Loop_Phi_SingleValue) {
     auto* func = b.Function("foo", ty.void_());
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Initializer(), [&] {  //
+        b.Append(loop->Initializer(), [&] {  //
             b.NextIteration(loop, 1_i, false);
         });
 
         auto* loop_param = b.BlockParam(ty.i32());
         loop->Body()->SetParams({loop_param});
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* inc = b.Add(ty.i32(), loop_param, 1_i);
             b.Continue(loop, inc);
         });
 
         auto* cont_param = b.BlockParam(ty.i32());
         loop->Continuing()->SetParams({cont_param});
-        b.With(loop->Continuing(), [&] {
+        b.Append(loop->Continuing(), [&] {
             auto* cmp = b.GreaterThan(ty.bool_(), cont_param, 5_i);
             b.BreakIf(loop, cmp, cont_param);
         });
@@ -375,10 +375,10 @@
 TEST_F(SpirvWriterTest, Loop_Phi_MultipleValue) {
     auto* func = b.Function("foo", ty.void_());
 
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
 
-        b.With(loop->Initializer(), [&] {  //
+        b.Append(loop->Initializer(), [&] {  //
             b.NextIteration(loop, 1_i, false);
         });
 
@@ -386,7 +386,7 @@
         auto* loop_param_b = b.BlockParam(ty.bool_());
         loop->Body()->SetParams({loop_param_a, loop_param_b});
 
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* inc = b.Add(ty.i32(), loop_param_a, 1_i);
             b.Continue(loop, inc, loop_param_b);
         });
@@ -394,7 +394,7 @@
         auto* cont_param_a = b.BlockParam(ty.i32());
         auto* cont_param_b = b.BlockParam(ty.bool_());
         loop->Continuing()->SetParams({cont_param_a, cont_param_b});
-        b.With(loop->Continuing(), [&] {
+        b.Append(loop->Continuing(), [&] {
             auto* cmp = b.GreaterThan(ty.bool_(), cont_param_a, 5_i);
             auto* not_b = b.Not(ty.bool_(), cont_param_b);
             b.BreakIf(loop, cmp, cont_param_a, not_b);
diff --git a/src/tint/lang/spirv/writer/switch_test.cc b/src/tint/lang/spirv/writer/switch_test.cc
index eb7696c..532c6ff 100644
--- a/src/tint/lang/spirv/writer/switch_test.cc
+++ b/src/tint/lang/spirv/writer/switch_test.cc
@@ -21,11 +21,11 @@
 
 TEST_F(SpirvWriterTest, Switch_Basic) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* swtch = b.Switch(42_i);
 
         auto* def_case = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector()});
-        b.With(def_case, [&] {  //
+        b.Append(def_case, [&] {  //
             b.ExitSwitch(swtch);
         });
 
@@ -47,21 +47,21 @@
 
 TEST_F(SpirvWriterTest, Switch_MultipleCases) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* swtch = b.Switch(42_i);
 
         auto* case_a = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector{b.Constant(1_i)}});
-        b.With(case_a, [&] {  //
+        b.Append(case_a, [&] {  //
             b.ExitSwitch(swtch);
         });
 
         auto* case_b = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector{b.Constant(2_i)}});
-        b.With(case_b, [&] {  //
+        b.Append(case_b, [&] {  //
             b.ExitSwitch(swtch);
         });
 
         auto* def_case = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector()});
-        b.With(def_case, [&] {  //
+        b.Append(def_case, [&] {  //
             b.ExitSwitch(swtch);
         });
 
@@ -87,24 +87,24 @@
 
 TEST_F(SpirvWriterTest, Switch_MultipleSelectorsPerCase) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* swtch = b.Switch(42_i);
 
         auto* case_a = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector{b.Constant(1_i)},
                                                    ir::Switch::CaseSelector{b.Constant(3_i)}});
-        b.With(case_a, [&] {  //
+        b.Append(case_a, [&] {  //
             b.ExitSwitch(swtch);
         });
 
         auto* case_b = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector{b.Constant(2_i)},
                                                    ir::Switch::CaseSelector{b.Constant(4_i)}});
-        b.With(case_b, [&] {  //
+        b.Append(case_b, [&] {  //
             b.ExitSwitch(swtch);
         });
 
         auto* def_case = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector{b.Constant(5_i)},
                                                      ir::Switch::CaseSelector()});
-        b.With(def_case, [&] {  //
+        b.Append(def_case, [&] {  //
             b.ExitSwitch(swtch);
         });
 
@@ -130,21 +130,21 @@
 
 TEST_F(SpirvWriterTest, Switch_AllCasesReturn) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* swtch = b.Switch(42_i);
 
         auto* case_a = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector{b.Constant(1_i)}});
-        b.With(case_a, [&] {  //
+        b.Append(case_a, [&] {  //
             b.Return(func);
         });
 
         auto* case_b = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector{b.Constant(2_i)}});
-        b.With(case_b, [&] {  //
+        b.Append(case_b, [&] {  //
             b.Return(func);
         });
 
         auto* def_case = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector()});
-        b.With(def_case, [&] {  //
+        b.Append(def_case, [&] {  //
             b.Return(func);
         });
 
@@ -170,16 +170,16 @@
 
 TEST_F(SpirvWriterTest, Switch_ConditionalBreak) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* swtch = b.Switch(42_i);
 
         auto* case_a = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector{b.Constant(1_i)}});
-        b.With(case_a, [&] {
+        b.Append(case_a, [&] {
             auto* cond_break = b.If(true);
-            b.With(cond_break->True(), [&] {  //
+            b.Append(cond_break->True(), [&] {  //
                 b.ExitSwitch(swtch);
             });
-            b.With(cond_break->False(), [&] {  //
+            b.Append(cond_break->False(), [&] {  //
                 b.ExitIf(cond_break);
             });
 
@@ -187,7 +187,7 @@
         });
 
         auto* def_case = b.Case(swtch, utils::Vector{ir::Switch::CaseSelector()});
-        b.With(def_case, [&] {  //
+        b.Append(def_case, [&] {  //
             b.ExitSwitch(swtch);
         });
 
@@ -216,17 +216,17 @@
 
 TEST_F(SpirvWriterTest, Switch_Phi_SingleValue) {
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* s = b.Switch(42_i);
         s->SetResults(b.InstructionResult(ty.i32()));
         auto* case_a = b.Case(s, utils::Vector{ir::Switch::CaseSelector{b.Constant(1_i)},
                                                ir::Switch::CaseSelector{nullptr}});
-        b.With(case_a, [&] {  //
+        b.Append(case_a, [&] {  //
             b.ExitSwitch(s, 10_i);
         });
 
         auto* case_b = b.Case(s, utils::Vector{ir::Switch::CaseSelector{b.Constant(2_i)}});
-        b.With(case_b, [&] {  //
+        b.Append(case_b, [&] {  //
             b.ExitSwitch(s, 20_i);
         });
 
@@ -251,17 +251,17 @@
 
 TEST_F(SpirvWriterTest, Switch_Phi_SingleValue_CaseReturn) {
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* s = b.Switch(42_i);
         s->SetResults(b.InstructionResult(ty.i32()));
         auto* case_a = b.Case(s, utils::Vector{ir::Switch::CaseSelector{b.Constant(1_i)},
                                                ir::Switch::CaseSelector{nullptr}});
-        b.With(case_a, [&] {  //
+        b.Append(case_a, [&] {  //
             b.Return(func, 10_i);
         });
 
         auto* case_b = b.Case(s, utils::Vector{ir::Switch::CaseSelector{b.Constant(2_i)}});
-        b.With(case_b, [&] {  //
+        b.Append(case_b, [&] {  //
             b.ExitSwitch(s, 20_i);
         });
 
@@ -299,17 +299,17 @@
 
 TEST_F(SpirvWriterTest, Switch_Phi_MultipleValue_0) {
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* s = b.Switch(42_i);
         s->SetResults(b.InstructionResult(ty.i32()), b.InstructionResult(ty.bool_()));
         auto* case_a = b.Case(s, utils::Vector{ir::Switch::CaseSelector{b.Constant(1_i)},
                                                ir::Switch::CaseSelector{nullptr}});
-        b.With(case_a, [&] {  //
+        b.Append(case_a, [&] {  //
             b.ExitSwitch(s, 10_i, true);
         });
 
         auto* case_b = b.Case(s, utils::Vector{ir::Switch::CaseSelector{b.Constant(2_i)}});
-        b.With(case_b, [&] {  //
+        b.Append(case_b, [&] {  //
             b.ExitSwitch(s, 20_i, false);
         });
 
@@ -335,17 +335,17 @@
 
 TEST_F(SpirvWriterTest, Switch_Phi_MultipleValue_1) {
     auto* func = b.Function("foo", ty.bool_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* s = b.Switch(b.Constant(42_i));
         s->SetResults(b.InstructionResult(ty.i32()), b.InstructionResult(ty.bool_()));
         auto* case_a = b.Case(s, utils::Vector{ir::Switch::CaseSelector{b.Constant(1_i)},
                                                ir::Switch::CaseSelector{nullptr}});
-        b.With(case_a, [&] {  //
+        b.Append(case_a, [&] {  //
             b.ExitSwitch(s, 10_i, true);
         });
 
         auto* case_b = b.Case(s, utils::Vector{ir::Switch::CaseSelector{b.Constant(2_i)}});
-        b.With(case_b, [&] {  //
+        b.Append(case_b, [&] {  //
             b.ExitSwitch(s, 20_i, false);
         });
 
diff --git a/src/tint/lang/spirv/writer/swizzle_test.cc b/src/tint/lang/spirv/writer/swizzle_test.cc
index 4b25b33..970331c 100644
--- a/src/tint/lang/spirv/writer/swizzle_test.cc
+++ b/src/tint/lang/spirv/writer/swizzle_test.cc
@@ -24,7 +24,7 @@
     auto* vec = b.FunctionParam("vec", ty.vec4<i32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({vec});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Swizzle(ty.vec2<i32>(), vec, {3_u, 2_u});
         b.Return(func);
         mod.SetName(result, "result");
@@ -38,7 +38,7 @@
     auto* vec = b.FunctionParam("vec", ty.vec4<i32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({vec});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Swizzle(ty.vec3<i32>(), vec, {3_u, 2_u, 1_u});
         b.Return(func);
         mod.SetName(result, "result");
@@ -52,7 +52,7 @@
     auto* vec = b.FunctionParam("vec", ty.vec4<i32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({vec});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Swizzle(ty.vec4<i32>(), vec, {3_u, 2_u, 1_u, 0u});
         b.Return(func);
         mod.SetName(result, "result");
@@ -66,7 +66,7 @@
     auto* vec = b.FunctionParam("vec", ty.vec2<i32>());
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({vec});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Swizzle(ty.vec4<i32>(), vec, {1_u, 3_u, 1_u, 3_u});
         b.Return(func);
         mod.SetName(result, "result");
diff --git a/src/tint/lang/spirv/writer/texture_builtin_test.cc b/src/tint/lang/spirv/writer/texture_builtin_test.cc
index 0615aefb..c5b6906 100644
--- a/src/tint/lang/spirv/writer/texture_builtin_test.cc
+++ b/src/tint/lang/spirv/writer/texture_builtin_test.cc
@@ -155,7 +155,7 @@
         auto* func = b.Function("foo", result_ty);
         func->SetParams(std::move(func_params));
 
-        b.With(func->Block(), [&] {
+        b.Append(func->Block(), [&] {
             uint32_t arg_value = 1;
 
             utils::Vector<ir::Value*, 4> args;
diff --git a/src/tint/lang/spirv/writer/unary_test.cc b/src/tint/lang/spirv/writer/unary_test.cc
index 342db80..51a1bad 100644
--- a/src/tint/lang/spirv/writer/unary_test.cc
+++ b/src/tint/lang/spirv/writer/unary_test.cc
@@ -40,7 +40,7 @@
     auto* arg = b.FunctionParam("arg", MakeScalarType(params.type));
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Unary(params.kind, MakeScalarType(params.type), arg);
         b.Return(func);
         mod.SetName(result, "result");
@@ -55,7 +55,7 @@
     auto* arg = b.FunctionParam("arg", MakeVectorType(params.type));
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({arg});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* result = b.Unary(params.kind, MakeVectorType(params.type), arg);
         b.Return(func);
         mod.SetName(result, "result");
diff --git a/src/tint/lang/spirv/writer/var_test.cc b/src/tint/lang/spirv/writer/var_test.cc
index 5b5f272..e3ddc47 100644
--- a/src/tint/lang/spirv/writer/var_test.cc
+++ b/src/tint/lang/spirv/writer/var_test.cc
@@ -24,7 +24,7 @@
 
 TEST_F(SpirvWriterTest, FunctionVar_NoInit) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         b.Var("v", ty.ptr<function, i32>());
         b.Return(func);
     });
@@ -35,7 +35,7 @@
 
 TEST_F(SpirvWriterTest, FunctionVar_WithInit) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         v->SetInitializer(b.Constant(42_i));
         b.Return(func);
@@ -48,9 +48,9 @@
 
 TEST_F(SpirvWriterTest, FunctionVar_DeclInsideBlock) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* i = b.If(true);
-        b.With(i->True(), [&] {
+        b.Append(i->True(), [&] {
             auto* v = b.Var("v", ty.ptr<function, i32>());
             v->SetInitializer(b.Constant(42_i));
             b.ExitIf(i);
@@ -76,7 +76,7 @@
 
 TEST_F(SpirvWriterTest, FunctionVar_Load) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         auto* result = b.Load(v);
         b.Return(func);
@@ -90,7 +90,7 @@
 
 TEST_F(SpirvWriterTest, FunctionVar_Store) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* v = b.Var("v", ty.ptr<function, i32>());
         b.Store(v, 42_i);
         b.Return(func);
@@ -123,7 +123,7 @@
     b.RootBlock()->Append(v);
 
     auto* func = b.Function("foo", ty.void_(), ir::Function::PipelineStage::kFragment);
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* load = b.Load(v);
         auto* add = b.Add(ty.i32(), load, 1_i);
         b.Store(v, add);
@@ -150,7 +150,7 @@
 
     auto* func = b.Function("foo", ty.void_(), ir::Function::PipelineStage::kCompute,
                             std::array{1u, 1u, 1u});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* load = b.Load(v);
         auto* add = b.Add(ty.i32(), load, 1_i);
         b.Store(v, add);
@@ -200,7 +200,7 @@
 
     auto* func = b.Function("foo", ty.void_(), ir::Function::PipelineStage::kCompute,
                             std::array{1u, 1u, 1u});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* load = b.Load(v);
         auto* add = b.Add(ty.i32(), load, 1_i);
         b.Store(v, add);
@@ -244,7 +244,7 @@
 
     auto* func = b.Function("foo", ty.void_(), ir::Function::PipelineStage::kCompute,
                             std::array{1u, 1u, 1u});
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* load = b.Load(v);
         b.Return(func);
         mod.SetName(load, "load");
@@ -277,7 +277,7 @@
     b.RootBlock()->Append(v);
 
     auto* func = b.Function("foo", ty.i32());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* load = b.Load(v);
         b.Return(func, load);
         mod.SetName(load, "load");
@@ -316,7 +316,7 @@
     b.RootBlock()->Append(v);
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* load = b.Load(v);
         b.Return(func);
         mod.SetName(load, "load");
@@ -353,7 +353,7 @@
     b.RootBlock()->Append(v);
 
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* load = b.Load(v);
         b.Return(func);
         mod.SetName(load, "load");
diff --git a/src/tint/lang/spirv/writer/writer_test.cc b/src/tint/lang/spirv/writer/writer_test.cc
index 03ada9a..b31a05d 100644
--- a/src/tint/lang/spirv/writer/writer_test.cc
+++ b/src/tint/lang/spirv/writer/writer_test.cc
@@ -31,19 +31,19 @@
 
 TEST_F(SpirvWriterTest, Unreachable) {
     auto* func = b.Function("foo", ty.void_());
-    b.With(func->Block(), [&] {
+    b.Append(func->Block(), [&] {
         auto* loop = b.Loop();
-        b.With(loop->Body(), [&] {
+        b.Append(loop->Body(), [&] {
             auto* ifelse = b.If(true);
-            b.With(ifelse->True(), [&] {  //
+            b.Append(ifelse->True(), [&] {  //
                 b.Continue(loop);
             });
-            b.With(ifelse->False(), [&] {  //
+            b.Append(ifelse->False(), [&] {  //
                 b.Continue(loop);
             });
             b.Unreachable();
 
-            b.With(loop->Continuing(), [&] {  //
+            b.Append(loop->Continuing(), [&] {  //
                 b.NextIteration(loop);
             });
         });