[shuffle] Move builtin to new structure.

This CL moves the builtin folder into the `lang/base/builtin` folder and
updates the includes. The namespaces and build groups are not updated in
this CL, just the code move.

Bug: tint:1988
Change-Id: I8f0d583d0b0212ceec36a7537fd7452208891555
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/142163
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 68e6f1d..66f1ffb 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -814,34 +814,34 @@
 
 libtint_source_set("libtint_builtins_src") {
   sources = [
-    "builtin/access.cc",
-    "builtin/access.h",
-    "builtin/address_space.cc",
-    "builtin/address_space.h",
-    "builtin/attribute.cc",
-    "builtin/attribute.h",
-    "builtin/builtin.cc",
-    "builtin/builtin.h",
-    "builtin/builtin_value.cc",
-    "builtin/builtin_value.h",
-    "builtin/diagnostic_rule.cc",
-    "builtin/diagnostic_rule.h",
-    "builtin/diagnostic_severity.cc",
-    "builtin/diagnostic_severity.h",
-    "builtin/extension.cc",
-    "builtin/extension.h",
-    "builtin/fluent_types.h",
-    "builtin/function.cc",
-    "builtin/function.h",
-    "builtin/interpolation.h",
-    "builtin/interpolation_sampling.cc",
-    "builtin/interpolation_sampling.h",
-    "builtin/interpolation_type.cc",
-    "builtin/interpolation_type.h",
-    "builtin/number.cc",
-    "builtin/number.h",
-    "builtin/texel_format.cc",
-    "builtin/texel_format.h",
+    "lang/base/builtin/access.cc",
+    "lang/base/builtin/access.h",
+    "lang/base/builtin/address_space.cc",
+    "lang/base/builtin/address_space.h",
+    "lang/base/builtin/attribute.cc",
+    "lang/base/builtin/attribute.h",
+    "lang/base/builtin/builtin.cc",
+    "lang/base/builtin/builtin.h",
+    "lang/base/builtin/builtin_value.cc",
+    "lang/base/builtin/builtin_value.h",
+    "lang/base/builtin/diagnostic_rule.cc",
+    "lang/base/builtin/diagnostic_rule.h",
+    "lang/base/builtin/diagnostic_severity.cc",
+    "lang/base/builtin/diagnostic_severity.h",
+    "lang/base/builtin/extension.cc",
+    "lang/base/builtin/extension.h",
+    "lang/base/builtin/fluent_types.h",
+    "lang/base/builtin/function.cc",
+    "lang/base/builtin/function.h",
+    "lang/base/builtin/interpolation.h",
+    "lang/base/builtin/interpolation_sampling.cc",
+    "lang/base/builtin/interpolation_sampling.h",
+    "lang/base/builtin/interpolation_type.cc",
+    "lang/base/builtin/interpolation_type.h",
+    "lang/base/builtin/number.cc",
+    "lang/base/builtin/number.h",
+    "lang/base/builtin/texel_format.cc",
+    "lang/base/builtin/texel_format.h",
   ]
   deps = [ ":libtint_utils_src" ]
 }
@@ -1663,18 +1663,18 @@
 
   tint_unittests_source_set("tint_unittests_builtins_src") {
     sources = [
-      "builtin/access_test.cc",
-      "builtin/address_space_test.cc",
-      "builtin/attribute_test.cc",
-      "builtin/builtin_test.cc",
-      "builtin/builtin_value_test.cc",
-      "builtin/diagnostic_rule_test.cc",
-      "builtin/diagnostic_severity_test.cc",
-      "builtin/extension_test.cc",
-      "builtin/interpolation_sampling_test.cc",
-      "builtin/interpolation_type_test.cc",
-      "builtin/number_test.cc",
-      "builtin/texel_format_test.cc",
+      "lang/base/builtin/access_test.cc",
+      "lang/base/builtin/address_space_test.cc",
+      "lang/base/builtin/attribute_test.cc",
+      "lang/base/builtin/builtin_test.cc",
+      "lang/base/builtin/builtin_value_test.cc",
+      "lang/base/builtin/diagnostic_rule_test.cc",
+      "lang/base/builtin/diagnostic_severity_test.cc",
+      "lang/base/builtin/extension_test.cc",
+      "lang/base/builtin/interpolation_sampling_test.cc",
+      "lang/base/builtin/interpolation_type_test.cc",
+      "lang/base/builtin/number_test.cc",
+      "lang/base/builtin/texel_format_test.cc",
     ]
     deps = [ ":libtint_builtins_src" ]
   }
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index b2c275d..8733078 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -234,9 +234,9 @@
   lang/wgsl/ast/while_statement.h
   lang/wgsl/ast/workgroup_attribute.cc
   lang/wgsl/ast/workgroup_attribute.h
-  builtin/fluent_types.h
-  builtin/number.cc
-  builtin/number.h
+  lang/base/builtin/fluent_types.h
+  lang/base/builtin/number.cc
+  lang/base/builtin/number.h
   clone_context.cc
   clone_context.h
   constant/clone_context.h
@@ -589,18 +589,18 @@
   writer/writer.h
 )
 
-tint_generated(builtin/access BENCH TEST)
-tint_generated(builtin/address_space BENCH TEST)
-tint_generated(builtin/attribute BENCH TEST)
-tint_generated(builtin/builtin BENCH TEST)
-tint_generated(builtin/builtin_value BENCH TEST)
-tint_generated(builtin/diagnostic_rule BENCH TEST)
-tint_generated(builtin/diagnostic_severity BENCH TEST)
-tint_generated(builtin/extension BENCH TEST)
-tint_generated(builtin/function)
-tint_generated(builtin/interpolation_sampling BENCH TEST)
-tint_generated(builtin/interpolation_type BENCH TEST)
-tint_generated(builtin/texel_format BENCH TEST)
+tint_generated(lang/base/builtin/access BENCH TEST)
+tint_generated(lang/base/builtin/address_space BENCH TEST)
+tint_generated(lang/base/builtin/attribute BENCH TEST)
+tint_generated(lang/base/builtin/builtin BENCH TEST)
+tint_generated(lang/base/builtin/builtin_value BENCH TEST)
+tint_generated(lang/base/builtin/diagnostic_rule BENCH TEST)
+tint_generated(lang/base/builtin/diagnostic_severity BENCH TEST)
+tint_generated(lang/base/builtin/extension BENCH TEST)
+tint_generated(lang/base/builtin/function)
+tint_generated(lang/base/builtin/interpolation_sampling BENCH TEST)
+tint_generated(lang/base/builtin/interpolation_type BENCH TEST)
+tint_generated(lang/base/builtin/texel_format BENCH TEST)
 
 tint_generated(resolver/ctor_conv_intrinsic)
 tint_generated(lang/wgsl/sem/parameter_usage)
@@ -1008,7 +1008,7 @@
     lang/wgsl/ast/variable_test.cc
     lang/wgsl/ast/while_statement_test.cc
     lang/wgsl/ast/workgroup_attribute_test.cc
-    builtin/number_test.cc
+    lang/base/builtin/number_test.cc
     clone_context_test.cc
     constant/composite_test.cc
     constant/manager_test.cc
diff --git a/src/tint/constant/composite.h b/src/tint/constant/composite.h
index 557ed7e..acaee30 100644
--- a/src/tint/constant/composite.h
+++ b/src/tint/constant/composite.h
@@ -15,11 +15,11 @@
 #ifndef SRC_TINT_CONSTANT_COMPOSITE_H_
 #define SRC_TINT_CONSTANT_COMPOSITE_H_
 
-#include "src/tint/builtin/number.h"
 #include "src/tint/constant/value.h"
 #include "src/tint/core/castable.h"
 #include "src/tint/core/hash.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/type/type.h"
 
 namespace tint::constant {
diff --git a/src/tint/constant/manager.h b/src/tint/constant/manager.h
index b91897d..5ff7076 100644
--- a/src/tint/constant/manager.h
+++ b/src/tint/constant/manager.h
@@ -17,10 +17,10 @@
 
 #include <utility>
 
-#include "src/tint/builtin/number.h"
 #include "src/tint/constant/value.h"
 #include "src/tint/core/hash.h"
 #include "src/tint/core/unique_allocator.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/type/manager.h"
 
 namespace tint::constant {
diff --git a/src/tint/constant/scalar.h b/src/tint/constant/scalar.h
index 5218762..6b999e2 100644
--- a/src/tint/constant/scalar.h
+++ b/src/tint/constant/scalar.h
@@ -15,11 +15,11 @@
 #ifndef SRC_TINT_CONSTANT_SCALAR_H_
 #define SRC_TINT_CONSTANT_SCALAR_H_
 
-#include "src/tint/builtin/number.h"
 #include "src/tint/constant/manager.h"
 #include "src/tint/constant/value.h"
 #include "src/tint/core/castable.h"
 #include "src/tint/core/hash.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/type/type.h"
 
 namespace tint::constant {
diff --git a/src/tint/constant/value.h b/src/tint/constant/value.h
index 8bb3b50..0e469c3 100644
--- a/src/tint/constant/value.h
+++ b/src/tint/constant/value.h
@@ -17,10 +17,10 @@
 
 #include <variant>
 
-#include "src/tint/builtin/number.h"
 #include "src/tint/constant/clone_context.h"
 #include "src/tint/constant/node.h"
 #include "src/tint/core/castable.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/type/type.h"
 
 namespace tint::constant {
diff --git a/src/tint/inspector/inspector.cc b/src/tint/inspector/inspector.cc
index 4721726..2dcdb14 100644
--- a/src/tint/inspector/inspector.cc
+++ b/src/tint/inspector/inspector.cc
@@ -17,13 +17,13 @@
 #include <limits>
 #include <utility>
 
-#include "src/tint/builtin/builtin_value.h"
-#include "src/tint/builtin/extension.h"
-#include "src/tint/builtin/interpolation_sampling.h"
-#include "src/tint/builtin/interpolation_type.h"
 #include "src/tint/core/math.h"
 #include "src/tint/core/string.h"
 #include "src/tint/core/unique_vector.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/extension.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
 #include "src/tint/lang/wgsl/ast/bool_literal_expression.h"
 #include "src/tint/lang/wgsl/ast/call_expression.h"
 #include "src/tint/lang/wgsl/ast/float_literal_expression.h"
diff --git a/src/tint/inspector/inspector.h b/src/tint/inspector/inspector.h
index e8922c4..c1a4248 100644
--- a/src/tint/inspector/inspector.h
+++ b/src/tint/inspector/inspector.h
@@ -25,11 +25,11 @@
 
 #include "tint/override_id.h"
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/unique_vector.h"
 #include "src/tint/inspector/entry_point.h"
 #include "src/tint/inspector/resource_binding.h"
 #include "src/tint/inspector/scalar.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/sem/sampler_texture_pair.h"
 #include "src/tint/program.h"
 
diff --git a/src/tint/inspector/resource_binding.h b/src/tint/inspector/resource_binding.h
index 69e1832..07b906b 100644
--- a/src/tint/inspector/resource_binding.h
+++ b/src/tint/inspector/resource_binding.h
@@ -17,7 +17,7 @@
 
 #include <cstdint>
 
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/type/texture_dimension.h"
 #include "src/tint/type/type.h"
 
diff --git a/src/tint/ir/core_builtin_call.h b/src/tint/ir/core_builtin_call.h
index cf9e99c..54b7894 100644
--- a/src/tint/ir/core_builtin_call.h
+++ b/src/tint/ir/core_builtin_call.h
@@ -15,9 +15,9 @@
 #ifndef SRC_TINT_IR_CORE_BUILTIN_CALL_H_
 #define SRC_TINT_IR_CORE_BUILTIN_CALL_H_
 
-#include "src/tint/builtin/function.h"
 #include "src/tint/core/castable.h"
 #include "src/tint/ir/builtin_call.h"
+#include "src/tint/lang/base/builtin/function.h"
 
 namespace tint::ir {
 
diff --git a/src/tint/ir/location.h b/src/tint/ir/location.h
index 5edb882..2cb72d1 100644
--- a/src/tint/ir/location.h
+++ b/src/tint/ir/location.h
@@ -17,7 +17,7 @@
 
 #include <optional>
 
-#include "src/tint/builtin/interpolation.h"
+#include "src/tint/lang/base/builtin/interpolation.h"
 
 namespace tint::ir {
 
diff --git a/src/tint/ir/program_test_helper.h b/src/tint/ir/program_test_helper.h
index 490decb..ceaf95c 100644
--- a/src/tint/ir/program_test_helper.h
+++ b/src/tint/ir/program_test_helper.h
@@ -20,10 +20,10 @@
 #include <utility>
 
 #include "gtest/gtest.h"
-#include "src/tint/builtin/number.h"
 #include "src/tint/core/string_stream.h"
 #include "src/tint/ir/disassembler.h"
 #include "src/tint/ir/from_program.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/program_builder.h"
 
 namespace tint::ir {
diff --git a/src/tint/ir/to_program.cc b/src/tint/ir/to_program.cc
index 393e82e..e3d0d56 100644
--- a/src/tint/ir/to_program.cc
+++ b/src/tint/ir/to_program.cc
@@ -18,7 +18,6 @@
 #include <tuple>
 #include <utility>
 
-#include "src/tint/builtin/builtin.h"
 #include "src/tint/constant/splat.h"
 #include "src/tint/core/hashmap.h"
 #include "src/tint/core/math.h"
@@ -61,6 +60,7 @@
 #include "src/tint/ir/user_call.h"
 #include "src/tint/ir/validator.h"
 #include "src/tint/ir/var.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 #include "src/tint/program_builder.h"
 #include "src/tint/switch.h"
 #include "src/tint/type/atomic.h"
diff --git a/src/tint/ir/transform/transform.h b/src/tint/ir/transform/transform.h
index e1c4005..55cee80 100644
--- a/src/tint/ir/transform/transform.h
+++ b/src/tint/ir/transform/transform.h
@@ -19,8 +19,8 @@
 
 #include <utility>
 
-#include "src/tint/builtin/address_space.h"
 #include "src/tint/core/castable.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 
 // Forward declarations
 namespace tint::ir {
diff --git a/src/tint/ir/var.h b/src/tint/ir/var.h
index 9e9fbb7..20e760b 100644
--- a/src/tint/ir/var.h
+++ b/src/tint/ir/var.h
@@ -15,12 +15,12 @@
 #ifndef SRC_TINT_IR_VAR_H_
 #define SRC_TINT_IR_VAR_H_
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/address_space.h"
 #include "src/tint/core/castable.h"
 #include "src/tint/core/vector.h"
 #include "src/tint/ir/binding_point.h"
 #include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 #include "src/tint/type/pointer.h"
 
 namespace tint::ir {
diff --git a/src/tint/builtin/access.cc b/src/tint/lang/base/builtin/access.cc
similarity index 94%
rename from src/tint/builtin/access.cc
rename to src/tint/lang/base/builtin/access.cc
index 15bf700..036f7d7 100644
--- a/src/tint/builtin/access.cc
+++ b/src/tint/lang/base/builtin/access.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/access.cc.tmpl
+//   src/tint/lang/base/builtin/access.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/access.cc.tmpl b/src/tint/lang/base/builtin/access.cc.tmpl
similarity index 93%
rename from src/tint/builtin/access.cc.tmpl
rename to src/tint/lang/base/builtin/access.cc.tmpl
index 71b5a61..f690d0d 100644
--- a/src/tint/builtin/access.cc.tmpl
+++ b/src/tint/lang/base/builtin/access.cc.tmpl
@@ -14,7 +14,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "access") -}}
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/access.h b/src/tint/lang/base/builtin/access.h
similarity index 89%
rename from src/tint/builtin/access.h
rename to src/tint/lang/base/builtin/access.h
index 72330e6..a990698 100644
--- a/src/tint/builtin/access.h
+++ b/src/tint/lang/base/builtin/access.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/access.h.tmpl
+//   src/tint/lang/base/builtin/access.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_ACCESS_H_
-#define SRC_TINT_BUILTIN_ACCESS_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_ACCESS_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_ACCESS_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -53,4 +53,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_ACCESS_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_ACCESS_H_
diff --git a/src/tint/builtin/access.h.tmpl b/src/tint/lang/base/builtin/access.h.tmpl
similarity index 83%
rename from src/tint/builtin/access.h.tmpl
rename to src/tint/lang/base/builtin/access.h.tmpl
index df2a64f..a32619a 100644
--- a/src/tint/builtin/access.h.tmpl
+++ b/src/tint/lang/base/builtin/access.h.tmpl
@@ -14,8 +14,8 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "access") -}}
 
-#ifndef SRC_TINT_BUILTIN_ACCESS_H_
-#define SRC_TINT_BUILTIN_ACCESS_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_ACCESS_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_ACCESS_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -26,4 +26,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_ACCESS_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_ACCESS_H_
diff --git a/src/tint/builtin/access_bench.cc b/src/tint/lang/base/builtin/access_bench.cc
similarity index 93%
rename from src/tint/builtin/access_bench.cc
rename to src/tint/lang/base/builtin/access_bench.cc
index 58a5f47..1d71de1 100644
--- a/src/tint/builtin/access_bench.cc
+++ b/src/tint/lang/base/builtin/access_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/access_bench.cc.tmpl
+//   src/tint/lang/base/builtin/access_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/access_bench.cc.tmpl b/src/tint/lang/base/builtin/access_bench.cc.tmpl
similarity index 93%
rename from src/tint/builtin/access_bench.cc.tmpl
rename to src/tint/lang/base/builtin/access_bench.cc.tmpl
index ed5d410..6238499 100644
--- a/src/tint/builtin/access_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/access_bench.cc.tmpl
@@ -14,7 +14,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "access") -}}
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/access_test.cc b/src/tint/lang/base/builtin/access_test.cc
similarity index 95%
rename from src/tint/builtin/access_test.cc
rename to src/tint/lang/base/builtin/access_test.cc
index c4ba77f..4c239d5 100644
--- a/src/tint/builtin/access_test.cc
+++ b/src/tint/lang/base/builtin/access_test.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/access_test.cc.tmpl
+//   src/tint/lang/base/builtin/access_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/access_test.cc.tmpl b/src/tint/lang/base/builtin/access_test.cc.tmpl
similarity index 93%
rename from src/tint/builtin/access_test.cc.tmpl
rename to src/tint/lang/base/builtin/access_test.cc.tmpl
index fd884f7..beb401b 100644
--- a/src/tint/builtin/access_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/access_test.cc.tmpl
@@ -14,7 +14,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "access") -}}
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/address_space.cc b/src/tint/lang/base/builtin/address_space.cc
similarity index 95%
rename from src/tint/builtin/address_space.cc
rename to src/tint/lang/base/builtin/address_space.cc
index 545d97a..3c67bec 100644
--- a/src/tint/builtin/address_space.cc
+++ b/src/tint/lang/base/builtin/address_space.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/address_space.cc.tmpl
+//   src/tint/lang/base/builtin/address_space.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/address_space.cc.tmpl b/src/tint/lang/base/builtin/address_space.cc.tmpl
similarity index 92%
rename from src/tint/builtin/address_space.cc.tmpl
rename to src/tint/lang/base/builtin/address_space.cc.tmpl
index 3368e5f..8f64fb2 100644
--- a/src/tint/builtin/address_space.cc.tmpl
+++ b/src/tint/lang/base/builtin/address_space.cc.tmpl
@@ -14,7 +14,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "address_space") -}}
 
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/address_space.h b/src/tint/lang/base/builtin/address_space.h
similarity index 90%
rename from src/tint/builtin/address_space.h
rename to src/tint/lang/base/builtin/address_space.h
index 40a7019..6a019d2 100644
--- a/src/tint/builtin/address_space.h
+++ b/src/tint/lang/base/builtin/address_space.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/address_space.h.tmpl
+//   src/tint/lang/base/builtin/address_space.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_ADDRESS_SPACE_H_
-#define SRC_TINT_BUILTIN_ADDRESS_SPACE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_ADDRESS_SPACE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_ADDRESS_SPACE_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -65,4 +65,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_ADDRESS_SPACE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_ADDRESS_SPACE_H_
diff --git a/src/tint/builtin/address_space.h.tmpl b/src/tint/lang/base/builtin/address_space.h.tmpl
similarity index 87%
rename from src/tint/builtin/address_space.h.tmpl
rename to src/tint/lang/base/builtin/address_space.h.tmpl
index 6407c2c..ebc6d9c 100644
--- a/src/tint/builtin/address_space.h.tmpl
+++ b/src/tint/lang/base/builtin/address_space.h.tmpl
@@ -14,8 +14,8 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "address_space") -}}
 
