diff --git a/src/tint/lang/core/ir/transform/builtin_polyfill.cc b/src/tint/lang/core/ir/transform/builtin_polyfill.cc
index f1c0a5d..db6563f 100644
--- a/src/tint/lang/core/ir/transform/builtin_polyfill.cc
+++ b/src/tint/lang/core/ir/transform/builtin_polyfill.cc
@@ -20,8 +20,8 @@
 #include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/ir/validator.h"
 
-using namespace tint::builtin::fluent_types;  // NOLINT
-using namespace tint::number_suffixes;        // NOLINT
+using namespace tint::core::fluent_types;  // NOLINT
+using namespace tint::number_suffixes;     // NOLINT
 
 namespace tint::ir::transform {
 
@@ -54,7 +54,7 @@
             }
             if (auto* builtin = inst->As<ir::CoreBuiltinCall>()) {
                 switch (builtin->Func()) {
-                    case builtin::Function::kSaturate:
+                    case core::Function::kSaturate:
                         if (config.saturate) {
                             worklist.Push(builtin);
                         }
@@ -69,7 +69,7 @@
         for (auto* builtin : worklist) {
             ir::Value* replacement = nullptr;
             switch (builtin->Func()) {
-                case builtin::Function::kSaturate:
+                case core::Function::kSaturate:
                     replacement = Saturate(builtin);
                     break;
                 default:
@@ -106,7 +106,7 @@
             zero = b.Splat(vec, zero, vec->Width());
             one = b.Splat(vec, one, vec->Width());
         }
-        auto* clamp = b.Call(type, builtin::Function::kClamp, Vector{call->Args()[0], zero, one});
+        auto* clamp = b.Call(type, core::Function::kClamp, Vector{call->Args()[0], zero, one});
         clamp->InsertBefore(call);
         return clamp->Result();
     }
diff --git a/src/tint/lang/core/ir/transform/builtin_polyfill_test.cc b/src/tint/lang/core/ir/transform/builtin_polyfill_test.cc
index 54ca337..62bdb1f 100644
--- a/src/tint/lang/core/ir/transform/builtin_polyfill_test.cc
+++ b/src/tint/lang/core/ir/transform/builtin_polyfill_test.cc
@@ -21,8 +21,8 @@
 namespace tint::ir::transform {
 namespace {
 
-using namespace tint::builtin::fluent_types;  // NOLINT
-using namespace tint::number_suffixes;        // NOLINT
+using namespace tint::core::fluent_types;  // NOLINT
+using namespace tint::number_suffixes;     // NOLINT
 
 class IR_BuiltinPolyfillTest : public TransformTest {
   protected:
@@ -30,7 +30,7 @@
     /// @param builtin the builtin to call
     /// @param result_ty the result type of the builtin call
     /// @param arg_types the arguments types for the builtin call
-    void Build(builtin::Function builtin,
+    void Build(core::Function builtin,
                const type::Type* result_ty,
                VectorRef<const type::Type*> arg_types) {
         Vector<FunctionParam*, 4> args;
@@ -48,7 +48,7 @@
 };
 
 TEST_F(IR_BuiltinPolyfillTest, Saturate_NoPolyfill) {
-    Build(builtin::Function::kSaturate, ty.f32(), Vector{ty.f32()});
+    Build(core::Function::kSaturate, ty.f32(), Vector{ty.f32()});
     auto* src = R"(
 %foo = func(%arg:f32):f32 -> %b1 {
   %b1 = block {
@@ -68,7 +68,7 @@
 }
 
 TEST_F(IR_BuiltinPolyfillTest, Saturate_F32) {
-    Build(builtin::Function::kSaturate, ty.f32(), Vector{ty.f32()});
+    Build(core::Function::kSaturate, ty.f32(), Vector{ty.f32()});
     auto* src = R"(
 %foo = func(%arg:f32):f32 -> %b1 {
   %b1 = block {
@@ -95,7 +95,7 @@
 }
 
 TEST_F(IR_BuiltinPolyfillTest, Saturate_F16) {
-    Build(builtin::Function::kSaturate, ty.f16(), Vector{ty.f16()});
+    Build(core::Function::kSaturate, ty.f16(), Vector{ty.f16()});
     auto* src = R"(
 %foo = func(%arg:f16):f16 -> %b1 {
   %b1 = block {
@@ -121,7 +121,7 @@
 }
 
 TEST_F(IR_BuiltinPolyfillTest, Saturate_Vec2F32) {
-    Build(builtin::Function::kSaturate, ty.vec2<f32>(), Vector{ty.vec2<f32>()});
+    Build(core::Function::kSaturate, ty.vec2<f32>(), Vector{ty.vec2<f32>()});
     auto* src = R"(
 %foo = func(%arg:vec2<f32>):vec2<f32> -> %b1 {
   %b1 = block {
@@ -148,7 +148,7 @@
 }
 
 TEST_F(IR_BuiltinPolyfillTest, Saturate_Vec4F16) {
-    Build(builtin::Function::kSaturate, ty.vec4<f16>(), Vector{ty.vec4<f16>()});
+    Build(core::Function::kSaturate, ty.vec4<f16>(), Vector{ty.vec4<f16>()});
     auto* src = R"(
 %foo = func(%arg:vec4<f16>):vec4<f16> -> %b1 {
   %b1 = block {
diff --git a/src/tint/lang/spirv/writer/builtin_test.cc b/src/tint/lang/spirv/writer/builtin_test.cc
index 372a7ec..d180b56 100644
--- a/src/tint/lang/spirv/writer/builtin_test.cc
+++ b/src/tint/lang/spirv/writer/builtin_test.cc
@@ -603,7 +603,7 @@
     auto* func = b.Function("foo", ty.f32());
     func->SetParams({arg});
     b.Append(func->Block(), [&] {
-        auto* result = b.Call(ty.f32(), builtin::Function::kSaturate, arg);
+        auto* result = b.Call(ty.f32(), core::Function::kSaturate, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
     });
@@ -617,7 +617,7 @@
     auto* func = b.Function("foo", ty.vec4<f16>());
     func->SetParams({arg});
     b.Append(func->Block(), [&] {
-        auto* result = b.Call(ty.vec4<f16>(), builtin::Function::kSaturate, arg);
+        auto* result = b.Call(ty.vec4<f16>(), core::Function::kSaturate, arg);
         b.Return(func, result);
         mod.SetName(result, "result");
     });
