diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index a63b5cc..334a40e 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -271,13 +271,8 @@
 
             tint::transform::Manager transformManager;
             {
-#    if DAWN_USE_NEW_TINT_TRANSFORM_API  // TODO(bclayton) - Remove once API migration is complete
                 auto transform = std::make_unique<tint::transform::VertexPulling>();
                 tint::transform::VertexStateDescriptor state;
-#    else   // DAWN_USE_NEW_TINT_TRANSFORM_API
-                auto transform = std::make_unique<tint::transform::VertexPullingTransform>(&module);
-                auto state = std::make_unique<tint::transform::VertexStateDescriptor>();
-#    endif  // DAWN_USE_NEW_TINT_TRANSFORM_API
 
                 for (uint32_t i = 0; i < vertexState.vertexBufferCount; ++i) {
                     auto& vertexBuffer = vertexState.vertexBuffers[i];
@@ -295,11 +290,7 @@
                         layout.attributes.push_back(std::move(attr));
                     }
 
-#    if DAWN_USE_NEW_TINT_TRANSFORM_API  // TODO(bclayton) - Remove once API migration is complete
                     state.push_back(std::move(layout));
-#    else   // DAWN_USE_NEW_TINT_TRANSFORM_API
-                    state->vertex_buffers.push_back(std::move(layout));
-#    endif  // DAWN_USE_NEW_TINT_TRANSFORM_API
                 }
                 transform->SetVertexState(std::move(state));
                 transform->SetEntryPoint(entryPoint);
@@ -307,7 +298,6 @@
                 transformManager.append(std::move(transform));
             }
 
-#    if DAWN_USE_NEW_TINT_TRANSFORM_API  // TODO(bclayton) - Remove once API migration is complete
             auto result = transformManager.Run(&module);
             if (result.diagnostics.contains_errors()) {
                 errorStream << "Vertex pulling transform: "
@@ -315,12 +305,6 @@
                 return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
             }
             module = std::move(result.module);
-#    else   // DAWN_USE_NEW_TINT_TRANSFORM_API
-            if (!transformManager.Run(&module)) {
-                errorStream << "Vertex pulling transform: " << transformManager.error();
-                return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
-            }
-#    endif  // DAWN_USE_NEW_TINT_TRANSFORM_API
 
             tint::TypeDeterminer type_determiner(&module);
             if (!type_determiner.Determine()) {
diff --git a/src/dawn_native/d3d12/ShaderModuleD3D12.cpp b/src/dawn_native/d3d12/ShaderModuleD3D12.cpp
index e9d1770..d415225 100644
--- a/src/dawn_native/d3d12/ShaderModuleD3D12.cpp
+++ b/src/dawn_native/d3d12/ShaderModuleD3D12.cpp
@@ -221,7 +221,6 @@
             return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
         }
 
-#    if DAWN_USE_NEW_TINT_TRANSFORM_API  // TODO(bclayton) - Remove once API migration is complete
         tint::transform::Manager transformManager;
         transformManager.append(std::make_unique<tint::transform::BoundArrayAccessors>());
         auto result = transformManager.Run(&module);
@@ -231,16 +230,6 @@
             return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
         }
         module = std::move(result.module);
-#    else   // DAWN_USE_NEW_TINT_TRANSFORM_API
-        tint::transform::Manager transformManager;
-        transformManager.append(
-            std::make_unique<tint::transform::BoundArrayAccessorsTransform>(&module));
-        if (!transformManager.Run(&module)) {
-            errorStream << "Bound Array Accessors Transform: " << transformManager.error()
-                        << std::endl;
-            return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
-        }
-#    endif  // DAWN_USE_NEW_TINT_TRANSFORM_API
 
         ASSERT(remappedEntryPointName != nullptr);
         tint::inspector::Inspector inspector(module);