-#ifndef SRC_TINT_BUILTIN_ADDRESS_SPACE_H_
-#define SRC_TINT_BUILTIN_ADDRESS_SPACE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_ADDRESS_SPACE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_ADDRESS_SPACE_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -35,4 +35,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_ADDRESS_SPACE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_ADDRESS_SPACE_H_
diff --git a/src/tint/builtin/address_space_bench.cc b/src/tint/lang/base/builtin/address_space_bench.cc
similarity index 95%
rename from src/tint/builtin/address_space_bench.cc
rename to src/tint/lang/base/builtin/address_space_bench.cc
index 81b27eb..c45a775 100644
--- a/src/tint/builtin/address_space_bench.cc
+++ b/src/tint/lang/base/builtin/address_space_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/address_space_bench.cc.tmpl
+//   src/tint/lang/base/builtin/address_space_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/address_space_bench.cc.tmpl b/src/tint/lang/base/builtin/address_space_bench.cc.tmpl
similarity index 92%
rename from src/tint/builtin/address_space_bench.cc.tmpl
rename to src/tint/lang/base/builtin/address_space_bench.cc.tmpl
index 0c8ae9e..c6461a4 100644
--- a/src/tint/builtin/address_space_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/address_space_bench.cc.tmpl
@@ -14,7 +14,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "address_space") -}}
 
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/address_space_test.cc b/src/tint/lang/base/builtin/address_space_test.cc
similarity index 96%
rename from src/tint/builtin/address_space_test.cc
rename to src/tint/lang/base/builtin/address_space_test.cc
index b5c612a..50724c3 100644
--- a/src/tint/builtin/address_space_test.cc
+++ b/src/tint/lang/base/builtin/address_space_test.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/address_space_test.cc.tmpl
+//   src/tint/lang/base/builtin/address_space_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/address_space_test.cc.tmpl b/src/tint/lang/base/builtin/address_space_test.cc.tmpl
similarity index 93%
rename from src/tint/builtin/address_space_test.cc.tmpl
rename to src/tint/lang/base/builtin/address_space_test.cc.tmpl
index 9f6080e..f7a22a6 100644
--- a/src/tint/builtin/address_space_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/address_space_test.cc.tmpl
@@ -14,7 +14,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "address_space") -}}
 
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/attribute.cc b/src/tint/lang/base/builtin/attribute.cc
similarity index 97%
rename from src/tint/builtin/attribute.cc
rename to src/tint/lang/base/builtin/attribute.cc
index 0647825..7dc3e95 100644
--- a/src/tint/builtin/attribute.cc
+++ b/src/tint/lang/base/builtin/attribute.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/attribute.cc.tmpl
+//   src/tint/lang/base/builtin/attribute.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/attribute.h"
+#include "src/tint/lang/base/builtin/attribute.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/attribute.cc.tmpl b/src/tint/lang/base/builtin/attribute.cc.tmpl
similarity index 92%
rename from src/tint/builtin/attribute.cc.tmpl
rename to src/tint/lang/base/builtin/attribute.cc.tmpl
index 5ab2b23..6dee9de 100644
--- a/src/tint/builtin/attribute.cc.tmpl
+++ b/src/tint/lang/base/builtin/attribute.cc.tmpl
@@ -14,7 +14,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "attribute") -}}
 
-#include "src/tint/builtin/attribute.h"
+#include "src/tint/lang/base/builtin/attribute.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/attribute.h b/src/tint/lang/base/builtin/attribute.h
similarity index 91%
rename from src/tint/builtin/attribute.h
rename to src/tint/lang/base/builtin/attribute.h
index 71393e8..677ce93 100644
--- a/src/tint/builtin/attribute.h
+++ b/src/tint/lang/base/builtin/attribute.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/attribute.h.tmpl
+//   src/tint/lang/base/builtin/attribute.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_ATTRIBUTE_H_
-#define SRC_TINT_BUILTIN_ATTRIBUTE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_ATTRIBUTE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_ATTRIBUTE_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -70,4 +70,4 @@
 }  // namespace tint::builtin
 /// \endcond
 
-#endif  // SRC_TINT_BUILTIN_ATTRIBUTE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_ATTRIBUTE_H_
diff --git a/src/tint/builtin/attribute.h.tmpl b/src/tint/lang/base/builtin/attribute.h.tmpl
similarity index 85%
rename from src/tint/builtin/attribute.h.tmpl
rename to src/tint/lang/base/builtin/attribute.h.tmpl
index 172545f..63a4557 100644
--- a/src/tint/builtin/attribute.h.tmpl
+++ b/src/tint/lang/base/builtin/attribute.h.tmpl
@@ -14,8 +14,8 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "attribute") -}}
 
-#ifndef SRC_TINT_BUILTIN_ATTRIBUTE_H_
-#define SRC_TINT_BUILTIN_ATTRIBUTE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_ATTRIBUTE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_ATTRIBUTE_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -30,4 +30,4 @@
 }  // namespace tint::builtin
 /// \endcond
 
-#endif  // SRC_TINT_BUILTIN_ATTRIBUTE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_ATTRIBUTE_H_
diff --git a/src/tint/builtin/attribute_bench.cc b/src/tint/lang/base/builtin/attribute_bench.cc
similarity index 96%
rename from src/tint/builtin/attribute_bench.cc
rename to src/tint/lang/base/builtin/attribute_bench.cc
index 267a905..c12a17c 100644
--- a/src/tint/builtin/attribute_bench.cc
+++ b/src/tint/lang/base/builtin/attribute_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/attribute_bench.cc.tmpl
+//   src/tint/lang/base/builtin/attribute_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/attribute.h"
+#include "src/tint/lang/base/builtin/attribute.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/attribute_bench.cc.tmpl b/src/tint/lang/base/builtin/attribute_bench.cc.tmpl
similarity index 93%
rename from src/tint/builtin/attribute_bench.cc.tmpl
rename to src/tint/lang/base/builtin/attribute_bench.cc.tmpl
index 4845e2c..02040b0 100644
--- a/src/tint/builtin/attribute_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/attribute_bench.cc.tmpl
@@ -14,7 +14,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "attribute") -}}
 
-#include "src/tint/builtin/attribute.h"
+#include "src/tint/lang/base/builtin/attribute.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/attribute_test.cc b/src/tint/lang/base/builtin/attribute_test.cc
similarity index 97%
rename from src/tint/builtin/attribute_test.cc
rename to src/tint/lang/base/builtin/attribute_test.cc
index 097ae69..faf4738 100644
--- a/src/tint/builtin/attribute_test.cc
+++ b/src/tint/lang/base/builtin/attribute_test.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/attribute_test.cc.tmpl
+//   src/tint/lang/base/builtin/attribute_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/attribute.h"
+#include "src/tint/lang/base/builtin/attribute.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/attribute_test.cc.tmpl b/src/tint/lang/base/builtin/attribute_test.cc.tmpl
similarity index 93%
rename from src/tint/builtin/attribute_test.cc.tmpl
rename to src/tint/lang/base/builtin/attribute_test.cc.tmpl
index 93fa0de..91b1c58 100644
--- a/src/tint/builtin/attribute_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/attribute_test.cc.tmpl
@@ -14,7 +14,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "attribute") -}}
 
-#include "src/tint/builtin/attribute.h"
+#include "src/tint/lang/base/builtin/attribute.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/builtin.cc b/src/tint/lang/base/builtin/builtin.cc
similarity index 99%
rename from src/tint/builtin/builtin.cc
rename to src/tint/lang/base/builtin/builtin.cc
index 8f26436..f096ec6 100644
--- a/src/tint/builtin/builtin.cc
+++ b/src/tint/lang/base/builtin/builtin.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/builtin.cc.tmpl
+//   src/tint/lang/base/builtin/builtin.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/builtin.cc.tmpl b/src/tint/lang/base/builtin/builtin.cc.tmpl
similarity index 93%
rename from src/tint/builtin/builtin.cc.tmpl
rename to src/tint/lang/base/builtin/builtin.cc.tmpl
index 108d65d..da9a76b 100644
--- a/src/tint/builtin/builtin.cc.tmpl
+++ b/src/tint/lang/base/builtin/builtin.cc.tmpl
@@ -15,7 +15,7 @@
 {{- $enum := (Sem.Enum "builtin_type") -}}
 {{- Eval "OverrideEnumName" "Enum" $enum "Name" "Builtin" -}}
 
-#include "src/tint/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/builtin.h b/src/tint/lang/base/builtin/builtin.h
similarity index 96%
rename from src/tint/builtin/builtin.h
rename to src/tint/lang/base/builtin/builtin.h
index 10a126a..fe0be46 100644
--- a/src/tint/builtin/builtin.h
+++ b/src/tint/lang/base/builtin/builtin.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/builtin.h.tmpl
+//   src/tint/lang/base/builtin/builtin.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_BUILTIN_H_
-#define SRC_TINT_BUILTIN_BUILTIN_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -239,4 +239,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_BUILTIN_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_H_
diff --git a/src/tint/builtin/builtin.h.tmpl b/src/tint/lang/base/builtin/builtin.h.tmpl
similarity index 84%
rename from src/tint/builtin/builtin.h.tmpl
rename to src/tint/lang/base/builtin/builtin.h.tmpl
index 79fd6b3..8476a95 100644
--- a/src/tint/builtin/builtin.h.tmpl
+++ b/src/tint/lang/base/builtin/builtin.h.tmpl
@@ -15,8 +15,8 @@
 {{- $enum := (Sem.Enum "builtin_type") -}}
 {{- Eval "OverrideEnumName" "Enum" $enum "Name" "Builtin" -}}
 
-#ifndef SRC_TINT_BUILTIN_BUILTIN_H_
-#define SRC_TINT_BUILTIN_BUILTIN_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -27,4 +27,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_BUILTIN_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_H_
diff --git a/src/tint/builtin/builtin_bench.cc b/src/tint/lang/base/builtin/builtin_bench.cc
similarity index 99%
rename from src/tint/builtin/builtin_bench.cc
rename to src/tint/lang/base/builtin/builtin_bench.cc
index 4804ff7..5e8220e 100644
--- a/src/tint/builtin/builtin_bench.cc
+++ b/src/tint/lang/base/builtin/builtin_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/builtin_bench.cc.tmpl
+//   src/tint/lang/base/builtin/builtin_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/builtin_bench.cc.tmpl b/src/tint/lang/base/builtin/builtin_bench.cc.tmpl
similarity index 93%
rename from src/tint/builtin/builtin_bench.cc.tmpl
rename to src/tint/lang/base/builtin/builtin_bench.cc.tmpl
index 0df9ca2..6172499 100644
--- a/src/tint/builtin/builtin_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/builtin_bench.cc.tmpl
@@ -15,7 +15,7 @@
 {{- $enum := (Sem.Enum "builtin_type") -}}
 {{- Eval "OverrideEnumName" "Enum" $enum "Name" "Builtin" -}}
 
-#include "src/tint/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/builtin_test.cc b/src/tint/lang/base/builtin/builtin_test.cc
similarity index 99%
rename from src/tint/builtin/builtin_test.cc
rename to src/tint/lang/base/builtin/builtin_test.cc
index 69cb0c5..a79c310 100644
--- a/src/tint/builtin/builtin_test.cc
+++ b/src/tint/lang/base/builtin/builtin_test.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/builtin_test.cc.tmpl
+//   src/tint/lang/base/builtin/builtin_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/builtin_test.cc.tmpl b/src/tint/lang/base/builtin/builtin_test.cc.tmpl
similarity index 94%
rename from src/tint/builtin/builtin_test.cc.tmpl
rename to src/tint/lang/base/builtin/builtin_test.cc.tmpl
index 968b4fc..3945f0b 100644
--- a/src/tint/builtin/builtin_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/builtin_test.cc.tmpl
@@ -15,7 +15,7 @@
 {{- $enum := (Sem.Enum "builtin_type") -}}
 {{- Eval "OverrideEnumName" "Enum" $enum "Name" "Builtin" -}}
 
-#include "src/tint/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/builtin_value.cc b/src/tint/lang/base/builtin/builtin_value.cc
similarity index 96%
rename from src/tint/builtin/builtin_value.cc
rename to src/tint/lang/base/builtin/builtin_value.cc
index 5e06c50..ddc3bff 100644
--- a/src/tint/builtin/builtin_value.cc
+++ b/src/tint/lang/base/builtin/builtin_value.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/builtin_value.cc.tmpl
+//   src/tint/lang/base/builtin/builtin_value.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/builtin_value.cc.tmpl b/src/tint/lang/base/builtin/builtin_value.cc.tmpl
similarity index 91%
rename from src/tint/builtin/builtin_value.cc.tmpl
rename to src/tint/lang/base/builtin/builtin_value.cc.tmpl
index 1709091..e1fe358 100644
--- a/src/tint/builtin/builtin_value.cc.tmpl
+++ b/src/tint/lang/base/builtin/builtin_value.cc.tmpl
@@ -11,7 +11,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "builtin_value") -}}
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/builtin_value.h b/src/tint/lang/base/builtin/builtin_value.h
similarity index 90%
rename from src/tint/builtin/builtin_value.h
rename to src/tint/lang/base/builtin/builtin_value.h
index 42e96b9..1361962 100644
--- a/src/tint/builtin/builtin_value.h
+++ b/src/tint/lang/base/builtin/builtin_value.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/builtin_value.h.tmpl
+//   src/tint/lang/base/builtin/builtin_value.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_BUILTIN_VALUE_H_
-#define SRC_TINT_BUILTIN_BUILTIN_VALUE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_VALUE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_VALUE_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -65,4 +65,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_BUILTIN_VALUE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_VALUE_H_
diff --git a/src/tint/builtin/builtin_value.h.tmpl b/src/tint/lang/base/builtin/builtin_value.h.tmpl
similarity index 80%
rename from src/tint/builtin/builtin_value.h.tmpl
rename to src/tint/lang/base/builtin/builtin_value.h.tmpl
index c29d8ec..639c2a3 100644
--- a/src/tint/builtin/builtin_value.h.tmpl
+++ b/src/tint/lang/base/builtin/builtin_value.h.tmpl
@@ -11,8 +11,8 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "builtin_value") -}}
 
-#ifndef SRC_TINT_BUILTIN_BUILTIN_VALUE_H_
-#define SRC_TINT_BUILTIN_BUILTIN_VALUE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_VALUE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_VALUE_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -23,4 +23,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_BUILTIN_VALUE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_BUILTIN_VALUE_H_
diff --git a/src/tint/builtin/builtin_value_bench.cc b/src/tint/lang/base/builtin/builtin_value_bench.cc
similarity index 96%
rename from src/tint/builtin/builtin_value_bench.cc
rename to src/tint/lang/base/builtin/builtin_value_bench.cc
index 28c01ac..733608f 100644
--- a/src/tint/builtin/builtin_value_bench.cc
+++ b/src/tint/lang/base/builtin/builtin_value_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/builtin_value_bench.cc.tmpl
+//   src/tint/lang/base/builtin/builtin_value_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/builtin_value_bench.cc.tmpl b/src/tint/lang/base/builtin/builtin_value_bench.cc.tmpl
similarity index 92%
rename from src/tint/builtin/builtin_value_bench.cc.tmpl
rename to src/tint/lang/base/builtin/builtin_value_bench.cc.tmpl
index 54831ae..0a2eaea 100644
--- a/src/tint/builtin/builtin_value_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/builtin_value_bench.cc.tmpl
@@ -11,7 +11,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "builtin_value") -}}
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/builtin_value_test.cc b/src/tint/lang/base/builtin/builtin_value_test.cc
similarity index 97%
rename from src/tint/builtin/builtin_value_test.cc
rename to src/tint/lang/base/builtin/builtin_value_test.cc
index 9811c90..d97dd96 100644
--- a/src/tint/builtin/builtin_value_test.cc
+++ b/src/tint/lang/base/builtin/builtin_value_test.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/builtin_value_test.cc.tmpl
+//   src/tint/lang/base/builtin/builtin_value_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/builtin_value_test.cc.tmpl b/src/tint/lang/base/builtin/builtin_value_test.cc.tmpl
similarity index 92%
rename from src/tint/builtin/builtin_value_test.cc.tmpl
rename to src/tint/lang/base/builtin/builtin_value_test.cc.tmpl
index 21d5d43..ad9aa29 100644
--- a/src/tint/builtin/builtin_value_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/builtin_value_test.cc.tmpl
@@ -11,7 +11,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "builtin_value") -}}
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/diagnostic_rule.cc b/src/tint/lang/base/builtin/diagnostic_rule.cc
similarity index 95%
rename from src/tint/builtin/diagnostic_rule.cc
rename to src/tint/lang/base/builtin/diagnostic_rule.cc
index a5fc140..ec450d5 100644
--- a/src/tint/builtin/diagnostic_rule.cc
+++ b/src/tint/lang/base/builtin/diagnostic_rule.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/diagnostic_rule.cc.tmpl
+//   src/tint/lang/base/builtin/diagnostic_rule.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/diagnostic_rule.h"
+#include "src/tint/lang/base/builtin/diagnostic_rule.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/diagnostic_rule.cc.tmpl b/src/tint/lang/base/builtin/diagnostic_rule.cc.tmpl
similarity index 93%
rename from src/tint/builtin/diagnostic_rule.cc.tmpl
rename to src/tint/lang/base/builtin/diagnostic_rule.cc.tmpl
index ecc28d1..1c866be 100644
--- a/src/tint/builtin/diagnostic_rule.cc.tmpl
+++ b/src/tint/lang/base/builtin/diagnostic_rule.cc.tmpl
@@ -10,7 +10,7 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#include "src/tint/builtin/diagnostic_rule.h"
+#include "src/tint/lang/base/builtin/diagnostic_rule.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/diagnostic_rule.h b/src/tint/lang/base/builtin/diagnostic_rule.h
similarity index 91%
rename from src/tint/builtin/diagnostic_rule.h
rename to src/tint/lang/base/builtin/diagnostic_rule.h
index a8be65f..30a9756 100644
--- a/src/tint/builtin/diagnostic_rule.h
+++ b/src/tint/lang/base/builtin/diagnostic_rule.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/diagnostic_rule.h.tmpl
+//   src/tint/lang/base/builtin/diagnostic_rule.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_DIAGNOSTIC_RULE_H_
-#define SRC_TINT_BUILTIN_DIAGNOSTIC_RULE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_RULE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_RULE_H_
 
 #include <string>
 #include <variant>
@@ -76,4 +76,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_DIAGNOSTIC_RULE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_RULE_H_
diff --git a/src/tint/builtin/diagnostic_rule.h.tmpl b/src/tint/lang/base/builtin/diagnostic_rule.h.tmpl
similarity index 84%
rename from src/tint/builtin/diagnostic_rule.h.tmpl
rename to src/tint/lang/base/builtin/diagnostic_rule.h.tmpl
index 0dc952c..0555870 100644
--- a/src/tint/builtin/diagnostic_rule.h.tmpl
+++ b/src/tint/lang/base/builtin/diagnostic_rule.h.tmpl
@@ -10,8 +10,8 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#ifndef SRC_TINT_BUILTIN_DIAGNOSTIC_RULE_H_
-#define SRC_TINT_BUILTIN_DIAGNOSTIC_RULE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_RULE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_RULE_H_
 
 #include <string>
 #include <variant>
@@ -31,4 +31,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_DIAGNOSTIC_RULE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_RULE_H_
diff --git a/src/tint/builtin/diagnostic_rule_bench.cc b/src/tint/lang/base/builtin/diagnostic_rule_bench.cc
similarity index 94%
rename from src/tint/builtin/diagnostic_rule_bench.cc
rename to src/tint/lang/base/builtin/diagnostic_rule_bench.cc
index efa6977..c248854 100644
--- a/src/tint/builtin/diagnostic_rule_bench.cc
+++ b/src/tint/lang/base/builtin/diagnostic_rule_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/diagnostic_rule_bench.cc.tmpl
+//   src/tint/lang/base/builtin/diagnostic_rule_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/diagnostic_rule.h"
+#include "src/tint/lang/base/builtin/diagnostic_rule.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/diagnostic_rule_bench.cc.tmpl b/src/tint/lang/base/builtin/diagnostic_rule_bench.cc.tmpl
similarity index 92%
rename from src/tint/builtin/diagnostic_rule_bench.cc.tmpl
rename to src/tint/lang/base/builtin/diagnostic_rule_bench.cc.tmpl
index 3f43aca..0e42df0 100644
--- a/src/tint/builtin/diagnostic_rule_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/diagnostic_rule_bench.cc.tmpl
@@ -10,7 +10,7 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#include "src/tint/builtin/diagnostic_rule.h"
+#include "src/tint/lang/base/builtin/diagnostic_rule.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/diagnostic_rule_test.cc b/src/tint/lang/base/builtin/diagnostic_rule_test.cc
similarity index 97%
rename from src/tint/builtin/diagnostic_rule_test.cc
rename to src/tint/lang/base/builtin/diagnostic_rule_test.cc
index 9c4e00f..22f1e25 100644
--- a/src/tint/builtin/diagnostic_rule_test.cc
+++ b/src/tint/lang/base/builtin/diagnostic_rule_test.cc
@@ -15,7 +15,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/diagnostic_rule_test.cc.tmpl
+//   src/tint/lang/base/builtin/diagnostic_rule_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
@@ -23,8 +23,8 @@
 #include <string>
 
 #include "gtest/gtest-spi.h"
-#include "src/tint/builtin/diagnostic_rule.h"
 #include "src/tint/core/string.h"
+#include "src/tint/lang/base/builtin/diagnostic_rule.h"
 
 namespace tint::builtin {
 namespace {
diff --git a/src/tint/builtin/diagnostic_rule_test.cc.tmpl b/src/tint/lang/base/builtin/diagnostic_rule_test.cc.tmpl
similarity index 94%
rename from src/tint/builtin/diagnostic_rule_test.cc.tmpl
rename to src/tint/lang/base/builtin/diagnostic_rule_test.cc.tmpl
index 6572658..0c745e5 100644
--- a/src/tint/builtin/diagnostic_rule_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/diagnostic_rule_test.cc.tmpl
@@ -13,7 +13,7 @@
 #include <string>
 
 #include "gtest/gtest-spi.h"
-#include "src/tint/builtin/diagnostic_rule.h"
+#include "src/tint/lang/base/builtin/diagnostic_rule.h"
 #include "src/tint/core/string.h"
 
 namespace tint::builtin {
diff --git a/src/tint/builtin/diagnostic_severity.cc b/src/tint/lang/base/builtin/diagnostic_severity.cc
similarity index 95%
rename from src/tint/builtin/diagnostic_severity.cc
rename to src/tint/lang/base/builtin/diagnostic_severity.cc
index 5d68992..2dea0aa 100644
--- a/src/tint/builtin/diagnostic_severity.cc
+++ b/src/tint/lang/base/builtin/diagnostic_severity.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/diagnostic_severity.cc.tmpl
+//   src/tint/lang/base/builtin/diagnostic_severity.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/diagnostic_severity.h"
+#include "src/tint/lang/base/builtin/diagnostic_severity.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/diagnostic_severity.cc.tmpl b/src/tint/lang/base/builtin/diagnostic_severity.cc.tmpl
similarity index 94%
rename from src/tint/builtin/diagnostic_severity.cc.tmpl
rename to src/tint/lang/base/builtin/diagnostic_severity.cc.tmpl
index e02cf89..9991e13 100644
--- a/src/tint/builtin/diagnostic_severity.cc.tmpl
+++ b/src/tint/lang/base/builtin/diagnostic_severity.cc.tmpl
@@ -10,7 +10,7 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#include "src/tint/builtin/diagnostic_severity.h"
+#include "src/tint/lang/base/builtin/diagnostic_severity.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/diagnostic_severity.h b/src/tint/lang/base/builtin/diagnostic_severity.h
similarity index 87%
rename from src/tint/builtin/diagnostic_severity.h
rename to src/tint/lang/base/builtin/diagnostic_severity.h
index a7487a1..f2c2460 100644
--- a/src/tint/builtin/diagnostic_severity.h
+++ b/src/tint/lang/base/builtin/diagnostic_severity.h
@@ -15,20 +15,20 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/diagnostic_severity.h.tmpl
+//   src/tint/lang/base/builtin/diagnostic_severity.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_DIAGNOSTIC_SEVERITY_H_
-#define SRC_TINT_BUILTIN_DIAGNOSTIC_SEVERITY_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_SEVERITY_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_SEVERITY_H_
 
 #include <string>
 #include <unordered_map>
 
-#include "src/tint/builtin/diagnostic_rule.h"
 #include "src/tint/core/diagnostic/diagnostic.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/diagnostic_rule.h"
 
 namespace tint::builtin {
 
@@ -66,4 +66,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_DIAGNOSTIC_SEVERITY_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_SEVERITY_H_
diff --git a/src/tint/builtin/diagnostic_severity.h.tmpl b/src/tint/lang/base/builtin/diagnostic_severity.h.tmpl
similarity index 81%
rename from src/tint/builtin/diagnostic_severity.h.tmpl
rename to src/tint/lang/base/builtin/diagnostic_severity.h.tmpl
index c51ee3d..478e4f2 100644
--- a/src/tint/builtin/diagnostic_severity.h.tmpl
+++ b/src/tint/lang/base/builtin/diagnostic_severity.h.tmpl
@@ -10,14 +10,14 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#ifndef SRC_TINT_BUILTIN_DIAGNOSTIC_SEVERITY_H_
-#define SRC_TINT_BUILTIN_DIAGNOSTIC_SEVERITY_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_SEVERITY_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_SEVERITY_H_
 
 #include <string>
 #include <unordered_map>
 
 #include "src/tint/core/string_stream.h"
-#include "src/tint/builtin/diagnostic_rule.h"
+#include "src/tint/lang/base/builtin/diagnostic_rule.h"
 #include "src/tint/core/diagnostic/diagnostic.h"
 
 namespace tint::builtin {
@@ -33,4 +33,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_DIAGNOSTIC_SEVERITY_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_DIAGNOSTIC_SEVERITY_H_
diff --git a/src/tint/builtin/diagnostic_severity_bench.cc b/src/tint/lang/base/builtin/diagnostic_severity_bench.cc
similarity index 92%
rename from src/tint/builtin/diagnostic_severity_bench.cc
rename to src/tint/lang/base/builtin/diagnostic_severity_bench.cc
index 35fe046..d8f9a13 100644
--- a/src/tint/builtin/diagnostic_severity_bench.cc
+++ b/src/tint/lang/base/builtin/diagnostic_severity_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/diagnostic_severity_bench.cc.tmpl
+//   src/tint/lang/base/builtin/diagnostic_severity_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/diagnostic_severity.h"
+#include "src/tint/lang/base/builtin/diagnostic_severity.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/diagnostic_severity_bench.cc.tmpl b/src/tint/lang/base/builtin/diagnostic_severity_bench.cc.tmpl
similarity index 91%
rename from src/tint/builtin/diagnostic_severity_bench.cc.tmpl
rename to src/tint/lang/base/builtin/diagnostic_severity_bench.cc.tmpl
index 3d46347..86fca76 100644
--- a/src/tint/builtin/diagnostic_severity_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/diagnostic_severity_bench.cc.tmpl
@@ -10,7 +10,7 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#include "src/tint/builtin/diagnostic_severity.h"
+#include "src/tint/lang/base/builtin/diagnostic_severity.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/diagnostic_severity_test.cc b/src/tint/lang/base/builtin/diagnostic_severity_test.cc
similarity index 95%
rename from src/tint/builtin/diagnostic_severity_test.cc
rename to src/tint/lang/base/builtin/diagnostic_severity_test.cc
index 1a8133f..3573d1f 100644
--- a/src/tint/builtin/diagnostic_severity_test.cc
+++ b/src/tint/lang/base/builtin/diagnostic_severity_test.cc
@@ -15,7 +15,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/diagnostic_severity_test.cc.tmpl
+//   src/tint/lang/base/builtin/diagnostic_severity_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
@@ -23,8 +23,8 @@
 #include <string>
 
 #include "gtest/gtest-spi.h"
-#include "src/tint/builtin/diagnostic_severity.h"
 #include "src/tint/core/string.h"
+#include "src/tint/lang/base/builtin/diagnostic_severity.h"
 
 namespace tint::builtin {
 namespace {
diff --git a/src/tint/builtin/diagnostic_severity_test.cc.tmpl b/src/tint/lang/base/builtin/diagnostic_severity_test.cc.tmpl
similarity index 92%
rename from src/tint/builtin/diagnostic_severity_test.cc.tmpl
rename to src/tint/lang/base/builtin/diagnostic_severity_test.cc.tmpl
index 6669460..b98af29 100644
--- a/src/tint/builtin/diagnostic_severity_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/diagnostic_severity_test.cc.tmpl
@@ -13,7 +13,7 @@
 #include <string>
 
 #include "gtest/gtest-spi.h"
-#include "src/tint/builtin/diagnostic_severity.h"
+#include "src/tint/lang/base/builtin/diagnostic_severity.h"
 #include "src/tint/core/string.h"
 
 namespace tint::builtin {
diff --git a/src/tint/builtin/extension.cc b/src/tint/lang/base/builtin/extension.cc
similarity index 96%
rename from src/tint/builtin/extension.cc
rename to src/tint/lang/base/builtin/extension.cc
index a8d4567..e76c75f 100644
--- a/src/tint/builtin/extension.cc
+++ b/src/tint/lang/base/builtin/extension.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/extension.cc.tmpl
+//   src/tint/lang/base/builtin/extension.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/extension.h"
+#include "src/tint/lang/base/builtin/extension.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/extension.cc.tmpl b/src/tint/lang/base/builtin/extension.cc.tmpl
similarity index 92%
rename from src/tint/builtin/extension.cc.tmpl
rename to src/tint/lang/base/builtin/extension.cc.tmpl
index 249c91b..318de70 100644
--- a/src/tint/builtin/extension.cc.tmpl
+++ b/src/tint/lang/base/builtin/extension.cc.tmpl
@@ -11,7 +11,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "extension") -}}
 
-#include "src/tint/builtin/extension.h"
+#include "src/tint/lang/base/builtin/extension.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/extension.h b/src/tint/lang/base/builtin/extension.h
similarity index 91%
rename from src/tint/builtin/extension.h
rename to src/tint/lang/base/builtin/extension.h
index a2fee8b..a474cc6 100644
--- a/src/tint/builtin/extension.h
+++ b/src/tint/lang/base/builtin/extension.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/extension.h.tmpl
+//   src/tint/lang/base/builtin/extension.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_EXTENSION_H_
-#define SRC_TINT_BUILTIN_EXTENSION_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_EXTENSION_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_EXTENSION_H_
 
 #include "src/tint/core/string_stream.h"
 #include "src/tint/core/unique_vector.h"
@@ -66,4 +66,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_EXTENSION_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_EXTENSION_H_
diff --git a/src/tint/builtin/extension.h.tmpl b/src/tint/lang/base/builtin/extension.h.tmpl
similarity index 84%
rename from src/tint/builtin/extension.h.tmpl
rename to src/tint/lang/base/builtin/extension.h.tmpl
index e64b678..a289ca2 100644
--- a/src/tint/builtin/extension.h.tmpl
+++ b/src/tint/lang/base/builtin/extension.h.tmpl
@@ -11,8 +11,8 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "extension") -}}
 
-#ifndef SRC_TINT_BUILTIN_EXTENSION_H_
-#define SRC_TINT_BUILTIN_EXTENSION_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_EXTENSION_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_EXTENSION_H_
 
 #include "src/tint/core/string_stream.h"
 #include "src/tint/core/unique_vector.h"
@@ -28,4 +28,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_EXTENSION_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_EXTENSION_H_
diff --git a/src/tint/builtin/extension_bench.cc b/src/tint/lang/base/builtin/extension_bench.cc
similarity index 96%
rename from src/tint/builtin/extension_bench.cc
rename to src/tint/lang/base/builtin/extension_bench.cc
index 447bf55..b1313ea 100644
--- a/src/tint/builtin/extension_bench.cc
+++ b/src/tint/lang/base/builtin/extension_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/extension_bench.cc.tmpl
+//   src/tint/lang/base/builtin/extension_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/extension.h"
+#include "src/tint/lang/base/builtin/extension.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/extension_bench.cc.tmpl b/src/tint/lang/base/builtin/extension_bench.cc.tmpl
similarity index 92%
rename from src/tint/builtin/extension_bench.cc.tmpl
rename to src/tint/lang/base/builtin/extension_bench.cc.tmpl
index 5345629..9daafc3 100644
--- a/src/tint/builtin/extension_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/extension_bench.cc.tmpl
@@ -11,7 +11,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "extension") -}}
 
-#include "src/tint/builtin/extension.h"
+#include "src/tint/lang/base/builtin/extension.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/extension_test.cc b/src/tint/lang/base/builtin/extension_test.cc
similarity index 97%
rename from src/tint/builtin/extension_test.cc
rename to src/tint/lang/base/builtin/extension_test.cc
index c7c5564..67e24f3 100644
--- a/src/tint/builtin/extension_test.cc
+++ b/src/tint/lang/base/builtin/extension_test.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/extension_test.cc.tmpl
+//   src/tint/lang/base/builtin/extension_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/extension.h"
+#include "src/tint/lang/base/builtin/extension.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/extension_test.cc.tmpl b/src/tint/lang/base/builtin/extension_test.cc.tmpl
similarity index 93%
rename from src/tint/builtin/extension_test.cc.tmpl
rename to src/tint/lang/base/builtin/extension_test.cc.tmpl
index 8c687f5..eb34c89 100644
--- a/src/tint/builtin/extension_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/extension_test.cc.tmpl
@@ -11,7 +11,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "extension") -}}
 
-#include "src/tint/builtin/extension.h"
+#include "src/tint/lang/base/builtin/extension.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/fluent_types.h b/src/tint/lang/base/builtin/fluent_types.h
similarity index 95%
rename from src/tint/builtin/fluent_types.h
rename to src/tint/lang/base/builtin/fluent_types.h
index 925b54e..cf8d5bc 100644
--- a/src/tint/builtin/fluent_types.h
+++ b/src/tint/lang/base/builtin/fluent_types.h
@@ -12,14 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_BUILTIN_FLUENT_TYPES_H_
-#define SRC_TINT_BUILTIN_FLUENT_TYPES_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_FLUENT_TYPES_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_FLUENT_TYPES_H_
 
 #include <stdint.h>
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/address_space.h"
-#include "src/tint/builtin/number.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/number.h"
 
 namespace tint::builtin::fluent_types {
 
@@ -234,4 +234,4 @@
 
 }  // namespace tint::builtin::fluent_types
 
-#endif  // SRC_TINT_BUILTIN_FLUENT_TYPES_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_FLUENT_TYPES_H_
diff --git a/src/tint/builtin/function.cc b/src/tint/lang/base/builtin/function.cc
similarity index 99%
rename from src/tint/builtin/function.cc
rename to src/tint/lang/base/builtin/function.cc
index 378e922..0eab7a4 100644
--- a/src/tint/builtin/function.cc
+++ b/src/tint/lang/base/builtin/function.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/function.cc.tmpl
+//   src/tint/lang/base/builtin/function.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/function.h"
+#include "src/tint/lang/base/builtin/function.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/function.cc.tmpl b/src/tint/lang/base/builtin/function.cc.tmpl
similarity index 98%
rename from src/tint/builtin/function.cc.tmpl
rename to src/tint/lang/base/builtin/function.cc.tmpl
index a2788df..581b74f 100644
--- a/src/tint/builtin/function.cc.tmpl
+++ b/src/tint/lang/base/builtin/function.cc.tmpl
@@ -11,7 +11,7 @@
 --------------------------------------------------------------------------------
 */ -}}
 
-#include "src/tint/builtin/function.h"
+#include "src/tint/lang/base/builtin/function.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/function.h b/src/tint/lang/base/builtin/function.h
similarity index 97%
rename from src/tint/builtin/function.h
rename to src/tint/lang/base/builtin/function.h
index 80bfbfe..0b2e21a 100644
--- a/src/tint/builtin/function.h
+++ b/src/tint/lang/base/builtin/function.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/function.h.tmpl
+//   src/tint/lang/base/builtin/function.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_FUNCTION_H_
-#define SRC_TINT_BUILTIN_FUNCTION_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_FUNCTION_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_FUNCTION_H_
 
 #include <string>
 
@@ -456,4 +456,4 @@
 }  // namespace tint::builtin
 // \endcond
 
-#endif  // SRC_TINT_BUILTIN_FUNCTION_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_FUNCTION_H_
diff --git a/src/tint/builtin/function.h.tmpl b/src/tint/lang/base/builtin/function.h.tmpl
similarity index 95%
rename from src/tint/builtin/function.h.tmpl
rename to src/tint/lang/base/builtin/function.h.tmpl
index e7f1778..4968e02 100644
--- a/src/tint/builtin/function.h.tmpl
+++ b/src/tint/lang/base/builtin/function.h.tmpl
@@ -11,8 +11,8 @@
 --------------------------------------------------------------------------------
 */ -}}
 
-#ifndef SRC_TINT_BUILTIN_FUNCTION_H_
-#define SRC_TINT_BUILTIN_FUNCTION_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_FUNCTION_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_FUNCTION_H_
 
 #include <string>
 
@@ -114,4 +114,4 @@
 }  // namespace tint::builtin
 // \endcond
 
-#endif  // SRC_TINT_BUILTIN_FUNCTION_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_FUNCTION_H_
diff --git a/src/tint/builtin/interpolation.h b/src/tint/lang/base/builtin/interpolation.h
similarity index 78%
rename from src/tint/builtin/interpolation.h
rename to src/tint/lang/base/builtin/interpolation.h
index ad73c30..56d72d6 100644
--- a/src/tint/builtin/interpolation.h
+++ b/src/tint/lang/base/builtin/interpolation.h
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_BUILTIN_INTERPOLATION_H_
-#define SRC_TINT_BUILTIN_INTERPOLATION_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_H_
 
-#include "src/tint/builtin/interpolation_sampling.h"
-#include "src/tint/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
 
 namespace tint::builtin {
 
@@ -30,4 +30,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_INTERPOLATION_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_H_
diff --git a/src/tint/builtin/interpolation_sampling.cc b/src/tint/lang/base/builtin/interpolation_sampling.cc
similarity index 93%
rename from src/tint/builtin/interpolation_sampling.cc
rename to src/tint/lang/base/builtin/interpolation_sampling.cc
index 30d925a..581e34e 100644
--- a/src/tint/builtin/interpolation_sampling.cc
+++ b/src/tint/lang/base/builtin/interpolation_sampling.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/interpolation_sampling.cc.tmpl
+//   src/tint/lang/base/builtin/interpolation_sampling.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/interpolation_sampling.cc.tmpl b/src/tint/lang/base/builtin/interpolation_sampling.cc.tmpl
similarity index 90%
rename from src/tint/builtin/interpolation_sampling.cc.tmpl
rename to src/tint/lang/base/builtin/interpolation_sampling.cc.tmpl
index 3a4c504..e8a8d30 100644
--- a/src/tint/builtin/interpolation_sampling.cc.tmpl
+++ b/src/tint/lang/base/builtin/interpolation_sampling.cc.tmpl
@@ -10,7 +10,7 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#include "src/tint/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/interpolation_sampling.h b/src/tint/lang/base/builtin/interpolation_sampling.h
similarity index 87%
rename from src/tint/builtin/interpolation_sampling.h
rename to src/tint/lang/base/builtin/interpolation_sampling.h
index c494949..3cf01c2 100644
--- a/src/tint/builtin/interpolation_sampling.h
+++ b/src/tint/lang/base/builtin/interpolation_sampling.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/interpolation_sampling.h.tmpl
+//   src/tint/lang/base/builtin/interpolation_sampling.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_INTERPOLATION_SAMPLING_H_
-#define SRC_TINT_BUILTIN_INTERPOLATION_SAMPLING_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_SAMPLING_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_SAMPLING_H_
 
 #include <string>
 
@@ -56,4 +56,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_INTERPOLATION_SAMPLING_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_SAMPLING_H_
diff --git a/src/tint/builtin/interpolation_sampling.h.tmpl b/src/tint/lang/base/builtin/interpolation_sampling.h.tmpl
similarity index 78%
rename from src/tint/builtin/interpolation_sampling.h.tmpl
rename to src/tint/lang/base/builtin/interpolation_sampling.h.tmpl
index af726c2..9e602fd 100644
--- a/src/tint/builtin/interpolation_sampling.h.tmpl
+++ b/src/tint/lang/base/builtin/interpolation_sampling.h.tmpl
@@ -10,8 +10,8 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#ifndef SRC_TINT_BUILTIN_INTERPOLATION_SAMPLING_H_
-#define SRC_TINT_BUILTIN_INTERPOLATION_SAMPLING_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_SAMPLING_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_SAMPLING_H_
 
 #include <string>
 
@@ -24,4 +24,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_INTERPOLATION_SAMPLING_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_SAMPLING_H_
diff --git a/src/tint/builtin/interpolation_sampling_bench.cc b/src/tint/lang/base/builtin/interpolation_sampling_bench.cc
similarity index 92%
rename from src/tint/builtin/interpolation_sampling_bench.cc
rename to src/tint/lang/base/builtin/interpolation_sampling_bench.cc
index deb4de0..6aee86f 100644
--- a/src/tint/builtin/interpolation_sampling_bench.cc
+++ b/src/tint/lang/base/builtin/interpolation_sampling_bench.cc
@@ -15,7 +15,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/interpolation_sampling_bench.cc.tmpl
+//   src/tint/lang/base/builtin/interpolation_sampling_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
@@ -23,7 +23,7 @@
 #include <array>
 
 #include "benchmark/benchmark.h"
-#include "src/tint/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
 
 namespace tint::builtin {
 namespace {
diff --git a/src/tint/builtin/interpolation_sampling_bench.cc.tmpl b/src/tint/lang/base/builtin/interpolation_sampling_bench.cc.tmpl
similarity index 91%
rename from src/tint/builtin/interpolation_sampling_bench.cc.tmpl
rename to src/tint/lang/base/builtin/interpolation_sampling_bench.cc.tmpl
index edeef60..ea5470d 100644
--- a/src/tint/builtin/interpolation_sampling_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/interpolation_sampling_bench.cc.tmpl
@@ -13,7 +13,7 @@
 #include <array>
 
 #include "benchmark/benchmark.h"
-#include "src/tint/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
 
 namespace tint::builtin {
 namespace {
diff --git a/src/tint/builtin/interpolation_sampling_test.cc b/src/tint/lang/base/builtin/interpolation_sampling_test.cc
similarity index 95%
rename from src/tint/builtin/interpolation_sampling_test.cc
rename to src/tint/lang/base/builtin/interpolation_sampling_test.cc
index ba0a1b5..1b0042b 100644
--- a/src/tint/builtin/interpolation_sampling_test.cc
+++ b/src/tint/lang/base/builtin/interpolation_sampling_test.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/interpolation_sampling_test.cc.tmpl
+//   src/tint/lang/base/builtin/interpolation_sampling_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
 
 #include <gtest/gtest.h>
 #include <string>
diff --git a/src/tint/builtin/interpolation_sampling_test.cc.tmpl b/src/tint/lang/base/builtin/interpolation_sampling_test.cc.tmpl
similarity index 92%
rename from src/tint/builtin/interpolation_sampling_test.cc.tmpl
rename to src/tint/lang/base/builtin/interpolation_sampling_test.cc.tmpl
index 00a0d5d..1e4b513 100644
--- a/src/tint/builtin/interpolation_sampling_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/interpolation_sampling_test.cc.tmpl
@@ -10,7 +10,7 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#include "src/tint/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
 
 #include <gtest/gtest.h>
 #include <string>
diff --git a/src/tint/builtin/interpolation_type.cc b/src/tint/lang/base/builtin/interpolation_type.cc
similarity index 93%
rename from src/tint/builtin/interpolation_type.cc
rename to src/tint/lang/base/builtin/interpolation_type.cc
index 349d3e9..9fb1f0f 100644
--- a/src/tint/builtin/interpolation_type.cc
+++ b/src/tint/lang/base/builtin/interpolation_type.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/interpolation_type.cc.tmpl
+//   src/tint/lang/base/builtin/interpolation_type.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/interpolation_type.cc.tmpl b/src/tint/lang/base/builtin/interpolation_type.cc.tmpl
similarity index 91%
rename from src/tint/builtin/interpolation_type.cc.tmpl
rename to src/tint/lang/base/builtin/interpolation_type.cc.tmpl
index 53d855e..973ae35 100644
--- a/src/tint/builtin/interpolation_type.cc.tmpl
+++ b/src/tint/lang/base/builtin/interpolation_type.cc.tmpl
@@ -10,7 +10,7 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#include "src/tint/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
 
 #include <string>
 
diff --git a/src/tint/builtin/interpolation_type.h b/src/tint/lang/base/builtin/interpolation_type.h
similarity index 87%
rename from src/tint/builtin/interpolation_type.h
rename to src/tint/lang/base/builtin/interpolation_type.h
index a9ba2e8..05fae9b 100644
--- a/src/tint/builtin/interpolation_type.h
+++ b/src/tint/lang/base/builtin/interpolation_type.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/interpolation_type.h.tmpl
+//   src/tint/lang/base/builtin/interpolation_type.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_INTERPOLATION_TYPE_H_
-#define SRC_TINT_BUILTIN_INTERPOLATION_TYPE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_TYPE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_TYPE_H_
 
 #include <string>
 
@@ -55,4 +55,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_INTERPOLATION_TYPE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_TYPE_H_
diff --git a/src/tint/builtin/interpolation_type.h.tmpl b/src/tint/lang/base/builtin/interpolation_type.h.tmpl
similarity index 79%
rename from src/tint/builtin/interpolation_type.h.tmpl
rename to src/tint/lang/base/builtin/interpolation_type.h.tmpl
index 1f6e062..8acf5ec 100644
--- a/src/tint/builtin/interpolation_type.h.tmpl
+++ b/src/tint/lang/base/builtin/interpolation_type.h.tmpl
@@ -10,8 +10,8 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#ifndef SRC_TINT_BUILTIN_INTERPOLATION_TYPE_H_
-#define SRC_TINT_BUILTIN_INTERPOLATION_TYPE_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_TYPE_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_TYPE_H_
 
 #include <string>
 
@@ -24,4 +24,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_INTERPOLATION_TYPE_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_INTERPOLATION_TYPE_H_
diff --git a/src/tint/builtin/interpolation_type_bench.cc b/src/tint/lang/base/builtin/interpolation_type_bench.cc
similarity index 92%
rename from src/tint/builtin/interpolation_type_bench.cc
rename to src/tint/lang/base/builtin/interpolation_type_bench.cc
index 70b5961..fa6c9b9 100644
--- a/src/tint/builtin/interpolation_type_bench.cc
+++ b/src/tint/lang/base/builtin/interpolation_type_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/interpolation_type_bench.cc.tmpl
+//   src/tint/lang/base/builtin/interpolation_type_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/interpolation_type_bench.cc.tmpl b/src/tint/lang/base/builtin/interpolation_type_bench.cc.tmpl
similarity index 91%
rename from src/tint/builtin/interpolation_type_bench.cc.tmpl
rename to src/tint/lang/base/builtin/interpolation_type_bench.cc.tmpl
index e536276..eebc964 100644
--- a/src/tint/builtin/interpolation_type_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/interpolation_type_bench.cc.tmpl
@@ -10,7 +10,7 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#include "src/tint/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/interpolation_type_test.cc b/src/tint/lang/base/builtin/interpolation_type_test.cc
similarity index 95%
rename from src/tint/builtin/interpolation_type_test.cc
rename to src/tint/lang/base/builtin/interpolation_type_test.cc
index 3f36b6d..9924938 100644
--- a/src/tint/builtin/interpolation_type_test.cc
+++ b/src/tint/lang/base/builtin/interpolation_type_test.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/interpolation_type_test.cc.tmpl
+//   src/tint/lang/base/builtin/interpolation_type_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
 
 #include <gtest/gtest.h>
 #include <string>
diff --git a/src/tint/builtin/interpolation_type_test.cc.tmpl b/src/tint/lang/base/builtin/interpolation_type_test.cc.tmpl
similarity index 92%
rename from src/tint/builtin/interpolation_type_test.cc.tmpl
rename to src/tint/lang/base/builtin/interpolation_type_test.cc.tmpl
index cc2c84d..3bc1eb4 100644
--- a/src/tint/builtin/interpolation_type_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/interpolation_type_test.cc.tmpl
@@ -10,7 +10,7 @@
 
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 
-#include "src/tint/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
 
 #include <gtest/gtest.h>
 #include <string>
diff --git a/src/tint/builtin/number.cc b/src/tint/lang/base/builtin/number.cc
similarity index 99%
rename from src/tint/builtin/number.cc
rename to src/tint/lang/base/builtin/number.cc
index a40100d..eca2541 100644
--- a/src/tint/builtin/number.cc
+++ b/src/tint/lang/base/builtin/number.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/number.h"
+#include "src/tint/lang/base/builtin/number.h"
 
 #include <algorithm>
 #include <cmath>
diff --git a/src/tint/builtin/number.h b/src/tint/lang/base/builtin/number.h
similarity index 99%
rename from src/tint/builtin/number.h
rename to src/tint/lang/base/builtin/number.h
index 9529693..6563baa 100644
--- a/src/tint/builtin/number.h
+++ b/src/tint/lang/base/builtin/number.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_BUILTIN_NUMBER_H_
-#define SRC_TINT_BUILTIN_NUMBER_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_NUMBER_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_NUMBER_H_
 
 #include <stdint.h>
 #include <cmath>
@@ -688,4 +688,4 @@
 
 }  // namespace std
 
-#endif  // SRC_TINT_BUILTIN_NUMBER_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_NUMBER_H_
diff --git a/src/tint/builtin/number_test.cc b/src/tint/lang/base/builtin/number_test.cc
similarity index 100%
rename from src/tint/builtin/number_test.cc
rename to src/tint/lang/base/builtin/number_test.cc
diff --git a/src/tint/builtin/texel_format.cc b/src/tint/lang/base/builtin/texel_format.cc
similarity index 97%
rename from src/tint/builtin/texel_format.cc
rename to src/tint/lang/base/builtin/texel_format.cc
index 4e1b8b7..0cb2a5f 100644
--- a/src/tint/builtin/texel_format.cc
+++ b/src/tint/lang/base/builtin/texel_format.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/texel_format.cc.tmpl
+//   src/tint/lang/base/builtin/texel_format.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/texel_format.cc.tmpl b/src/tint/lang/base/builtin/texel_format.cc.tmpl
similarity index 91%
rename from src/tint/builtin/texel_format.cc.tmpl
rename to src/tint/lang/base/builtin/texel_format.cc.tmpl
index 0f6a845..7292e85 100644
--- a/src/tint/builtin/texel_format.cc.tmpl
+++ b/src/tint/lang/base/builtin/texel_format.cc.tmpl
@@ -11,7 +11,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "texel_format") -}}
 
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 
 namespace tint::builtin {
 
diff --git a/src/tint/builtin/texel_format.h b/src/tint/lang/base/builtin/texel_format.h
similarity index 90%
rename from src/tint/builtin/texel_format.h
rename to src/tint/lang/base/builtin/texel_format.h
index e72dae7..2583596 100644
--- a/src/tint/builtin/texel_format.h
+++ b/src/tint/lang/base/builtin/texel_format.h
@@ -15,13 +15,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/texel_format.h.tmpl
+//   src/tint/lang/base/builtin/texel_format.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
-#define SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_TEXEL_FORMAT_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_TEXEL_FORMAT_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -67,4 +67,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_TEXEL_FORMAT_H_
diff --git a/src/tint/builtin/texel_format.h.tmpl b/src/tint/lang/base/builtin/texel_format.h.tmpl
similarity index 80%
rename from src/tint/builtin/texel_format.h.tmpl
rename to src/tint/lang/base/builtin/texel_format.h.tmpl
index 9d36344..2d1a666 100644
--- a/src/tint/builtin/texel_format.h.tmpl
+++ b/src/tint/lang/base/builtin/texel_format.h.tmpl
@@ -11,8 +11,8 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "texel_format") -}}
 
-#ifndef SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
-#define SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
+#ifndef SRC_TINT_LANG_BASE_BUILTIN_TEXEL_FORMAT_H_
+#define SRC_TINT_LANG_BASE_BUILTIN_TEXEL_FORMAT_H_
 
 #include "src/tint/core/string_stream.h"
 
@@ -23,4 +23,4 @@
 
 }  // namespace tint::builtin
 
-#endif  // SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
+#endif  // SRC_TINT_LANG_BASE_BUILTIN_TEXEL_FORMAT_H_
diff --git a/src/tint/builtin/texel_format_bench.cc b/src/tint/lang/base/builtin/texel_format_bench.cc
similarity index 96%
rename from src/tint/builtin/texel_format_bench.cc
rename to src/tint/lang/base/builtin/texel_format_bench.cc
index c265452..e298220 100644
--- a/src/tint/builtin/texel_format_bench.cc
+++ b/src/tint/lang/base/builtin/texel_format_bench.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/texel_format_bench.cc.tmpl
+//   src/tint/lang/base/builtin/texel_format_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/texel_format_bench.cc.tmpl b/src/tint/lang/base/builtin/texel_format_bench.cc.tmpl
similarity index 92%
rename from src/tint/builtin/texel_format_bench.cc.tmpl
rename to src/tint/lang/base/builtin/texel_format_bench.cc.tmpl
index 39754df..a39b79f 100644
--- a/src/tint/builtin/texel_format_bench.cc.tmpl
+++ b/src/tint/lang/base/builtin/texel_format_bench.cc.tmpl
@@ -11,7 +11,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "texel_format") -}}
 
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 
 #include <array>
 
diff --git a/src/tint/builtin/texel_format_test.cc b/src/tint/lang/base/builtin/texel_format_test.cc
similarity index 97%
rename from src/tint/builtin/texel_format_test.cc
rename to src/tint/lang/base/builtin/texel_format_test.cc
index 537a105..ceacc33 100644
--- a/src/tint/builtin/texel_format_test.cc
+++ b/src/tint/lang/base/builtin/texel_format_test.cc
@@ -15,12 +15,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/builtin/texel_format_test.cc.tmpl
+//   src/tint/lang/base/builtin/texel_format_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/builtin/texel_format_test.cc.tmpl b/src/tint/lang/base/builtin/texel_format_test.cc.tmpl
similarity index 92%
rename from src/tint/builtin/texel_format_test.cc.tmpl
rename to src/tint/lang/base/builtin/texel_format_test.cc.tmpl
index 2622315..eedc1be 100644
--- a/src/tint/builtin/texel_format_test.cc.tmpl
+++ b/src/tint/lang/base/builtin/texel_format_test.cc.tmpl
@@ -11,7 +11,7 @@
 {{- Import "src/tint/core/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "texel_format") -}}
 
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 
 #include <gtest/gtest.h>
 
diff --git a/src/tint/lang/glsl/ast_writer/generator.h b/src/tint/lang/glsl/ast_writer/generator.h
index 06e4e18..7b89ccb 100644
--- a/src/tint/lang/glsl/ast_writer/generator.h
+++ b/src/tint/lang/glsl/ast_writer/generator.h
@@ -21,7 +21,7 @@
 #include <utility>
 #include <vector>
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 #include "src/tint/lang/glsl/ast_writer/version.h"
 #include "src/tint/lang/wgsl/ast/pipeline_stage.h"
 #include "src/tint/lang/wgsl/sem/binding_point.h"
diff --git a/src/tint/lang/glsl/ast_writer/generator_impl.h b/src/tint/lang/glsl/ast_writer/generator_impl.h
index 0e53097..87902ca 100644
--- a/src/tint/lang/glsl/ast_writer/generator_impl.h
+++ b/src/tint/lang/glsl/ast_writer/generator_impl.h
@@ -21,9 +21,9 @@
 #include <unordered_set>
 #include <utility>
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/hash.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/glsl/ast_writer/generator.h"
 #include "src/tint/lang/glsl/ast_writer/version.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
diff --git a/src/tint/lang/glsl/ast_writer/generator_impl_storage_buffer_test.cc b/src/tint/lang/glsl/ast_writer/generator_impl_storage_buffer_test.cc
index 2851e12..fdee86c 100644
--- a/src/tint/lang/glsl/ast_writer/generator_impl_storage_buffer_test.cc
+++ b/src/tint/lang/glsl/ast_writer/generator_impl_storage_buffer_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/number.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/lang/glsl/ast_writer/test_helper.h"
 
 #include "gmock/gmock.h"
diff --git a/src/tint/lang/hlsl/ast_writer/generator_impl.h b/src/tint/lang/hlsl/ast_writer/generator_impl.h
index b2ec78f..e0e40ff 100644
--- a/src/tint/lang/hlsl/ast_writer/generator_impl.h
+++ b/src/tint/lang/hlsl/ast_writer/generator_impl.h
@@ -21,8 +21,8 @@
 #include <unordered_set>
 #include <utility>
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/hash.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/hlsl/ast_writer/generator.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/bitcast_expression.h"
diff --git a/src/tint/lang/msl/ast_writer/generator_impl.h b/src/tint/lang/msl/ast_writer/generator_impl.h
index 093bc06..036fc4f 100644
--- a/src/tint/lang/msl/ast_writer/generator_impl.h
+++ b/src/tint/lang/msl/ast_writer/generator_impl.h
@@ -21,8 +21,8 @@
 #include <unordered_set>
 #include <vector>
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/msl/ast_writer/generator.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/binary_expression.h"
diff --git a/src/tint/lang/msl/ast_writer/generator_support.h b/src/tint/lang/msl/ast_writer/generator_support.h
index d7eb1b5..c6efe8d 100644
--- a/src/tint/lang/msl/ast_writer/generator_support.h
+++ b/src/tint/lang/msl/ast_writer/generator_support.h
@@ -18,9 +18,9 @@
 #include <cstdint>
 #include <string>
 
-#include "src/tint/builtin/builtin_value.h"
-#include "src/tint/builtin/interpolation.h"
 #include "src/tint/core/diagnostic/diagnostic.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/interpolation.h"
 #include "src/tint/type/type.h"
 
 namespace tint::writer::msl {
diff --git a/src/tint/lang/spirv/reader/attributes.h b/src/tint/lang/spirv/reader/attributes.h
index f155d27..9ab565f 100644
--- a/src/tint/lang/spirv/reader/attributes.h
+++ b/src/tint/lang/spirv/reader/attributes.h
@@ -15,9 +15,9 @@
 #ifndef SRC_TINT_LANG_SPIRV_READER_ATTRIBUTES_H_
 #define SRC_TINT_LANG_SPIRV_READER_ATTRIBUTES_H_
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/enum_set.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/attribute.h"
 #include "src/tint/program_builder.h"
 
diff --git a/src/tint/lang/spirv/reader/enum_converter.h b/src/tint/lang/spirv/reader/enum_converter.h
index 800f6c8..6195cf9 100644
--- a/src/tint/lang/spirv/reader/enum_converter.h
+++ b/src/tint/lang/spirv/reader/enum_converter.h
@@ -17,8 +17,8 @@
 
 #include "spirv/unified1/spirv.h"
 #include "spirv/unified1/spirv.hpp11"
-#include "src/tint/builtin/address_space.h"
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/spirv/reader/fail_stream.h"
 #include "src/tint/lang/wgsl/ast/pipeline_stage.h"
 #include "src/tint/type/storage_texture.h"
diff --git a/src/tint/lang/spirv/reader/function.cc b/src/tint/lang/spirv/reader/function.cc
index 821c86b..7d596fb 100644
--- a/src/tint/lang/spirv/reader/function.cc
+++ b/src/tint/lang/spirv/reader/function.cc
@@ -17,10 +17,10 @@
 #include <algorithm>
 #include <array>
 
-#include "src/tint/builtin/builtin_value.h"
-#include "src/tint/builtin/function.h"
 #include "src/tint/core/hashmap.h"
 #include "src/tint/core/hashset.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/function.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/bitcast_expression.h"
 #include "src/tint/lang/wgsl/ast/break_statement.h"
diff --git a/src/tint/lang/spirv/reader/namer.cc b/src/tint/lang/spirv/reader/namer.cc
index 15aa299..bc0bfe4 100644
--- a/src/tint/lang/spirv/reader/namer.cc
+++ b/src/tint/lang/spirv/reader/namer.cc
@@ -17,9 +17,9 @@
 #include <algorithm>
 #include <unordered_set>
 
-#include "src/tint/builtin/function.h"
 #include "src/tint/core/string_stream.h"
 #include "src/tint/debug.h"
+#include "src/tint/lang/base/builtin/function.h"
 
 namespace tint::reader::spirv {
 
diff --git a/src/tint/lang/spirv/reader/namer_test.cc b/src/tint/lang/spirv/reader/namer_test.cc
index 3af53a65..2873dd9 100644
--- a/src/tint/lang/spirv/reader/namer_test.cc
+++ b/src/tint/lang/spirv/reader/namer_test.cc
@@ -15,8 +15,8 @@
 #include "src/tint/lang/spirv/reader/namer.h"
 
 #include "gmock/gmock.h"
-#include "src/tint/builtin/function.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/function.h"
 
 namespace tint::reader::spirv {
 namespace {
diff --git a/src/tint/lang/spirv/reader/parser_type.h b/src/tint/lang/spirv/reader/parser_type.h
index 7e92fc9..a999739 100644
--- a/src/tint/lang/spirv/reader/parser_type.h
+++ b/src/tint/lang/spirv/reader/parser_type.h
@@ -19,11 +19,11 @@
 #include <string>
 #include <vector>
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/address_space.h"
-#include "src/tint/builtin/texel_format.h"
 #include "src/tint/core/block_allocator.h"
 #include "src/tint/core/castable.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/lang/wgsl/ast/type.h"
 #include "src/tint/symbol.h"
 #include "src/tint/type/sampler_kind.h"
diff --git a/src/tint/lang/wgsl/ast/alias_test.cc b/src/tint/lang/wgsl/ast/alias_test.cc
index 04c16b8..d42b6d8 100644
--- a/src/tint/lang/wgsl/ast/alias_test.cc
+++ b/src/tint/lang/wgsl/ast/alias_test.cc
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 #include "src/tint/lang/wgsl/ast/alias.h"
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 #include "src/tint/lang/wgsl/ast/test_helper.h"
 
 namespace tint::ast {
diff --git a/src/tint/lang/wgsl/ast/builtin_attribute_test.cc b/src/tint/lang/wgsl/ast/builtin_attribute_test.cc
index 98254eb..1748f90 100644
--- a/src/tint/lang/wgsl/ast/builtin_attribute_test.cc
+++ b/src/tint/lang/wgsl/ast/builtin_attribute_test.cc
@@ -14,7 +14,7 @@
 
 #include "gtest/gtest-spi.h"
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/test_helper.h"
 
 namespace tint::ast {
diff --git a/src/tint/lang/wgsl/ast/builtin_texture_helper_test.cc b/src/tint/lang/wgsl/ast/builtin_texture_helper_test.cc
index 5219e73..71f48f3 100644
--- a/src/tint/lang/wgsl/ast/builtin_texture_helper_test.cc
+++ b/src/tint/lang/wgsl/ast/builtin_texture_helper_test.cc
@@ -14,7 +14,7 @@
 
 #include "src/tint/lang/wgsl/ast/builtin_texture_helper_test.h"
 
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/type/depth_texture.h"
 #include "src/tint/type/multisampled_texture.h"
 #include "src/tint/type/sampled_texture.h"
diff --git a/src/tint/lang/wgsl/ast/builtin_texture_helper_test.h b/src/tint/lang/wgsl/ast/builtin_texture_helper_test.h
index a928835..e8c49c5 100644
--- a/src/tint/lang/wgsl/ast/builtin_texture_helper_test.h
+++ b/src/tint/lang/wgsl/ast/builtin_texture_helper_test.h
@@ -17,8 +17,8 @@
 
 #include <vector>
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/program_builder.h"
 #include "src/tint/type/storage_texture.h"
 #include "src/tint/type/texture_dimension.h"
diff --git a/src/tint/lang/wgsl/ast/diagnostic_control.cc b/src/tint/lang/wgsl/ast/diagnostic_control.cc
index fdae705..afbe5e9 100644
--- a/src/tint/lang/wgsl/ast/diagnostic_control.cc
+++ b/src/tint/lang/wgsl/ast/diagnostic_control.cc
@@ -16,7 +16,7 @@
 
 #include <string>
 
-#include "src/tint/builtin/diagnostic_severity.h"
+#include "src/tint/lang/base/builtin/diagnostic_severity.h"
 #include "src/tint/lang/wgsl/ast/identifier.h"
 #include "src/tint/lang/wgsl/ast/templated_identifier.h"
 
diff --git a/src/tint/lang/wgsl/ast/diagnostic_control.h b/src/tint/lang/wgsl/ast/diagnostic_control.h
index 1f4b73a..8bba2a1 100644
--- a/src/tint/lang/wgsl/ast/diagnostic_control.h
+++ b/src/tint/lang/wgsl/ast/diagnostic_control.h
@@ -18,8 +18,8 @@
 #include <string>
 #include <unordered_map>
 
-#include "src/tint/builtin/diagnostic_severity.h"
 #include "src/tint/core/diagnostic/diagnostic.h"
+#include "src/tint/lang/base/builtin/diagnostic_severity.h"
 
 // Forward declarations
 namespace tint::ast {
diff --git a/src/tint/lang/wgsl/ast/diagnostic_control_test.cc b/src/tint/lang/wgsl/ast/diagnostic_control_test.cc
index 74e855d..bf73e4d 100644
--- a/src/tint/lang/wgsl/ast/diagnostic_control_test.cc
+++ b/src/tint/lang/wgsl/ast/diagnostic_control_test.cc
@@ -15,7 +15,7 @@
 #include <string>
 
 #include "gtest/gtest-spi.h"
-#include "src/tint/builtin/diagnostic_severity.h"
+#include "src/tint/lang/base/builtin/diagnostic_severity.h"
 #include "src/tint/lang/wgsl/ast/diagnostic_control.h"
 #include "src/tint/lang/wgsl/ast/test_helper.h"
 
diff --git a/src/tint/lang/wgsl/ast/extension.h b/src/tint/lang/wgsl/ast/extension.h
index ba651b2..6505c05 100644
--- a/src/tint/lang/wgsl/ast/extension.h
+++ b/src/tint/lang/wgsl/ast/extension.h
@@ -15,7 +15,7 @@
 #ifndef SRC_TINT_LANG_WGSL_AST_EXTENSION_H_
 #define SRC_TINT_LANG_WGSL_AST_EXTENSION_H_
 
-#include "src/tint/builtin/extension.h"
+#include "src/tint/lang/base/builtin/extension.h"
 #include "src/tint/lang/wgsl/ast/node.h"
 
 namespace tint::ast {
diff --git a/src/tint/lang/wgsl/ast/transform/binding_remapper.h b/src/tint/lang/wgsl/ast/transform/binding_remapper.h
index 2c03601..b0d52c7 100644
--- a/src/tint/lang/wgsl/ast/transform/binding_remapper.h
+++ b/src/tint/lang/wgsl/ast/transform/binding_remapper.h
@@ -17,7 +17,7 @@
 
 #include <unordered_map>
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
 #include "src/tint/lang/wgsl/sem/binding_point.h"
 
diff --git a/src/tint/lang/wgsl/ast/transform/canonicalize_entry_point_io.cc b/src/tint/lang/wgsl/ast/transform/canonicalize_entry_point_io.cc
index 3666c62..1148d8b 100644
--- a/src/tint/lang/wgsl/ast/transform/canonicalize_entry_point_io.cc
+++ b/src/tint/lang/wgsl/ast/transform/canonicalize_entry_point_io.cc
@@ -20,7 +20,7 @@
 #include <utility>
 #include <vector>
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/disable_validation_attribute.h"
 #include "src/tint/lang/wgsl/ast/transform/unshadow.h"
 #include "src/tint/lang/wgsl/sem/function.h"
diff --git a/src/tint/lang/wgsl/ast/transform/clamp_frag_depth.cc b/src/tint/lang/wgsl/ast/transform/clamp_frag_depth.cc
index 519d3ff..dedc3d4 100644
--- a/src/tint/lang/wgsl/ast/transform/clamp_frag_depth.cc
+++ b/src/tint/lang/wgsl/ast/transform/clamp_frag_depth.cc
@@ -16,9 +16,9 @@
 
 #include <utility>
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/scoped_assignment.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/attribute.h"
 #include "src/tint/lang/wgsl/ast/builtin_attribute.h"
 #include "src/tint/lang/wgsl/ast/function.h"
diff --git a/src/tint/lang/wgsl/ast/transform/first_index_offset.cc b/src/tint/lang/wgsl/ast/transform/first_index_offset.cc
index e2fd2c1..a0354bf 100644
--- a/src/tint/lang/wgsl/ast/transform/first_index_offset.cc
+++ b/src/tint/lang/wgsl/ast/transform/first_index_offset.cc
@@ -18,7 +18,7 @@
 #include <unordered_map>
 #include <utility>
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/sem/function.h"
 #include "src/tint/lang/wgsl/sem/member_accessor_expression.h"
 #include "src/tint/lang/wgsl/sem/struct.h"
diff --git a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h
index 3b89288..d684128 100644
--- a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h
+++ b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h
@@ -18,7 +18,7 @@
 #include <unordered_map>
 #include <utility>
 
-#include "src/tint/builtin/function.h"
+#include "src/tint/lang/base/builtin/function.h"
 #include "src/tint/lang/wgsl/ast/struct_member.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
 #include "src/tint/lang/wgsl/sem/binding_point.h"
diff --git a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.cc b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.cc
index 42b93e7..5ea00be 100644
--- a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.cc
+++ b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.cc
@@ -19,8 +19,8 @@
 #include <unordered_set>
 #include <utility>
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/hash.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/transform/canonicalize_entry_point_io.h"
 #include "src/tint/lang/wgsl/sem/function.h"
 #include "src/tint/program_builder.h"
diff --git a/src/tint/lang/wgsl/ast/transform/packed_vec3.cc b/src/tint/lang/wgsl/ast/transform/packed_vec3.cc
index 49465f1..8d27b7e 100644
--- a/src/tint/lang/wgsl/ast/transform/packed_vec3.cc
+++ b/src/tint/lang/wgsl/ast/transform/packed_vec3.cc
@@ -18,10 +18,10 @@
 #include <string>
 #include <utility>
 
-#include "src/tint/builtin/builtin.h"
 #include "src/tint/core/hashmap.h"
 #include "src/tint/core/hashset.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/sem/array_count.h"
 #include "src/tint/lang/wgsl/sem/index_accessor_expression.h"
diff --git a/src/tint/lang/wgsl/ast/transform/renamer_test.cc b/src/tint/lang/wgsl/ast/transform/renamer_test.cc
index 5211839..fbccbdd 100644
--- a/src/tint/lang/wgsl/ast/transform/renamer_test.cc
+++ b/src/tint/lang/wgsl/ast/transform/renamer_test.cc
@@ -19,9 +19,9 @@
 #include <vector>
 
 #include "gmock/gmock.h"
-#include "src/tint/builtin/builtin.h"
-#include "src/tint/builtin/texel_format.h"
 #include "src/tint/core/string.h"
+#include "src/tint/lang/base/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/lang/wgsl/ast/transform/test_helper.h"
 
 namespace tint::ast::transform {
diff --git a/src/tint/lang/wgsl/ast/transform/spirv_atomic.h b/src/tint/lang/wgsl/ast/transform/spirv_atomic.h
index 6fbcd66..7de4b42 100644
--- a/src/tint/lang/wgsl/ast/transform/spirv_atomic.h
+++ b/src/tint/lang/wgsl/ast/transform/spirv_atomic.h
@@ -17,7 +17,7 @@
 
 #include <string>
 
-#include "src/tint/builtin/function.h"
+#include "src/tint/lang/base/builtin/function.h"
 #include "src/tint/lang/wgsl/ast/internal_attribute.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
 
diff --git a/src/tint/lang/wgsl/ast/transform/substitute_override.cc b/src/tint/lang/wgsl/ast/transform/substitute_override.cc
index 33068f1..fbe5ceb 100644
--- a/src/tint/lang/wgsl/ast/transform/substitute_override.cc
+++ b/src/tint/lang/wgsl/ast/transform/substitute_override.cc
@@ -17,7 +17,7 @@
 #include <functional>
 #include <utility>
 
-#include "src/tint/builtin/function.h"
+#include "src/tint/lang/base/builtin/function.h"
 #include "src/tint/lang/wgsl/sem/builtin.h"
 #include "src/tint/lang/wgsl/sem/index_accessor_expression.h"
 #include "src/tint/lang/wgsl/sem/variable.h"
diff --git a/src/tint/lang/wgsl/ast/transform/transform.cc b/src/tint/lang/wgsl/ast/transform/transform.cc
index 798bd83..02b5ea8 100644
--- a/src/tint/lang/wgsl/ast/transform/transform.cc
+++ b/src/tint/lang/wgsl/ast/transform/transform.cc
@@ -17,7 +17,7 @@
 #include <algorithm>
 #include <string>
 
-#include "src/tint/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 #include "src/tint/lang/wgsl/sem/block_statement.h"
 #include "src/tint/lang/wgsl/sem/for_loop_statement.h"
 #include "src/tint/lang/wgsl/sem/variable.h"
diff --git a/src/tint/lang/wgsl/ast/transform/vertex_pulling.cc b/src/tint/lang/wgsl/ast/transform/vertex_pulling.cc
index 7b6129a..f7e0d3b 100644
--- a/src/tint/lang/wgsl/ast/transform/vertex_pulling.cc
+++ b/src/tint/lang/wgsl/ast/transform/vertex_pulling.cc
@@ -17,11 +17,11 @@
 #include <algorithm>
 #include <utility>
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/compiler_macros.h"
 #include "src/tint/core/map.h"
 #include "src/tint/core/math.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/bitcast_expression.h"
 #include "src/tint/lang/wgsl/ast/variable_decl_statement.h"
diff --git a/src/tint/lang/wgsl/ast/transform/zero_init_workgroup_memory.cc b/src/tint/lang/wgsl/ast/transform/zero_init_workgroup_memory.cc
index 17d6770..ebb9abb 100644
--- a/src/tint/lang/wgsl/ast/transform/zero_init_workgroup_memory.cc
+++ b/src/tint/lang/wgsl/ast/transform/zero_init_workgroup_memory.cc
@@ -20,9 +20,9 @@
 #include <utility>
 #include <vector>
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/map.h"
 #include "src/tint/core/unique_vector.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/workgroup_attribute.h"
 #include "src/tint/lang/wgsl/sem/function.h"
 #include "src/tint/lang/wgsl/sem/variable.h"
diff --git a/src/tint/lang/wgsl/ast/variable.h b/src/tint/lang/wgsl/ast/variable.h
index 84393c52..f91125a 100644
--- a/src/tint/lang/wgsl/ast/variable.h
+++ b/src/tint/lang/wgsl/ast/variable.h
@@ -18,8 +18,8 @@
 #include <utility>
 #include <vector>
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 #include "src/tint/lang/wgsl/ast/attribute.h"
 #include "src/tint/lang/wgsl/ast/binding_attribute.h"
 #include "src/tint/lang/wgsl/ast/expression.h"
diff --git a/src/tint/lang/wgsl/ast/variable_test.cc b/src/tint/lang/wgsl/ast/variable_test.cc
index 08ca16c..b4203df 100644
--- a/src/tint/lang/wgsl/ast/variable_test.cc
+++ b/src/tint/lang/wgsl/ast/variable_test.cc
@@ -14,7 +14,7 @@
 
 #include "gtest/gtest-spi.h"
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/id_attribute.h"
 #include "src/tint/lang/wgsl/ast/test_helper.h"
 
diff --git a/src/tint/lang/wgsl/ast_writer/generator_impl_function_test.cc b/src/tint/lang/wgsl/ast_writer/generator_impl_function_test.cc
index 200e60c..3484ecf 100644
--- a/src/tint/lang/wgsl/ast_writer/generator_impl_function_test.cc
+++ b/src/tint/lang/wgsl/ast_writer/generator_impl_function_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/stage_attribute.h"
 #include "src/tint/lang/wgsl/ast/variable_decl_statement.h"
 #include "src/tint/lang/wgsl/ast/workgroup_attribute.h"
diff --git a/src/tint/lang/wgsl/ast_writer/generator_impl_type_test.cc b/src/tint/lang/wgsl/ast_writer/generator_impl_type_test.cc
index ff9ff9d..716e253 100644
--- a/src/tint/lang/wgsl/ast_writer/generator_impl_type_test.cc
+++ b/src/tint/lang/wgsl/ast_writer/generator_impl_type_test.cc
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast_writer/test_helper.h"
 #include "src/tint/type/depth_texture.h"
 #include "src/tint/type/multisampled_texture.h"
diff --git a/src/tint/lang/wgsl/reader/lexer.cc b/src/tint/lang/wgsl/reader/lexer.cc
index 721f35c..f8e0ee5 100644
--- a/src/tint/lang/wgsl/reader/lexer.cc
+++ b/src/tint/lang/wgsl/reader/lexer.cc
@@ -25,10 +25,10 @@
 #include <type_traits>
 #include <utility>
 
-#include "src/tint/builtin/number.h"
 #include "src/tint/core/parse_num.h"
 #include "src/tint/core/unicode.h"
 #include "src/tint/debug.h"
+#include "src/tint/lang/base/builtin/number.h"
 
 namespace tint::reader::wgsl {
 namespace {
diff --git a/src/tint/lang/wgsl/reader/lexer_test.cc b/src/tint/lang/wgsl/reader/lexer_test.cc
index 06342d6..4d27434 100644
--- a/src/tint/lang/wgsl/reader/lexer_test.cc
+++ b/src/tint/lang/wgsl/reader/lexer_test.cc
@@ -19,7 +19,7 @@
 #include <vector>
 
 #include "gtest/gtest.h"
-#include "src/tint/builtin/number.h"
+#include "src/tint/lang/base/builtin/number.h"
 
 namespace tint::reader::wgsl {
 namespace {
diff --git a/src/tint/lang/wgsl/reader/parser_impl.cc b/src/tint/lang/wgsl/reader/parser_impl.cc
index 45b9f9c..50bddda 100644
--- a/src/tint/lang/wgsl/reader/parser_impl.cc
+++ b/src/tint/lang/wgsl/reader/parser_impl.cc
@@ -16,11 +16,11 @@
 
 #include <limits>
 
-#include "src/tint/builtin/attribute.h"
 #include "src/tint/core/defer.h"
 #include "src/tint/core/reverse.h"
 #include "src/tint/core/string.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/attribute.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/bitcast_expression.h"
 #include "src/tint/lang/wgsl/ast/break_if_statement.h"
diff --git a/src/tint/lang/wgsl/reader/parser_impl.h b/src/tint/lang/wgsl/reader/parser_impl.h
index 4b130ad..3dc4092 100644
--- a/src/tint/lang/wgsl/reader/parser_impl.h
+++ b/src/tint/lang/wgsl/reader/parser_impl.h
@@ -22,7 +22,7 @@
 #include <utility>
 #include <vector>
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 #include "src/tint/lang/wgsl/reader/parser_impl_detail.h"
 #include "src/tint/lang/wgsl/reader/token.h"
 #include "src/tint/program_builder.h"
diff --git a/src/tint/lang/wgsl/reader/parser_impl_variable_attribute_test.cc b/src/tint/lang/wgsl/reader/parser_impl_variable_attribute_test.cc
index 6d59ed6..67e2a39 100644
--- a/src/tint/lang/wgsl/reader/parser_impl_variable_attribute_test.cc
+++ b/src/tint/lang/wgsl/reader/parser_impl_variable_attribute_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/test_helper.h"
 #include "src/tint/lang/wgsl/reader/parser_impl_test_helper.h"
 
diff --git a/src/tint/lang/wgsl/sem/builtin.h b/src/tint/lang/wgsl/sem/builtin.h
index 0aeacac..2420554 100644
--- a/src/tint/lang/wgsl/sem/builtin.h
+++ b/src/tint/lang/wgsl/sem/builtin.h
@@ -18,9 +18,9 @@
 #include <string>
 #include <vector>
 
-#include "src/tint/builtin/extension.h"
-#include "src/tint/builtin/function.h"
 #include "src/tint/core/hash.h"
+#include "src/tint/lang/base/builtin/extension.h"
+#include "src/tint/lang/base/builtin/function.h"
 #include "src/tint/lang/wgsl/sem/call_target.h"
 #include "src/tint/lang/wgsl/sem/pipeline_stage_set.h"
 
diff --git a/src/tint/lang/wgsl/sem/module.h b/src/tint/lang/wgsl/sem/module.h
index 29c1bf3..cd8acb1 100644
--- a/src/tint/lang/wgsl/sem/module.h
+++ b/src/tint/lang/wgsl/sem/module.h
@@ -15,8 +15,8 @@
 #ifndef SRC_TINT_LANG_WGSL_SEM_MODULE_H_
 #define SRC_TINT_LANG_WGSL_SEM_MODULE_H_
 
-#include "src/tint/builtin/extension.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/extension.h"
 #include "src/tint/lang/wgsl/ast/diagnostic_control.h"
 #include "src/tint/lang/wgsl/sem/node.h"
 
diff --git a/src/tint/lang/wgsl/sem/struct.h b/src/tint/lang/wgsl/sem/struct.h
index 0bf5330..28849bb 100644
--- a/src/tint/lang/wgsl/sem/struct.h
+++ b/src/tint/lang/wgsl/sem/struct.h
@@ -17,8 +17,8 @@
 
 #include <optional>
 
-#include "src/tint/builtin/address_space.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 #include "src/tint/lang/wgsl/ast/struct.h"
 #include "src/tint/symbol.h"
 #include "src/tint/type/struct.h"
diff --git a/src/tint/lang/wgsl/sem/variable.h b/src/tint/lang/wgsl/sem/variable.h
index 91536ab..5d449f2 100644
--- a/src/tint/lang/wgsl/sem/variable.h
+++ b/src/tint/lang/wgsl/sem/variable.h
@@ -21,9 +21,9 @@
 
 #include "tint/override_id.h"
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/address_space.h"
 #include "src/tint/core/unique_vector.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 #include "src/tint/lang/wgsl/ast/parameter.h"
 #include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/lang/wgsl/sem/parameter_usage.h"
diff --git a/src/tint/program_builder.h b/src/tint/program_builder.h
index c8244c9..212540c 100644
--- a/src/tint/program_builder.h
+++ b/src/tint/program_builder.h
@@ -21,13 +21,13 @@
 
 #include "tint/override_id.h"
 
-#include "src/tint/builtin/extension.h"
-#include "src/tint/builtin/fluent_types.h"
-#include "src/tint/builtin/interpolation_sampling.h"
-#include "src/tint/builtin/interpolation_type.h"
-#include "src/tint/builtin/number.h"
 #include "src/tint/constant/manager.h"
 #include "src/tint/core/string.h"
+#include "src/tint/lang/base/builtin/extension.h"
+#include "src/tint/lang/base/builtin/fluent_types.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/lang/wgsl/ast/alias.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/binary_expression.h"
diff --git a/src/tint/resolver/attribute_validation_test.cc b/src/tint/resolver/attribute_validation_test.cc
index e2d652e..4992ff1 100644
--- a/src/tint/resolver/attribute_validation_test.cc
+++ b/src/tint/resolver/attribute_validation_test.cc
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/disable_validation_attribute.h"
 #include "src/tint/lang/wgsl/ast/transform/add_block_attribute.h"
 #include "src/tint/resolver/resolver.h"
diff --git a/src/tint/resolver/builtin_enum_test.cc b/src/tint/resolver/builtin_enum_test.cc
index 3d68888..641670d 100644
--- a/src/tint/resolver/builtin_enum_test.cc
+++ b/src/tint/resolver/builtin_enum_test.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/address_space.h"
-#include "src/tint/builtin/builtin_value.h"
-#include "src/tint/builtin/interpolation_sampling.h"
-#include "src/tint/builtin/interpolation_type.h"
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/resolver/resolver.h"
 #include "src/tint/resolver/resolver_test_helper.h"
 
diff --git a/src/tint/resolver/builtins_validation_test.cc b/src/tint/resolver/builtins_validation_test.cc
index 9e71f7d..143ed4f 100644
--- a/src/tint/resolver/builtins_validation_test.cc
+++ b/src/tint/resolver/builtins_validation_test.cc
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/call_statement.h"
 #include "src/tint/resolver/resolver_test_helper.h"
 
diff --git a/src/tint/resolver/const_eval.cc b/src/tint/resolver/const_eval.cc
index e639674..791965e 100644
--- a/src/tint/resolver/const_eval.cc
+++ b/src/tint/resolver/const_eval.cc
@@ -22,7 +22,6 @@
 #include <type_traits>
 #include <utility>
 
-#include "src/tint/builtin/number.h"
 #include "src/tint/constant/composite.h"
 #include "src/tint/constant/scalar.h"
 #include "src/tint/constant/splat.h"
@@ -32,6 +31,7 @@
 #include "src/tint/core/map.h"
 #include "src/tint/core/string_stream.h"
 #include "src/tint/core/transform.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/lang/wgsl/sem/member_accessor_expression.h"
 #include "src/tint/lang/wgsl/sem/value_constructor.h"
 #include "src/tint/program_builder.h"
diff --git a/src/tint/resolver/const_eval.h b/src/tint/resolver/const_eval.h
index 123078c..077074c 100644
--- a/src/tint/resolver/const_eval.h
+++ b/src/tint/resolver/const_eval.h
@@ -18,9 +18,9 @@
 #include <stddef.h>
 #include <string>
 
-#include "src/tint/builtin/number.h"
 #include "src/tint/core/result.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/type/type.h"
 
 // Forward declarations
diff --git a/src/tint/resolver/dependency_graph.cc b/src/tint/resolver/dependency_graph.cc
index c255f3b..623777f 100644
--- a/src/tint/resolver/dependency_graph.cc
+++ b/src/tint/resolver/dependency_graph.cc
@@ -19,8 +19,6 @@
 #include <variant>
 #include <vector>
 
-#include "src/tint/builtin/builtin.h"
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/block_allocator.h"
 #include "src/tint/core/compiler_macros.h"
 #include "src/tint/core/defer.h"
@@ -29,6 +27,8 @@
 #include "src/tint/core/string.h"
 #include "src/tint/core/string_stream.h"
 #include "src/tint/core/unique_vector.h"
+#include "src/tint/lang/base/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/alias.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/block_statement.h"
diff --git a/src/tint/resolver/dependency_graph.h b/src/tint/resolver/dependency_graph.h
index 81a57ed..80dae2e 100644
--- a/src/tint/resolver/dependency_graph.h
+++ b/src/tint/resolver/dependency_graph.h
@@ -18,15 +18,15 @@
 #include <string>
 #include <vector>
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/builtin.h"
-#include "src/tint/builtin/builtin_value.h"
-#include "src/tint/builtin/function.h"
-#include "src/tint/builtin/interpolation_sampling.h"
-#include "src/tint/builtin/interpolation_type.h"
-#include "src/tint/builtin/texel_format.h"
 #include "src/tint/core/diagnostic/diagnostic.h"
 #include "src/tint/core/hashmap.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/builtin.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/function.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/lang/wgsl/ast/module.h"
 
 namespace tint::resolver {
diff --git a/src/tint/resolver/dependency_graph_test.cc b/src/tint/resolver/dependency_graph_test.cc
index e6ca575..a10fa27 100644
--- a/src/tint/resolver/dependency_graph_test.cc
+++ b/src/tint/resolver/dependency_graph_test.cc
@@ -17,8 +17,8 @@
 #include <utility>
 
 #include "gmock/gmock.h"
-#include "src/tint/builtin/address_space.h"
 #include "src/tint/core/transform.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 #include "src/tint/resolver/dependency_graph.h"
 #include "src/tint/resolver/resolver_test_helper.h"
 #include "src/tint/type/texture_dimension.h"
diff --git a/src/tint/resolver/entry_point_validation_test.cc b/src/tint/resolver/entry_point_validation_test.cc
index 8e89e5f..55a3fba 100644
--- a/src/tint/resolver/entry_point_validation_test.cc
+++ b/src/tint/resolver/entry_point_validation_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/builtin_attribute.h"
 #include "src/tint/lang/wgsl/ast/location_attribute.h"
 #include "src/tint/lang/wgsl/ast/return_statement.h"
diff --git a/src/tint/resolver/function_validation_test.cc b/src/tint/resolver/function_validation_test.cc
index 05b113a..222bba1 100644
--- a/src/tint/resolver/function_validation_test.cc
+++ b/src/tint/resolver/function_validation_test.cc
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/discard_statement.h"
 #include "src/tint/lang/wgsl/ast/return_statement.h"
 #include "src/tint/lang/wgsl/ast/stage_attribute.h"
diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc
index ad5cddf..a625a39 100644
--- a/src/tint/resolver/resolver.cc
+++ b/src/tint/resolver/resolver.cc
@@ -20,7 +20,6 @@
 #include <limits>
 #include <utility>
 
-#include "src/tint/builtin/builtin.h"
 #include "src/tint/core/compiler_macros.h"
 #include "src/tint/core/defer.h"
 #include "src/tint/core/math.h"
@@ -30,6 +29,7 @@
 #include "src/tint/core/string_stream.h"
 #include "src/tint/core/transform.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 #include "src/tint/lang/wgsl/ast/alias.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/attribute.h"
diff --git a/src/tint/resolver/resolver_test.cc b/src/tint/resolver/resolver_test.cc
index a4efd11..cb7614d 100644
--- a/src/tint/resolver/resolver_test.cc
+++ b/src/tint/resolver/resolver_test.cc
@@ -18,8 +18,8 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/string_stream.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/bitcast_expression.h"
 #include "src/tint/lang/wgsl/ast/break_statement.h"
diff --git a/src/tint/resolver/sem_helper.h b/src/tint/resolver/sem_helper.h
index f770ff5..a33b057 100644
--- a/src/tint/resolver/sem_helper.h
+++ b/src/tint/resolver/sem_helper.h
@@ -17,11 +17,11 @@
 
 #include <string>
 
-#include "src/tint/builtin/builtin_value.h"
-#include "src/tint/builtin/interpolation_sampling.h"
-#include "src/tint/builtin/interpolation_type.h"
 #include "src/tint/core/diagnostic/diagnostic.h"
 #include "src/tint/core/map.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/interpolation_sampling.h"
+#include "src/tint/lang/base/builtin/interpolation_type.h"
 #include "src/tint/lang/wgsl/sem/builtin_enum_expression.h"
 #include "src/tint/lang/wgsl/sem/function_expression.h"
 #include "src/tint/lang/wgsl/sem/type_expression.h"
diff --git a/src/tint/resolver/side_effects_test.cc b/src/tint/resolver/side_effects_test.cc
index a131156..043e25e 100644
--- a/src/tint/resolver/side_effects_test.cc
+++ b/src/tint/resolver/side_effects_test.cc
@@ -15,10 +15,10 @@
 #include "src/tint/resolver/resolver.h"
 
 #include "gtest/gtest.h"
-#include "src/tint/builtin/address_space.h"
-#include "src/tint/builtin/extension.h"
-#include "src/tint/builtin/texel_format.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/extension.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/lang/wgsl/sem/index_accessor_expression.h"
 #include "src/tint/lang/wgsl/sem/member_accessor_expression.h"
 #include "src/tint/lang/wgsl/sem/value_expression.h"
diff --git a/src/tint/resolver/struct_pipeline_stage_use_test.cc b/src/tint/resolver/struct_pipeline_stage_use_test.cc
index 353422c..45df6a7 100644
--- a/src/tint/resolver/struct_pipeline_stage_use_test.cc
+++ b/src/tint/resolver/struct_pipeline_stage_use_test.cc
@@ -15,7 +15,7 @@
 #include "src/tint/resolver/resolver.h"
 
 #include "gmock/gmock.h"
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/stage_attribute.h"
 #include "src/tint/lang/wgsl/sem/struct.h"
 #include "src/tint/resolver/resolver_test_helper.h"
diff --git a/src/tint/resolver/uniformity.cc b/src/tint/resolver/uniformity.cc
index 8d2ce77..66b5c76 100644
--- a/src/tint/resolver/uniformity.cc
+++ b/src/tint/resolver/uniformity.cc
@@ -19,12 +19,12 @@
 #include <utility>
 #include <vector>
 
-#include "src/tint/builtin/builtin_value.h"
 #include "src/tint/core/block_allocator.h"
 #include "src/tint/core/defer.h"
 #include "src/tint/core/map.h"
 #include "src/tint/core/string_stream.h"
 #include "src/tint/core/unique_vector.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/sem/block_statement.h"
 #include "src/tint/lang/wgsl/sem/builtin.h"
 #include "src/tint/lang/wgsl/sem/for_loop_statement.h"
diff --git a/src/tint/resolver/validation_test.cc b/src/tint/resolver/validation_test.cc
index c92628d..8f76ebe 100644
--- a/src/tint/resolver/validation_test.cc
+++ b/src/tint/resolver/validation_test.cc
@@ -16,7 +16,7 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/bitcast_expression.h"
 #include "src/tint/lang/wgsl/ast/break_statement.h"
diff --git a/src/tint/type/builtin_structs.cc b/src/tint/type/builtin_structs.cc
index 139e71a..c1a68a0b 100644
--- a/src/tint/type/builtin_structs.cc
+++ b/src/tint/type/builtin_structs.cc
@@ -18,8 +18,8 @@
 #include <string>
 #include <utility>
 
-#include "src/tint/builtin/builtin.h"
 #include "src/tint/core/string.h"
+#include "src/tint/lang/base/builtin/builtin.h"
 #include "src/tint/switch.h"
 #include "src/tint/symbol_table.h"
 #include "src/tint/type/abstract_float.h"
diff --git a/src/tint/type/manager.h b/src/tint/type/manager.h
index 8c69c4b..b3fa287 100644
--- a/src/tint/type/manager.h
+++ b/src/tint/type/manager.h
@@ -17,12 +17,12 @@
 
 #include <utility>
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/address_space.h"
-#include "src/tint/builtin/fluent_types.h"
-#include "src/tint/builtin/number.h"
 #include "src/tint/core/hash.h"
 #include "src/tint/core/unique_allocator.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/fluent_types.h"
+#include "src/tint/lang/base/builtin/number.h"
 #include "src/tint/symbol.h"
 #include "src/tint/type/atomic.h"
 #include "src/tint/type/sampler.h"
diff --git a/src/tint/type/pointer.h b/src/tint/type/pointer.h
index e22db02..83c2e85 100644
--- a/src/tint/type/pointer.h
+++ b/src/tint/type/pointer.h
@@ -17,8 +17,8 @@
 
 #include <string>
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 #include "src/tint/type/type.h"
 
 namespace tint::type {
diff --git a/src/tint/type/pointer_test.cc b/src/tint/type/pointer_test.cc
index 322fac5..73c7cb3 100644
--- a/src/tint/type/pointer_test.cc
+++ b/src/tint/type/pointer_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 #include "src/tint/type/test_helper.h"
 #include "src/tint/type/texture.h"
 
diff --git a/src/tint/type/reference.h b/src/tint/type/reference.h
index 4a1de4d..59c0d0d 100644
--- a/src/tint/type/reference.h
+++ b/src/tint/type/reference.h
@@ -17,8 +17,8 @@
 
 #include <string>
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 #include "src/tint/type/type.h"
 
 namespace tint::type {
diff --git a/src/tint/type/reference_test.cc b/src/tint/type/reference_test.cc
index 608e2ee..b08008a 100644
--- a/src/tint/type/reference_test.cc
+++ b/src/tint/type/reference_test.cc
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 #include "src/tint/type/reference.h"
-#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/address_space.h"
 #include "src/tint/type/test_helper.h"
 
 namespace tint::type {
diff --git a/src/tint/type/storage_texture.h b/src/tint/type/storage_texture.h
index abd580c..ac88b6e 100644
--- a/src/tint/type/storage_texture.h
+++ b/src/tint/type/storage_texture.h
@@ -17,8 +17,8 @@
 
 #include <string>
 
-#include "src/tint/builtin/access.h"
-#include "src/tint/builtin/texel_format.h"
+#include "src/tint/lang/base/builtin/access.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/type/texture.h"
 #include "src/tint/type/texture_dimension.h"
 
diff --git a/src/tint/type/struct.h b/src/tint/type/struct.h
index c854ce5..628f9db 100644
--- a/src/tint/type/struct.h
+++ b/src/tint/type/struct.h
@@ -21,10 +21,10 @@
 #include <unordered_set>
 #include <utility>
 
-#include "src/tint/builtin/address_space.h"
-#include "src/tint/builtin/builtin_value.h"
-#include "src/tint/builtin/interpolation.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/interpolation.h"
 #include "src/tint/symbol.h"
 #include "src/tint/type/node.h"
 #include "src/tint/type/type.h"
diff --git a/src/tint/writer/binding_remapper_options.h b/src/tint/writer/binding_remapper_options.h
index 865bcdb..5bd9f6e 100644
--- a/src/tint/writer/binding_remapper_options.h
+++ b/src/tint/writer/binding_remapper_options.h
@@ -17,7 +17,7 @@
 
 #include <unordered_map>
 
-#include "src/tint/builtin/access.h"
+#include "src/tint/lang/base/builtin/access.h"
 #include "src/tint/writer/binding_point.h"
 
 namespace tint::writer {
diff --git a/src/tint/writer/check_supported_extensions.h b/src/tint/writer/check_supported_extensions.h
index ef4f302..1b0bcaa 100644
--- a/src/tint/writer/check_supported_extensions.h
+++ b/src/tint/writer/check_supported_extensions.h
@@ -15,8 +15,8 @@
 #ifndef SRC_TINT_WRITER_CHECK_SUPPORTED_EXTENSIONS_H_
 #define SRC_TINT_WRITER_CHECK_SUPPORTED_EXTENSIONS_H_
 
-#include "src/tint/builtin/extension.h"
 #include "src/tint/core/vector.h"
+#include "src/tint/lang/base/builtin/extension.h"
 
 namespace tint::ast {
 class Module;
diff --git a/src/tint/writer/spirv/builder.h b/src/tint/writer/spirv/builder.h
index 410002a..f22ca34 100644
--- a/src/tint/writer/spirv/builder.h
+++ b/src/tint/writer/spirv/builder.h
@@ -22,7 +22,7 @@
 #include <vector>
 
 #include "spirv/unified1/spirv.h"
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
 #include "src/tint/lang/wgsl/ast/bitcast_expression.h"
 #include "src/tint/lang/wgsl/ast/break_statement.h"
diff --git a/src/tint/writer/spirv/builder_entry_point_test.cc b/src/tint/writer/spirv/builder_entry_point_test.cc
index 8715de0..934460c 100644
--- a/src/tint/writer/spirv/builder_entry_point_test.cc
+++ b/src/tint/writer/spirv/builder_entry_point_test.cc
@@ -15,8 +15,8 @@
 #include <memory>
 
 #include "gtest/gtest.h"
-#include "src/tint/builtin/address_space.h"
-#include "src/tint/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
 #include "src/tint/lang/wgsl/ast/builtin_attribute.h"
 #include "src/tint/lang/wgsl/ast/location_attribute.h"
 #include "src/tint/lang/wgsl/ast/return_statement.h"
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir.h b/src/tint/writer/spirv/ir/generator_impl_ir.h
index 0b3a756..ce713b2 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir.h
+++ b/src/tint/writer/spirv/ir/generator_impl_ir.h
@@ -17,14 +17,14 @@
 
 #include <vector>
 
-#include "src/tint/builtin/address_space.h"
-#include "src/tint/builtin/builtin_value.h"
-#include "src/tint/builtin/texel_format.h"
 #include "src/tint/constant/value.h"
 #include "src/tint/core/diagnostic/diagnostic.h"
 #include "src/tint/core/hashmap.h"
 #include "src/tint/core/vector.h"
 #include "src/tint/ir/constant.h"
+#include "src/tint/lang/base/builtin/address_space.h"
+#include "src/tint/lang/base/builtin/builtin_value.h"
+#include "src/tint/lang/base/builtin/texel_format.h"
 #include "src/tint/symbol.h"
 #include "src/tint/writer/spirv/binary_writer.h"
 #include "src/tint/writer/spirv/function.h"
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_atomic_builtin_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_atomic_builtin_test.cc
index 74fc0d7..6967ca5 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_atomic_builtin_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_atomic_builtin_test.cc
@@ -15,7 +15,7 @@
 #include "src/tint/type/builtin_structs.h"
 #include "src/tint/writer/spirv/ir/test_helper_ir.h"
 
-#include "src/tint/builtin/function.h"
+#include "src/tint/lang/base/builtin/function.h"
 
 using namespace tint::builtin::fluent_types;  // NOLINT
 using namespace tint::number_suffixes;        // NOLINT
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc
index 8c4d431..afa98c2f 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_builtin_test.cc
@@ -14,7 +14,7 @@
 
 #include "src/tint/writer/spirv/ir/test_helper_ir.h"
 
-#include "src/tint/builtin/function.h"
+#include "src/tint/lang/base/builtin/function.h"
 #include "src/tint/type/builtin_structs.h"
 
 using namespace tint::number_suffixes;  // NOLINT
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir_texture_builtin_test.cc b/src/tint/writer/spirv/ir/generator_impl_ir_texture_builtin_test.cc
index 831e963..db06d87 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir_texture_builtin_test.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir_texture_builtin_test.cc
@@ -14,7 +14,7 @@
 
 #include "src/tint/writer/spirv/ir/test_helper_ir.h"
 
-#include "src/tint/builtin/function.h"
+#include "src/tint/lang/base/builtin/function.h"
 #include "src/tint/type/depth_multisampled_texture.h"
 
 using namespace tint::number_suffixes;  // NOLINT
diff --git a/src/tint/writer/spirv/scalar_constant.h b/src/tint/writer/spirv/scalar_constant.h
index d397f93..c6418d6 100644
--- a/src/tint/writer/spirv/scalar_constant.h
+++ b/src/tint/writer/spirv/scalar_constant.h
@@ -20,8 +20,8 @@
 #include <cstring>
 #include <functional>
 
-#include "src/tint/builtin/number.h"
 #include "src/tint/core/hash.h"
+#include "src/tint/lang/base/builtin/number.h"
 
 // Forward declarations
 namespace tint::sem {