[shuffle] Move ir/ to new structure.

This CL moves the `ir/` folder to `lang/core/ir/`. The build
targets and namespaces are not updated as part of the move and will be
fixed up in later CLs.

Bug: tint:1988
Change-Id: If504287783adf47fe415f304ce91b2644d31bcd1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/142780
Reviewed-by: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/docs/tint/ir.md b/docs/tint/ir.md
index 1cb549e..0357c7a 100644
--- a/docs/tint/ir.md
+++ b/docs/tint/ir.md
@@ -84,7 +84,7 @@
 has the same setup as the AST (and inherits from the same base transform
 class.)
 
-The IR transforms live in `src/tint/ir/transform`. These transforms are
+The IR transforms live in `src/tint/lang/core/ir/transform`. These transforms are
 for use by the various IR generator backends.
 
 Unlike with the AST transforms, the IR transforms know which transforms
@@ -249,7 +249,7 @@
 ##### Constant Value
 All values in IR are concrete, there are no abstract values as
 materialization has already happened. Each constant holds a lower level
-`constant::Value` from the `src/tint/ir/constant` system.
+`constant::Value` from the `src/tint/lang/core/ir/constant` system.
 
 
 ##### InstructionResult Value
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 6991af0..3e388b0 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -515,16 +515,16 @@
 if (tint_build_ir) {
   libtint_source_set("libtint_ir_transform_src") {
     sources = [
-      "ir/transform/add_empty_entry_point.cc",
-      "ir/transform/add_empty_entry_point.h",
-      "ir/transform/block_decorated_structs.cc",
-      "ir/transform/block_decorated_structs.h",
-      "ir/transform/demote_to_helper.cc",
-      "ir/transform/demote_to_helper.h",
-      "ir/transform/rename_conflicts_wgsl.cc",
-      "ir/transform/rename_conflicts_wgsl.h",
-      "ir/transform/shader_io.cc",
-      "ir/transform/shader_io.h",
+      "lang/core/ir/transform/add_empty_entry_point.cc",
+      "lang/core/ir/transform/add_empty_entry_point.h",
+      "lang/core/ir/transform/block_decorated_structs.cc",
+      "lang/core/ir/transform/block_decorated_structs.h",
+      "lang/core/ir/transform/demote_to_helper.cc",
+      "lang/core/ir/transform/demote_to_helper.h",
+      "lang/core/ir/transform/rename_conflicts_wgsl.cc",
+      "lang/core/ir/transform/rename_conflicts_wgsl.h",
+      "lang/core/ir/transform/shader_io.cc",
+      "lang/core/ir/transform/shader_io.h",
     ]
     deps = [
       ":libtint_builtins_src",
@@ -536,18 +536,18 @@
 
     if (tint_build_spv_writer) {
       sources += [
-        "ir/transform/builtin_polyfill_spirv.cc",
-        "ir/transform/builtin_polyfill_spirv.h",
-        "ir/transform/expand_implicit_splats.cc",
-        "ir/transform/expand_implicit_splats.h",
-        "ir/transform/handle_matrix_arithmetic.cc",
-        "ir/transform/handle_matrix_arithmetic.h",
-        "ir/transform/merge_return.cc",
-        "ir/transform/merge_return.h",
-        "ir/transform/shader_io_spirv.cc",
-        "ir/transform/shader_io_spirv.h",
-        "ir/transform/var_for_dynamic_index.cc",
-        "ir/transform/var_for_dynamic_index.h",
+        "lang/core/ir/transform/builtin_polyfill_spirv.cc",
+        "lang/core/ir/transform/builtin_polyfill_spirv.h",
+        "lang/core/ir/transform/expand_implicit_splats.cc",
+        "lang/core/ir/transform/expand_implicit_splats.h",
+        "lang/core/ir/transform/handle_matrix_arithmetic.cc",
+        "lang/core/ir/transform/handle_matrix_arithmetic.h",
+        "lang/core/ir/transform/merge_return.cc",
+        "lang/core/ir/transform/merge_return.h",
+        "lang/core/ir/transform/shader_io_spirv.cc",
+        "lang/core/ir/transform/shader_io_spirv.h",
+        "lang/core/ir/transform/var_for_dynamic_index.cc",
+        "lang/core/ir/transform/var_for_dynamic_index.h",
       ]
     }
   }
@@ -1250,10 +1250,10 @@
 if (tint_build_ir) {
   libtint_source_set("libtint_ir_builder_src") {
     sources = [
-      "ir/from_program.cc",
-      "ir/from_program.h",
-      "ir/to_program.cc",
-      "ir/to_program.h",
+      "lang/core/ir/from_program.cc",
+      "lang/core/ir/from_program.h",
+      "lang/core/ir/to_program.cc",
+      "lang/core/ir/to_program.h",
     ]
     deps = [
       ":libtint_ast_src",
@@ -1270,106 +1270,106 @@
 
   libtint_source_set("libtint_ir_src") {
     sources = [
-      "ir/access.cc",
-      "ir/access.h",
-      "ir/binary.cc",
-      "ir/binary.h",
-      "ir/binding_point.h",
-      "ir/bitcast.cc",
-      "ir/bitcast.h",
-      "ir/block.cc",
-      "ir/block.h",
-      "ir/block_param.cc",
-      "ir/block_param.h",
-      "ir/break_if.cc",
-      "ir/break_if.h",
-      "ir/builder.cc",
-      "ir/builder.h",
-      "ir/builtin_call.cc",
-      "ir/builtin_call.h",
-      "ir/call.cc",
-      "ir/call.h",
-      "ir/constant.cc",
-      "ir/constant.h",
-      "ir/construct.cc",
-      "ir/construct.h",
-      "ir/continue.cc",
-      "ir/continue.h",
-      "ir/control_instruction.cc",
-      "ir/control_instruction.h",
-      "ir/convert.cc",
-      "ir/convert.h",
-      "ir/core_builtin_call.cc",
-      "ir/core_builtin_call.h",
-      "ir/disassembler.cc",
-      "ir/disassembler.h",
-      "ir/discard.cc",
-      "ir/discard.h",
-      "ir/exit.cc",
-      "ir/exit.h",
-      "ir/exit_if.cc",
-      "ir/exit_if.h",
-      "ir/exit_loop.cc",
-      "ir/exit_loop.h",
-      "ir/exit_switch.cc",
-      "ir/exit_switch.h",
-      "ir/function.cc",
-      "ir/function.h",
-      "ir/function_param.cc",
-      "ir/function_param.h",
-      "ir/if.cc",
-      "ir/if.h",
-      "ir/instruction.cc",
-      "ir/instruction.h",
-      "ir/instruction_result.cc",
-      "ir/instruction_result.h",
-      "ir/intrinsic_call.cc",
-      "ir/intrinsic_call.h",
-      "ir/let.cc",
-      "ir/let.h",
-      "ir/load.cc",
-      "ir/load.h",
-      "ir/load_vector_element.cc",
-      "ir/load_vector_element.h",
-      "ir/location.h",
-      "ir/loop.cc",
-      "ir/loop.h",
-      "ir/module.cc",
-      "ir/module.h",
-      "ir/multi_in_block.cc",
-      "ir/multi_in_block.h",
-      "ir/next_iteration.cc",
-      "ir/next_iteration.h",
-      "ir/operand_instruction.cc",
-      "ir/operand_instruction.h",
-      "ir/return.cc",
-      "ir/return.h",
-      "ir/store.cc",
-      "ir/store.h",
-      "ir/store_vector_element.cc",
-      "ir/store_vector_element.h",
-      "ir/switch.cc",
-      "ir/switch.h",
-      "ir/swizzle.cc",
-      "ir/swizzle.h",
-      "ir/terminate_invocation.cc",
-      "ir/terminate_invocation.h",
-      "ir/terminator.cc",
-      "ir/terminator.h",
-      "ir/transform/transform.cc",
-      "ir/transform/transform.h",
-      "ir/unary.cc",
-      "ir/unary.h",
-      "ir/unreachable.cc",
-      "ir/unreachable.h",
-      "ir/user_call.cc",
-      "ir/user_call.h",
-      "ir/validator.cc",
-      "ir/validator.h",
-      "ir/value.cc",
-      "ir/value.h",
-      "ir/var.cc",
-      "ir/var.h",
+      "lang/core/ir/access.cc",
+      "lang/core/ir/access.h",
+      "lang/core/ir/binary.cc",
+      "lang/core/ir/binary.h",
+      "lang/core/ir/binding_point.h",
+      "lang/core/ir/bitcast.cc",
+      "lang/core/ir/bitcast.h",
+      "lang/core/ir/block.cc",
+      "lang/core/ir/block.h",
+      "lang/core/ir/block_param.cc",
+      "lang/core/ir/block_param.h",
+      "lang/core/ir/break_if.cc",
+      "lang/core/ir/break_if.h",
+      "lang/core/ir/builder.cc",
+      "lang/core/ir/builder.h",
+      "lang/core/ir/builtin_call.cc",
+      "lang/core/ir/builtin_call.h",
+      "lang/core/ir/call.cc",
+      "lang/core/ir/call.h",
+      "lang/core/ir/constant.cc",
+      "lang/core/ir/constant.h",
+      "lang/core/ir/construct.cc",
+      "lang/core/ir/construct.h",
+      "lang/core/ir/continue.cc",
+      "lang/core/ir/continue.h",
+      "lang/core/ir/control_instruction.cc",
+      "lang/core/ir/control_instruction.h",
+      "lang/core/ir/convert.cc",
+      "lang/core/ir/convert.h",
+      "lang/core/ir/core_builtin_call.cc",
+      "lang/core/ir/core_builtin_call.h",
+      "lang/core/ir/disassembler.cc",
+      "lang/core/ir/disassembler.h",
+      "lang/core/ir/discard.cc",
+      "lang/core/ir/discard.h",
+      "lang/core/ir/exit.cc",
+      "lang/core/ir/exit.h",
+      "lang/core/ir/exit_if.cc",
+      "lang/core/ir/exit_if.h",
+      "lang/core/ir/exit_loop.cc",
+      "lang/core/ir/exit_loop.h",
+      "lang/core/ir/exit_switch.cc",
+      "lang/core/ir/exit_switch.h",
+      "lang/core/ir/function.cc",
+      "lang/core/ir/function.h",
+      "lang/core/ir/function_param.cc",
+      "lang/core/ir/function_param.h",
+      "lang/core/ir/if.cc",
+      "lang/core/ir/if.h",
+      "lang/core/ir/instruction.cc",
+      "lang/core/ir/instruction.h",
+      "lang/core/ir/instruction_result.cc",
+      "lang/core/ir/instruction_result.h",
+      "lang/core/ir/intrinsic_call.cc",
+      "lang/core/ir/intrinsic_call.h",
+      "lang/core/ir/let.cc",
+      "lang/core/ir/let.h",
+      "lang/core/ir/load.cc",
+      "lang/core/ir/load.h",
+      "lang/core/ir/load_vector_element.cc",
+      "lang/core/ir/load_vector_element.h",
+      "lang/core/ir/location.h",
+      "lang/core/ir/loop.cc",
+      "lang/core/ir/loop.h",
+      "lang/core/ir/module.cc",
+      "lang/core/ir/module.h",
+      "lang/core/ir/multi_in_block.cc",
+      "lang/core/ir/multi_in_block.h",
+      "lang/core/ir/next_iteration.cc",
+      "lang/core/ir/next_iteration.h",
+      "lang/core/ir/operand_instruction.cc",
+      "lang/core/ir/operand_instruction.h",
+      "lang/core/ir/return.cc",
+      "lang/core/ir/return.h",
+      "lang/core/ir/store.cc",
+      "lang/core/ir/store.h",
+      "lang/core/ir/store_vector_element.cc",
+      "lang/core/ir/store_vector_element.h",
+      "lang/core/ir/switch.cc",
+      "lang/core/ir/switch.h",
+      "lang/core/ir/swizzle.cc",
+      "lang/core/ir/swizzle.h",
+      "lang/core/ir/terminate_invocation.cc",
+      "lang/core/ir/terminate_invocation.h",
+      "lang/core/ir/terminator.cc",
+      "lang/core/ir/terminator.h",
+      "lang/core/ir/transform/transform.cc",
+      "lang/core/ir/transform/transform.h",
+      "lang/core/ir/unary.cc",
+      "lang/core/ir/unary.h",
+      "lang/core/ir/unreachable.cc",
+      "lang/core/ir/unreachable.h",
+      "lang/core/ir/user_call.cc",
+      "lang/core/ir/user_call.h",
+      "lang/core/ir/validator.cc",
+      "lang/core/ir/validator.h",
+      "lang/core/ir/value.cc",
+      "lang/core/ir/value.h",
+      "lang/core/ir/var.cc",
+      "lang/core/ir/var.h",
     ]
 
     deps = [
@@ -1899,10 +1899,10 @@
   if (tint_build_ir) {
     tint_unittests_source_set("tint_unittests_ir_transform_src") {
       sources = [
-        "ir/transform/add_empty_entry_point_test.cc",
-        "ir/transform/block_decorated_structs_test.cc",
-        "ir/transform/demote_to_helper_test.cc",
-        "ir/transform/test_helper.h",
+        "lang/core/ir/transform/add_empty_entry_point_test.cc",
+        "lang/core/ir/transform/block_decorated_structs_test.cc",
+        "lang/core/ir/transform/demote_to_helper_test.cc",
+        "lang/core/ir/transform/test_helper.h",
       ]
 
       deps = [
@@ -1913,17 +1913,17 @@
 
       if (tint_build_spv_writer) {
         sources += [
-          "ir/transform/builtin_polyfill_spirv_test.cc",
-          "ir/transform/expand_implicit_splats_test.cc",
-          "ir/transform/handle_matrix_arithmetic_test.cc",
-          "ir/transform/merge_return_test.cc",
-          "ir/transform/shader_io_spirv_test.cc",
-          "ir/transform/var_for_dynamic_index_test.cc",
+          "lang/core/ir/transform/builtin_polyfill_spirv_test.cc",
+          "lang/core/ir/transform/expand_implicit_splats_test.cc",
+          "lang/core/ir/transform/handle_matrix_arithmetic_test.cc",
+          "lang/core/ir/transform/merge_return_test.cc",
+          "lang/core/ir/transform/shader_io_spirv_test.cc",
+          "lang/core/ir/transform/var_for_dynamic_index_test.cc",
         ]
       }
 
       if (tint_build_wgsl_writer) {
-        sources += [ "ir/transform/rename_conflicts_test.cc" ]
+        sources += [ "lang/core/ir/transform/rename_conflicts_test.cc" ]
       }
     }
   }
@@ -2413,63 +2413,63 @@
   if (tint_build_ir) {
     tint_unittests_source_set("tint_unittests_ir_src") {
       sources = [
-        "ir/access_test.cc",
-        "ir/binary_test.cc",
-        "ir/bitcast_test.cc",
-        "ir/block_param_test.cc",
-        "ir/block_test.cc",
-        "ir/break_if_test.cc",
-        "ir/constant_test.cc",
-        "ir/construct_test.cc",
-        "ir/continue_test.cc",
-        "ir/convert_test.cc",
-        "ir/core_builtin_call_test.cc",
-        "ir/discard_test.cc",
-        "ir/exit_if_test.cc",
-        "ir/exit_loop_test.cc",
-        "ir/exit_switch_test.cc",
-        "ir/from_program_accessor_test.cc",
-        "ir/from_program_binary_test.cc",
-        "ir/from_program_builtin_test.cc",
-        "ir/from_program_call_test.cc",
-        "ir/from_program_function_test.cc",
-        "ir/from_program_let_test.cc",
-        "ir/from_program_literal_test.cc",
-        "ir/from_program_materialize_test.cc",
-        "ir/from_program_shadowing_test.cc",
-        "ir/from_program_store_test.cc",
-        "ir/from_program_test.cc",
-        "ir/from_program_unary_test.cc",
-        "ir/from_program_var_test.cc",
-        "ir/function_param_test.cc",
-        "ir/function_test.cc",
-        "ir/if_test.cc",
-        "ir/instruction_result_test.cc",
-        "ir/instruction_test.cc",
-        "ir/intrinsic_call_test.cc",
-        "ir/ir_test_helper.h",
-        "ir/let_test.cc",
-        "ir/load_test.cc",
-        "ir/load_vector_element_test.cc",
-        "ir/loop_test.cc",
-        "ir/module_test.cc",
-        "ir/multi_in_block_test.cc",
-        "ir/next_iteration_test.cc",
-        "ir/operand_instruction_test.cc",
-        "ir/program_test_helper.h",
-        "ir/return_test.cc",
-        "ir/store_test.cc",
-        "ir/store_vector_element_test.cc",
-        "ir/switch_test.cc",
-        "ir/swizzle_test.cc",
-        "ir/to_program_inlining_test.cc",
-        "ir/to_program_roundtrip_test.cc",
-        "ir/to_program_test.cc",
-        "ir/unary_test.cc",
-        "ir/user_call_test.cc",
-        "ir/validator_test.cc",
-        "ir/value_test.cc",
-        "ir/var_test.cc",
+        "lang/core/ir/access_test.cc",
+        "lang/core/ir/binary_test.cc",
+        "lang/core/ir/bitcast_test.cc",
+        "lang/core/ir/block_param_test.cc",
+        "lang/core/ir/block_test.cc",
+        "lang/core/ir/break_if_test.cc",
+        "lang/core/ir/constant_test.cc",
+        "lang/core/ir/construct_test.cc",
+        "lang/core/ir/continue_test.cc",
+        "lang/core/ir/convert_test.cc",
+        "lang/core/ir/core_builtin_call_test.cc",
+        "lang/core/ir/discard_test.cc",
+        "lang/core/ir/exit_if_test.cc",
+        "lang/core/ir/exit_loop_test.cc",
+        "lang/core/ir/exit_switch_test.cc",
+        "lang/core/ir/from_program_accessor_test.cc",
+        "lang/core/ir/from_program_binary_test.cc",
+        "lang/core/ir/from_program_builtin_test.cc",
+        "lang/core/ir/from_program_call_test.cc",
+        "lang/core/ir/from_program_function_test.cc",
+        "lang/core/ir/from_program_let_test.cc",
+        "lang/core/ir/from_program_literal_test.cc",
+        "lang/core/ir/from_program_materialize_test.cc",
+        "lang/core/ir/from_program_shadowing_test.cc",
+        "lang/core/ir/from_program_store_test.cc",
+        "lang/core/ir/from_program_test.cc",
+        "lang/core/ir/from_program_unary_test.cc",
+        "lang/core/ir/from_program_var_test.cc",
+        "lang/core/ir/function_param_test.cc",
+        "lang/core/ir/function_test.cc",
+        "lang/core/ir/if_test.cc",
+        "lang/core/ir/instruction_result_test.cc",
+        "lang/core/ir/instruction_test.cc",
+        "lang/core/ir/intrinsic_call_test.cc",
+        "lang/core/ir/ir_test_helper.h",
+        "lang/core/ir/let_test.cc",
+        "lang/core/ir/load_test.cc",
+        "lang/core/ir/load_vector_element_test.cc",
+        "lang/core/ir/loop_test.cc",
+        "lang/core/ir/module_test.cc",
+        "lang/core/ir/multi_in_block_test.cc",
+        "lang/core/ir/next_iteration_test.cc",
+        "lang/core/ir/operand_instruction_test.cc",
+        "lang/core/ir/program_test_helper.h",
+        "lang/core/ir/return_test.cc",
+        "lang/core/ir/store_test.cc",
+        "lang/core/ir/store_vector_element_test.cc",
+        "lang/core/ir/switch_test.cc",
+        "lang/core/ir/swizzle_test.cc",
+        "lang/core/ir/to_program_inlining_test.cc",
+        "lang/core/ir/to_program_roundtrip_test.cc",
+        "lang/core/ir/to_program_test.cc",
+        "lang/core/ir/unary_test.cc",
+        "lang/core/ir/user_call_test.cc",
+        "lang/core/ir/validator_test.cc",
+        "lang/core/ir/value_test.cc",
+        "lang/core/ir/var_test.cc",
       ]
 
       deps = [
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index 79b4c5b..1772d04 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -677,18 +677,18 @@
 
   if(${TINT_BUILD_IR})
     list(APPEND TINT_LIB_SRCS
-      ir/transform/builtin_polyfill_spirv.cc
-      ir/transform/builtin_polyfill_spirv.h
-      ir/transform/expand_implicit_splats.cc
-      ir/transform/expand_implicit_splats.h
-      ir/transform/handle_matrix_arithmetic.cc
-      ir/transform/handle_matrix_arithmetic.h
-      ir/transform/merge_return.cc
-      ir/transform/merge_return.h
-      ir/transform/shader_io_spirv.cc
-      ir/transform/shader_io_spirv.h
-      ir/transform/var_for_dynamic_index.cc
-      ir/transform/var_for_dynamic_index.h
+      lang/core/ir/transform/builtin_polyfill_spirv.cc
+      lang/core/ir/transform/builtin_polyfill_spirv.h
+      lang/core/ir/transform/expand_implicit_splats.cc
+      lang/core/ir/transform/expand_implicit_splats.h
+      lang/core/ir/transform/handle_matrix_arithmetic.cc
+      lang/core/ir/transform/handle_matrix_arithmetic.h
+      lang/core/ir/transform/merge_return.cc
+      lang/core/ir/transform/merge_return.h
+      lang/core/ir/transform/shader_io_spirv.cc
+      lang/core/ir/transform/shader_io_spirv.h
+      lang/core/ir/transform/var_for_dynamic_index.cc
+      lang/core/ir/transform/var_for_dynamic_index.h
       lang/spirv/writer/writer.cc
       lang/spirv/writer/writer.h
     )
@@ -752,120 +752,120 @@
 
 if(${TINT_BUILD_IR})
   list(APPEND TINT_LIB_SRCS
-    ir/access.cc
-    ir/access.h
-    ir/binary.cc
-    ir/binary.h
-    ir/binding_point.h
-    ir/bitcast.cc
-    ir/bitcast.h
-    ir/block.cc
-    ir/block.h
-    ir/block_param.cc
-    ir/block_param.h
-    ir/break_if.cc
-    ir/break_if.h
-    ir/builder.cc
-    ir/builder.h
-    ir/builtin_call.cc
-    ir/builtin_call.h
-    ir/call.cc
-    ir/call.h
-    ir/constant.cc
-    ir/constant.h
-    ir/construct.cc
-    ir/construct.h
-    ir/continue.cc
-    ir/continue.h
-    ir/control_instruction.cc
-    ir/control_instruction.h
-    ir/convert.cc
-    ir/convert.h
-    ir/core_builtin_call.cc
-    ir/core_builtin_call.h
-    ir/disassembler.cc
-    ir/disassembler.h
-    ir/discard.cc
-    ir/discard.h
-    ir/exit_if.cc
-    ir/exit_if.h
-    ir/exit_loop.cc
-    ir/exit_loop.h
-    ir/exit_switch.cc
-    ir/exit_switch.h
-    ir/exit.cc
-    ir/exit.h
-    ir/from_program.cc
-    ir/from_program.h
-    ir/function.cc
-    ir/function.h
-    ir/function_param.cc
-    ir/function_param.h
-    ir/if.cc
-    ir/if.h
-    ir/instruction.cc
-    ir/instruction.h
-    ir/instruction_result.cc
-    ir/instruction_result.h
-    ir/intrinsic_call.cc
-    ir/intrinsic_call.h
-    ir/let.cc
-    ir/let.h
-    ir/load.cc
-    ir/load.h
-    ir/load_vector_element.cc
-    ir/load_vector_element.h
-    ir/location.h
-    ir/loop.cc
-    ir/loop.h
-    ir/module.cc
-    ir/module.h
-    ir/multi_in_block.cc
-    ir/multi_in_block.h
-    ir/next_iteration.cc
-    ir/next_iteration.h
-    ir/operand_instruction.cc
-    ir/operand_instruction.h
-    ir/return.cc
-    ir/return.h
-    ir/store.cc
-    ir/store.h
-    ir/store_vector_element.cc
-    ir/store_vector_element.h
-    ir/switch.cc
-    ir/switch.h
-    ir/swizzle.cc
-    ir/swizzle.h
-    ir/terminate_invocation.cc
-    ir/terminate_invocation.h
-    ir/terminator.cc
-    ir/terminator.h
-    ir/to_program.cc
-    ir/to_program.h
-    ir/unary.cc
-    ir/unary.h
-    ir/unreachable.cc
-    ir/unreachable.h
-    ir/user_call.cc
-    ir/user_call.h
-    ir/validator.cc
-    ir/validator.h
-    ir/value.cc
-    ir/value.h
-    ir/var.cc
-    ir/var.h
-    ir/transform/add_empty_entry_point.cc
-    ir/transform/add_empty_entry_point.h
-    ir/transform/block_decorated_structs.cc
-    ir/transform/block_decorated_structs.h
-    ir/transform/demote_to_helper.cc
-    ir/transform/demote_to_helper.h
-    ir/transform/rename_conflicts_wgsl.cc
-    ir/transform/rename_conflicts_wgsl.h
-    ir/transform/shader_io.cc
-    ir/transform/shader_io.h
-    ir/transform/transform.cc
-    ir/transform/transform.h
+    lang/core/ir/access.cc
+    lang/core/ir/access.h
+    lang/core/ir/binary.cc
+    lang/core/ir/binary.h
+    lang/core/ir/binding_point.h
+    lang/core/ir/bitcast.cc
+    lang/core/ir/bitcast.h
+    lang/core/ir/block.cc
+    lang/core/ir/block.h
+    lang/core/ir/block_param.cc
+    lang/core/ir/block_param.h
+    lang/core/ir/break_if.cc
+    lang/core/ir/break_if.h
+    lang/core/ir/builder.cc
+    lang/core/ir/builder.h
+    lang/core/ir/builtin_call.cc
+    lang/core/ir/builtin_call.h
+    lang/core/ir/call.cc
+    lang/core/ir/call.h
+    lang/core/ir/constant.cc
+    lang/core/ir/constant.h
+    lang/core/ir/construct.cc
+    lang/core/ir/construct.h
+    lang/core/ir/continue.cc
+    lang/core/ir/continue.h
+    lang/core/ir/control_instruction.cc
+    lang/core/ir/control_instruction.h
+    lang/core/ir/convert.cc
+    lang/core/ir/convert.h
+    lang/core/ir/core_builtin_call.cc
+    lang/core/ir/core_builtin_call.h
+    lang/core/ir/disassembler.cc
+    lang/core/ir/disassembler.h
+    lang/core/ir/discard.cc
+    lang/core/ir/discard.h
+    lang/core/ir/exit_if.cc
+    lang/core/ir/exit_if.h
+    lang/core/ir/exit_loop.cc
+    lang/core/ir/exit_loop.h
+    lang/core/ir/exit_switch.cc
+    lang/core/ir/exit_switch.h
+    lang/core/ir/exit.cc
+    lang/core/ir/exit.h
+    lang/core/ir/from_program.cc
+    lang/core/ir/from_program.h
+    lang/core/ir/function.cc
+    lang/core/ir/function.h
+    lang/core/ir/function_param.cc
+    lang/core/ir/function_param.h
+    lang/core/ir/if.cc
+    lang/core/ir/if.h
+    lang/core/ir/instruction.cc
+    lang/core/ir/instruction.h
+    lang/core/ir/instruction_result.cc
+    lang/core/ir/instruction_result.h
+    lang/core/ir/intrinsic_call.cc
+    lang/core/ir/intrinsic_call.h
+    lang/core/ir/let.cc
+    lang/core/ir/let.h
+    lang/core/ir/load.cc
+    lang/core/ir/load.h
+    lang/core/ir/load_vector_element.cc
+    lang/core/ir/load_vector_element.h
+    lang/core/ir/location.h
+    lang/core/ir/loop.cc
+    lang/core/ir/loop.h
+    lang/core/ir/module.cc
+    lang/core/ir/module.h
+    lang/core/ir/multi_in_block.cc
+    lang/core/ir/multi_in_block.h
+    lang/core/ir/next_iteration.cc
+    lang/core/ir/next_iteration.h
+    lang/core/ir/operand_instruction.cc
+    lang/core/ir/operand_instruction.h
+    lang/core/ir/return.cc
+    lang/core/ir/return.h
+    lang/core/ir/store.cc
+    lang/core/ir/store.h
+    lang/core/ir/store_vector_element.cc
+    lang/core/ir/store_vector_element.h
+    lang/core/ir/switch.cc
+    lang/core/ir/switch.h
+    lang/core/ir/swizzle.cc
+    lang/core/ir/swizzle.h
+    lang/core/ir/terminate_invocation.cc
+    lang/core/ir/terminate_invocation.h
+    lang/core/ir/terminator.cc
+    lang/core/ir/terminator.h
+    lang/core/ir/to_program.cc
+    lang/core/ir/to_program.h
+    lang/core/ir/unary.cc
+    lang/core/ir/unary.h
+    lang/core/ir/unreachable.cc
+    lang/core/ir/unreachable.h
+    lang/core/ir/user_call.cc
+    lang/core/ir/user_call.h
+    lang/core/ir/validator.cc
+    lang/core/ir/validator.h
+    lang/core/ir/value.cc
+    lang/core/ir/value.h
+    lang/core/ir/var.cc
+    lang/core/ir/var.h
+    lang/core/ir/transform/add_empty_entry_point.cc
+    lang/core/ir/transform/add_empty_entry_point.h
+    lang/core/ir/transform/block_decorated_structs.cc
+    lang/core/ir/transform/block_decorated_structs.h
+    lang/core/ir/transform/demote_to_helper.cc
+    lang/core/ir/transform/demote_to_helper.h
+    lang/core/ir/transform/rename_conflicts_wgsl.cc
+    lang/core/ir/transform/rename_conflicts_wgsl.h
+    lang/core/ir/transform/shader_io.cc
+    lang/core/ir/transform/shader_io.h
+    lang/core/ir/transform/transform.cc
+    lang/core/ir/transform/transform.h
   )
 endif()
 
@@ -1339,12 +1339,12 @@
 
     if(${TINT_BUILD_IR})
       list(APPEND TINT_TEST_SRCS
-        ir/transform/builtin_polyfill_spirv_test.cc
-        ir/transform/handle_matrix_arithmetic_test.cc
-        ir/transform/expand_implicit_splats_test.cc
-        ir/transform/merge_return_test.cc
-        ir/transform/shader_io_spirv_test.cc
-        ir/transform/var_for_dynamic_index_test.cc
+        lang/core/ir/transform/builtin_polyfill_spirv_test.cc
+        lang/core/ir/transform/handle_matrix_arithmetic_test.cc
+        lang/core/ir/transform/expand_implicit_splats_test.cc
+        lang/core/ir/transform/merge_return_test.cc
+        lang/core/ir/transform/shader_io_spirv_test.cc
+        lang/core/ir/transform/var_for_dynamic_index_test.cc
         lang/spirv/writer/access_test.cc
         lang/spirv/writer/atomic_builtin_test.cc
         lang/spirv/writer/binary_test.cc
@@ -1370,7 +1370,7 @@
 
       if (${TINT_BUILD_WGSL_WRITER})
         list(APPEND TINT_TEST_SRCS
-          ir/transform/rename_conflicts_wgsl_test.cc
+          lang/core/ir/transform/rename_conflicts_wgsl_test.cc
         )
       endif()
     endif()
@@ -1593,81 +1593,81 @@
 
   if (${TINT_BUILD_IR})
     list(APPEND TINT_TEST_SRCS
-      ir/access_test.cc
-      ir/binary_test.cc
-      ir/bitcast_test.cc
-      ir/block_param_test.cc
-      ir/block_test.cc
-      ir/break_if_test.cc
-      ir/constant_test.cc
-      ir/construct_test.cc
-      ir/continue_test.cc
-      ir/convert_test.cc
-      ir/core_builtin_call_test.cc
-      ir/discard_test.cc
-      ir/exit_if_test.cc
-      ir/exit_loop_test.cc
-      ir/exit_switch_test.cc
-      ir/from_program_accessor_test.cc
-      ir/from_program_binary_test.cc
-      ir/from_program_builtin_test.cc
-      ir/from_program_call_test.cc
-      ir/from_program_function_test.cc
-      ir/from_program_let_test.cc
-      ir/from_program_literal_test.cc
-      ir/from_program_materialize_test.cc
-      ir/from_program_store_test.cc
-      ir/from_program_test.cc
-      ir/from_program_unary_test.cc
-      ir/from_program_var_test.cc
-      ir/function_param_test.cc
-      ir/function_test.cc
-      ir/if_test.cc
-      ir/instruction_result_test.cc
-      ir/instruction_test.cc
-      ir/intrinsic_call_test.cc
-      ir/ir_test_helper.h
-      ir/let_test.cc
-      ir/load_test.cc
-      ir/load_vector_element_test.cc
-      ir/loop_test.cc
-      ir/module_test.cc
-      ir/multi_in_block_test.cc
-      ir/next_iteration_test.cc
-      ir/operand_instruction_test.cc
-      ir/program_test_helper.h
-      ir/return_test.cc
-      ir/store_test.cc
-      ir/store_vector_element_test.cc
-      ir/switch_test.cc
-      ir/swizzle_test.cc
-      ir/transform/add_empty_entry_point_test.cc
-      ir/transform/block_decorated_structs_test.cc
-      ir/transform/demote_to_helper_test.cc
-      ir/unary_test.cc
-      ir/user_call_test.cc
-      ir/validator_test.cc
-      ir/value_test.cc
-      ir/var_test.cc
+      lang/core/ir/access_test.cc
+      lang/core/ir/binary_test.cc
+      lang/core/ir/bitcast_test.cc
+      lang/core/ir/block_param_test.cc
+      lang/core/ir/block_test.cc
+      lang/core/ir/break_if_test.cc
+      lang/core/ir/constant_test.cc
+      lang/core/ir/construct_test.cc
+      lang/core/ir/continue_test.cc
+      lang/core/ir/convert_test.cc
+      lang/core/ir/core_builtin_call_test.cc
+      lang/core/ir/discard_test.cc
+      lang/core/ir/exit_if_test.cc
+      lang/core/ir/exit_loop_test.cc
+      lang/core/ir/exit_switch_test.cc
+      lang/core/ir/from_program_accessor_test.cc
+      lang/core/ir/from_program_binary_test.cc
+      lang/core/ir/from_program_builtin_test.cc
+      lang/core/ir/from_program_call_test.cc
+      lang/core/ir/from_program_function_test.cc
+      lang/core/ir/from_program_let_test.cc
+      lang/core/ir/from_program_literal_test.cc
+      lang/core/ir/from_program_materialize_test.cc
+      lang/core/ir/from_program_store_test.cc
+      lang/core/ir/from_program_test.cc
+      lang/core/ir/from_program_unary_test.cc
+      lang/core/ir/from_program_var_test.cc
+      lang/core/ir/function_param_test.cc
+      lang/core/ir/function_test.cc
+      lang/core/ir/if_test.cc
+      lang/core/ir/instruction_result_test.cc
+      lang/core/ir/instruction_test.cc
+      lang/core/ir/intrinsic_call_test.cc
+      lang/core/ir/ir_test_helper.h
+      lang/core/ir/let_test.cc
+      lang/core/ir/load_test.cc
+      lang/core/ir/load_vector_element_test.cc
+      lang/core/ir/loop_test.cc
+      lang/core/ir/module_test.cc
+      lang/core/ir/multi_in_block_test.cc
+      lang/core/ir/next_iteration_test.cc
+      lang/core/ir/operand_instruction_test.cc
+      lang/core/ir/program_test_helper.h
+      lang/core/ir/return_test.cc
+      lang/core/ir/store_test.cc
+      lang/core/ir/store_vector_element_test.cc
+      lang/core/ir/switch_test.cc
+      lang/core/ir/swizzle_test.cc
+      lang/core/ir/transform/add_empty_entry_point_test.cc
+      lang/core/ir/transform/block_decorated_structs_test.cc
+      lang/core/ir/transform/demote_to_helper_test.cc
+      lang/core/ir/unary_test.cc
+      lang/core/ir/user_call_test.cc
+      lang/core/ir/validator_test.cc
+      lang/core/ir/value_test.cc
+      lang/core/ir/var_test.cc
     )
   endif()
 
   if (${TINT_BUILD_IR} AND ${TINT_BUILD_WGSL_READER} AND ${TINT_BUILD_WGSL_WRITER})
     list(APPEND TINT_TEST_SRCS
-      ir/to_program_roundtrip_test.cc
+      lang/core/ir/to_program_roundtrip_test.cc
     )
   endif()
 
   if (${TINT_BUILD_IR} AND ${TINT_BUILD_WGSL_READER})
     list(APPEND TINT_TEST_SRCS
-      ir/from_program_shadowing_test.cc
+      lang/core/ir/from_program_shadowing_test.cc
     )
   endif()
 
   if (${TINT_BUILD_IR} AND ${TINT_BUILD_WGSL_WRITER})
     list(APPEND TINT_TEST_SRCS
-      ir/to_program_inlining_test.cc
-      ir/to_program_test.cc
+      lang/core/ir/to_program_inlining_test.cc
+      lang/core/ir/to_program_test.cc
     )
   endif()
 
diff --git a/src/tint/cmd/loopy.cc b/src/tint/cmd/loopy.cc
index 34ded9d..365a54e 100644
--- a/src/tint/cmd/loopy.cc
+++ b/src/tint/cmd/loopy.cc
@@ -19,8 +19,8 @@
 #include "tint/tint.h"
 
 #if TINT_BUILD_IR
-#include "src/tint/ir/from_program.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/from_program.h"
+#include "src/tint/lang/core/ir/module.h"
 #endif  // TINT_BUILD_IR
 
 namespace {
diff --git a/src/tint/cmd/main.cc b/src/tint/cmd/main.cc
index e402541..ddcb53e 100644
--- a/src/tint/cmd/main.cc
+++ b/src/tint/cmd/main.cc
@@ -52,9 +52,9 @@
 #include "tint/tint.h"
 
 #if TINT_BUILD_IR
-#include "src/tint/ir/disassembler.h"  // nogncheck
-#include "src/tint/ir/from_program.h"  // nogncheck
-#include "src/tint/ir/module.h"        // nogncheck
+#include "src/tint/lang/core/ir/disassembler.h"  // nogncheck
+#include "src/tint/lang/core/ir/from_program.h"  // nogncheck
+#include "src/tint/lang/core/ir/module.h"        // nogncheck
 #endif                                 // TINT_BUILD_IR
 
 #if TINT_BUILD_SPV_WRITER
diff --git a/src/tint/fuzzers/tint_ir_roundtrip_fuzzer.cc b/src/tint/fuzzers/tint_ir_roundtrip_fuzzer.cc
index a79e234..b84cc73 100644
--- a/src/tint/fuzzers/tint_ir_roundtrip_fuzzer.cc
+++ b/src/tint/fuzzers/tint_ir_roundtrip_fuzzer.cc
@@ -17,8 +17,8 @@
 #include <unordered_set>
 
 #include "src/tint/fuzzers/apply_substitute_overrides.h"
-#include "src/tint/ir/from_program.h"
-#include "src/tint/ir/to_program.h"
+#include "src/tint/lang/core/ir/from_program.h"
+#include "src/tint/lang/core/ir/to_program.h"
 #include "src/tint/lang/wgsl/ast_writer/generator.h"
 #include "src/tint/lang/wgsl/reader/parser_impl.h"
 
diff --git a/src/tint/ir/access.cc b/src/tint/lang/core/ir/access.cc
similarity index 95%
rename from src/tint/ir/access.cc
rename to src/tint/lang/core/ir/access.cc
index 93d91a1..ce894c8 100644
--- a/src/tint/ir/access.cc
+++ b/src/tint/lang/core/ir/access.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/access.h"
+#include "src/tint/lang/core/ir/access.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/access.h b/src/tint/lang/core/ir/access.h
similarity index 90%
rename from src/tint/ir/access.h
rename to src/tint/lang/core/ir/access.h
index 68074cc..c00210d 100644
--- a/src/tint/ir/access.h
+++ b/src/tint/lang/core/ir/access.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_ACCESS_H_
-#define SRC_TINT_IR_ACCESS_H_
+#ifndef SRC_TINT_LANG_CORE_IR_ACCESS_H_
+#define SRC_TINT_LANG_CORE_IR_ACCESS_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -52,4 +52,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_ACCESS_H_
+#endif  // SRC_TINT_LANG_CORE_IR_ACCESS_H_
diff --git a/src/tint/ir/access_test.cc b/src/tint/lang/core/ir/access_test.cc
similarity index 94%
rename from src/tint/ir/access_test.cc
rename to src/tint/lang/core/ir/access_test.cc
index 7840cc3..20bb037 100644
--- a/src/tint/ir/access_test.cc
+++ b/src/tint/lang/core/ir/access_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/access.h"
+#include "src/tint/lang/core/ir/access.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 using namespace tint::builtin::fluent_types;  // NOLINT
 
diff --git a/src/tint/ir/binary.cc b/src/tint/lang/core/ir/binary.cc
similarity index 95%
rename from src/tint/ir/binary.cc
rename to src/tint/lang/core/ir/binary.cc
index b37c34b..2669a6f 100644
--- a/src/tint/ir/binary.cc
+++ b/src/tint/lang/core/ir/binary.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/binary.h"
+#include "src/tint/lang/core/ir/binary.h"
 #include "src/tint/utils/debug/debug.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Binary);
diff --git a/src/tint/ir/binary.h b/src/tint/lang/core/ir/binary.h
similarity index 92%
rename from src/tint/ir/binary.h
rename to src/tint/lang/core/ir/binary.h
index 4b7fbb0..8d469bb 100644
--- a/src/tint/ir/binary.h
+++ b/src/tint/lang/core/ir/binary.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_BINARY_H_
-#define SRC_TINT_IR_BINARY_H_
+#ifndef SRC_TINT_LANG_CORE_IR_BINARY_H_
+#define SRC_TINT_LANG_CORE_IR_BINARY_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -78,4 +78,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_BINARY_H_
+#endif  // SRC_TINT_LANG_CORE_IR_BINARY_H_
diff --git a/src/tint/ir/binary_test.cc b/src/tint/lang/core/ir/binary_test.cc
similarity index 98%
rename from src/tint/ir/binary_test.cc
rename to src/tint/lang/core/ir/binary_test.cc
index 0d3c151..537274e 100644
--- a/src/tint/ir/binary_test.cc
+++ b/src/tint/lang/core/ir/binary_test.cc
@@ -14,9 +14,9 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/binding_point.h b/src/tint/lang/core/ir/binding_point.h
similarity index 85%
rename from src/tint/ir/binding_point.h
rename to src/tint/lang/core/ir/binding_point.h
index 9db225e..f4b4411 100644
--- a/src/tint/ir/binding_point.h
+++ b/src/tint/lang/core/ir/binding_point.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_BINDING_POINT_H_
-#define SRC_TINT_IR_BINDING_POINT_H_
+#ifndef SRC_TINT_LANG_CORE_IR_BINDING_POINT_H_
+#define SRC_TINT_LANG_CORE_IR_BINDING_POINT_H_
 
 #include <cstdint>
 
@@ -29,4 +29,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_BINDING_POINT_H_
+#endif  // SRC_TINT_LANG_CORE_IR_BINDING_POINT_H_
diff --git a/src/tint/ir/bitcast.cc b/src/tint/lang/core/ir/bitcast.cc
similarity index 95%
rename from src/tint/ir/bitcast.cc
rename to src/tint/lang/core/ir/bitcast.cc
index 2563814..2fbb073 100644
--- a/src/tint/ir/bitcast.cc
+++ b/src/tint/lang/core/ir/bitcast.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/bitcast.h"
+#include "src/tint/lang/core/ir/bitcast.h"
 #include "src/tint/utils/debug/debug.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Bitcast);
diff --git a/src/tint/ir/bitcast.h b/src/tint/lang/core/ir/bitcast.h
similarity index 88%
rename from src/tint/ir/bitcast.h
rename to src/tint/lang/core/ir/bitcast.h
index b8d37dd..347e1fa 100644
--- a/src/tint/ir/bitcast.h
+++ b/src/tint/lang/core/ir/bitcast.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_BITCAST_H_
-#define SRC_TINT_IR_BITCAST_H_
+#ifndef SRC_TINT_LANG_CORE_IR_BITCAST_H_
+#define SRC_TINT_LANG_CORE_IR_BITCAST_H_
 
-#include "src/tint/ir/call.h"
+#include "src/tint/lang/core/ir/call.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -41,4 +41,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_BITCAST_H_
+#endif  // SRC_TINT_LANG_CORE_IR_BITCAST_H_
diff --git a/src/tint/ir/bitcast_test.cc b/src/tint/lang/core/ir/bitcast_test.cc
similarity index 91%
rename from src/tint/ir/bitcast_test.cc
rename to src/tint/lang/core/ir/bitcast_test.cc
index d9a975e..69e959b 100644
--- a/src/tint/ir/bitcast_test.cc
+++ b/src/tint/lang/core/ir/bitcast_test.cc
@@ -14,10 +14,10 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/block.cc b/src/tint/lang/core/ir/block.cc
similarity index 98%
rename from src/tint/ir/block.cc
rename to src/tint/lang/core/ir/block.cc
index c743065..1d4fb31 100644
--- a/src/tint/ir/block.cc
+++ b/src/tint/lang/core/ir/block.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/block.h"
+#include "src/tint/lang/core/ir/block.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Block);
 
diff --git a/src/tint/ir/block.h b/src/tint/lang/core/ir/block.h
similarity index 95%
rename from src/tint/ir/block.h
rename to src/tint/lang/core/ir/block.h
index c6b4143..ff70820 100644
--- a/src/tint/ir/block.h
+++ b/src/tint/lang/core/ir/block.h
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_BLOCK_H_
-#define SRC_TINT_IR_BLOCK_H_
+#ifndef SRC_TINT_LANG_CORE_IR_BLOCK_H_
+#define SRC_TINT_LANG_CORE_IR_BLOCK_H_
 
 #include <utility>
 
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/terminator.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/terminator.h"
 #include "src/tint/utils/containers/vector.h"
 
 // Forward declarations
@@ -145,4 +145,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_BLOCK_H_
+#endif  // SRC_TINT_LANG_CORE_IR_BLOCK_H_
diff --git a/src/tint/ir/block_param.cc b/src/tint/lang/core/ir/block_param.cc
similarity index 94%
rename from src/tint/ir/block_param.cc
rename to src/tint/lang/core/ir/block_param.cc
index 99aa827..d6c4cd6 100644
--- a/src/tint/ir/block_param.cc
+++ b/src/tint/lang/core/ir/block_param.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/block_param.h"
+#include "src/tint/lang/core/ir/block_param.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::BlockParam);
 
diff --git a/src/tint/ir/block_param.h b/src/tint/lang/core/ir/block_param.h
similarity index 85%
rename from src/tint/ir/block_param.h
rename to src/tint/lang/core/ir/block_param.h
index f255ac6..9483f13 100644
--- a/src/tint/ir/block_param.h
+++ b/src/tint/lang/core/ir/block_param.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_BLOCK_PARAM_H_
-#define SRC_TINT_IR_BLOCK_PARAM_H_
+#ifndef SRC_TINT_LANG_CORE_IR_BLOCK_PARAM_H_
+#define SRC_TINT_LANG_CORE_IR_BLOCK_PARAM_H_
 
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/value.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -38,4 +38,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_BLOCK_PARAM_H_
+#endif  // SRC_TINT_LANG_CORE_IR_BLOCK_PARAM_H_
diff --git a/src/tint/ir/block_param_test.cc b/src/tint/lang/core/ir/block_param_test.cc
similarity index 90%
rename from src/tint/ir/block_param_test.cc
rename to src/tint/lang/core/ir/block_param_test.cc
index 9f4141a..7096143 100644
--- a/src/tint/ir/block_param_test.cc
+++ b/src/tint/lang/core/ir/block_param_test.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/block_param.h"
+#include "src/tint/lang/core/ir/block_param.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/block_test.cc b/src/tint/lang/core/ir/block_test.cc
similarity index 99%
rename from src/tint/ir/block_test.cc
rename to src/tint/lang/core/ir/block_test.cc
index 79ae399..99f114d 100644
--- a/src/tint/ir/block_test.cc
+++ b/src/tint/lang/core/ir/block_test.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/block.h"
+#include "src/tint/lang/core/ir/block.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/break_if.cc b/src/tint/lang/core/ir/break_if.cc
similarity index 85%
rename from src/tint/ir/break_if.cc
rename to src/tint/lang/core/ir/break_if.cc
index 3b34c28..7061396c 100644
--- a/src/tint/ir/break_if.cc
+++ b/src/tint/lang/core/ir/break_if.cc
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/break_if.h"
+#include "src/tint/lang/core/ir/break_if.h"
 
 #include <utility>
 
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::BreakIf);
 
diff --git a/src/tint/ir/break_if.h b/src/tint/lang/core/ir/break_if.h
similarity index 89%
rename from src/tint/ir/break_if.h
rename to src/tint/lang/core/ir/break_if.h
index bfbac0c..791c328 100644
--- a/src/tint/ir/break_if.h
+++ b/src/tint/lang/core/ir/break_if.h
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_BREAK_IF_H_
-#define SRC_TINT_IR_BREAK_IF_H_
+#ifndef SRC_TINT_LANG_CORE_IR_BREAK_IF_H_
+#define SRC_TINT_LANG_CORE_IR_BREAK_IF_H_
 
-#include "src/tint/ir/terminator.h"
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/terminator.h"
+#include "src/tint/lang/core/ir/value.h"
 #include "src/tint/utils/rtti/castable.h"
 
 // Forward declarations
@@ -62,4 +62,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_BREAK_IF_H_
+#endif  // SRC_TINT_LANG_CORE_IR_BREAK_IF_H_
diff --git a/src/tint/ir/break_if_test.cc b/src/tint/lang/core/ir/break_if_test.cc
similarity index 94%
rename from src/tint/ir/break_if_test.cc
rename to src/tint/lang/core/ir/break_if_test.cc
index 506d93f..751c377 100644
--- a/src/tint/ir/break_if_test.cc
+++ b/src/tint/lang/core/ir/break_if_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/break_if.h"
+#include "src/tint/lang/core/ir/break_if.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/builder.cc b/src/tint/lang/core/ir/builder.cc
similarity index 98%
rename from src/tint/ir/builder.cc
rename to src/tint/lang/core/ir/builder.cc
index 9aac252..27fda7e 100644
--- a/src/tint/ir/builder.cc
+++ b/src/tint/lang/core/ir/builder.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/builder.h"
+#include "src/tint/lang/core/ir/builder.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/builder.h b/src/tint/lang/core/ir/builder.h
similarity index 94%
rename from src/tint/ir/builder.h
rename to src/tint/lang/core/ir/builder.h
index c224f36..c6eedcc 100644
--- a/src/tint/ir/builder.h
+++ b/src/tint/lang/core/ir/builder.h
@@ -12,51 +12,51 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_BUILDER_H_
-#define SRC_TINT_IR_BUILDER_H_
+#ifndef SRC_TINT_LANG_CORE_IR_BUILDER_H_
+#define SRC_TINT_LANG_CORE_IR_BUILDER_H_
 
 #include <utility>
 
-#include "src/tint/ir/access.h"
-#include "src/tint/ir/binary.h"
-#include "src/tint/ir/bitcast.h"
-#include "src/tint/ir/block_param.h"
-#include "src/tint/ir/break_if.h"
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/construct.h"
-#include "src/tint/ir/continue.h"
-#include "src/tint/ir/convert.h"
-#include "src/tint/ir/core_builtin_call.h"
-#include "src/tint/ir/discard.h"
-#include "src/tint/ir/exit_if.h"
-#include "src/tint/ir/exit_loop.h"
-#include "src/tint/ir/exit_switch.h"
-#include "src/tint/ir/function.h"
-#include "src/tint/ir/function_param.h"
-#include "src/tint/ir/if.h"
-#include "src/tint/ir/instruction_result.h"
-#include "src/tint/ir/intrinsic_call.h"
-#include "src/tint/ir/let.h"
-#include "src/tint/ir/load.h"
-#include "src/tint/ir/load_vector_element.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/module.h"
-#include "src/tint/ir/multi_in_block.h"
-#include "src/tint/ir/next_iteration.h"
-#include "src/tint/ir/return.h"
-#include "src/tint/ir/store.h"
-#include "src/tint/ir/store_vector_element.h"
-#include "src/tint/ir/switch.h"
-#include "src/tint/ir/swizzle.h"
-#include "src/tint/ir/terminate_invocation.h"
-#include "src/tint/ir/unary.h"
-#include "src/tint/ir/unreachable.h"
-#include "src/tint/ir/user_call.h"
-#include "src/tint/ir/value.h"
-#include "src/tint/ir/var.h"
 #include "src/tint/lang/core/constant/composite.h"
 #include "src/tint/lang/core/constant/scalar.h"
 #include "src/tint/lang/core/constant/splat.h"
+#include "src/tint/lang/core/ir/access.h"
+#include "src/tint/lang/core/ir/binary.h"
+#include "src/tint/lang/core/ir/bitcast.h"
+#include "src/tint/lang/core/ir/block_param.h"
+#include "src/tint/lang/core/ir/break_if.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/construct.h"
+#include "src/tint/lang/core/ir/continue.h"
+#include "src/tint/lang/core/ir/convert.h"
+#include "src/tint/lang/core/ir/core_builtin_call.h"
+#include "src/tint/lang/core/ir/discard.h"
+#include "src/tint/lang/core/ir/exit_if.h"
+#include "src/tint/lang/core/ir/exit_loop.h"
+#include "src/tint/lang/core/ir/exit_switch.h"
+#include "src/tint/lang/core/ir/function.h"
+#include "src/tint/lang/core/ir/function_param.h"
+#include "src/tint/lang/core/ir/if.h"
+#include "src/tint/lang/core/ir/instruction_result.h"
+#include "src/tint/lang/core/ir/intrinsic_call.h"
+#include "src/tint/lang/core/ir/let.h"
+#include "src/tint/lang/core/ir/load.h"
+#include "src/tint/lang/core/ir/load_vector_element.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/next_iteration.h"
+#include "src/tint/lang/core/ir/return.h"
+#include "src/tint/lang/core/ir/store.h"
+#include "src/tint/lang/core/ir/store_vector_element.h"
+#include "src/tint/lang/core/ir/switch.h"
+#include "src/tint/lang/core/ir/swizzle.h"
+#include "src/tint/lang/core/ir/terminate_invocation.h"
+#include "src/tint/lang/core/ir/unary.h"
+#include "src/tint/lang/core/ir/unreachable.h"
+#include "src/tint/lang/core/ir/user_call.h"
+#include "src/tint/lang/core/ir/value.h"
+#include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/core/type/bool.h"
 #include "src/tint/lang/core/type/f16.h"
 #include "src/tint/lang/core/type/f32.h"
@@ -839,4 +839,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_BUILDER_H_
+#endif  // SRC_TINT_LANG_CORE_IR_BUILDER_H_
diff --git a/src/tint/ir/builtin_call.cc b/src/tint/lang/core/ir/builtin_call.cc
similarity index 95%
rename from src/tint/ir/builtin_call.cc
rename to src/tint/lang/core/ir/builtin_call.cc
index 9bf890c..d3b19f7 100644
--- a/src/tint/ir/builtin_call.cc
+++ b/src/tint/lang/core/ir/builtin_call.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/builtin_call.h"
+#include "src/tint/lang/core/ir/builtin_call.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/builtin_call.h b/src/tint/lang/core/ir/builtin_call.h
similarity index 86%
rename from src/tint/ir/builtin_call.h
rename to src/tint/lang/core/ir/builtin_call.h
index 803f9be..d29a8ce 100644
--- a/src/tint/ir/builtin_call.h
+++ b/src/tint/lang/core/ir/builtin_call.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_BUILTIN_CALL_H_
-#define SRC_TINT_IR_BUILTIN_CALL_H_
+#ifndef SRC_TINT_LANG_CORE_IR_BUILTIN_CALL_H_
+#define SRC_TINT_LANG_CORE_IR_BUILTIN_CALL_H_
 
-#include "src/tint/ir/call.h"
+#include "src/tint/lang/core/ir/call.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -35,4 +35,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_BUILTIN_CALL_H_
+#endif  // SRC_TINT_LANG_CORE_IR_BUILTIN_CALL_H_
diff --git a/src/tint/ir/call.cc b/src/tint/lang/core/ir/call.cc
similarity index 94%
rename from src/tint/ir/call.cc
rename to src/tint/lang/core/ir/call.cc
index cacdaa4..f470903 100644
--- a/src/tint/ir/call.cc
+++ b/src/tint/lang/core/ir/call.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/call.h"
+#include "src/tint/lang/core/ir/call.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/call.h b/src/tint/lang/core/ir/call.h
similarity index 87%
rename from src/tint/ir/call.h
rename to src/tint/lang/core/ir/call.h
index eb01382..72f650a 100644
--- a/src/tint/ir/call.h
+++ b/src/tint/lang/core/ir/call.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_CALL_H_
-#define SRC_TINT_IR_CALL_H_
+#ifndef SRC_TINT_LANG_CORE_IR_CALL_H_
+#define SRC_TINT_LANG_CORE_IR_CALL_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -39,4 +39,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_CALL_H_
+#endif  // SRC_TINT_LANG_CORE_IR_CALL_H_
diff --git a/src/tint/ir/constant.cc b/src/tint/lang/core/ir/constant.cc
similarity index 94%
rename from src/tint/ir/constant.cc
rename to src/tint/lang/core/ir/constant.cc
index 6ae678a..cf09c50 100644
--- a/src/tint/ir/constant.cc
+++ b/src/tint/lang/core/ir/constant.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/constant.h"
+#include "src/tint/lang/core/ir/constant.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Constant);
 
diff --git a/src/tint/ir/constant.h b/src/tint/lang/core/ir/constant.h
similarity index 87%
rename from src/tint/ir/constant.h
rename to src/tint/lang/core/ir/constant.h
index a6023ea..c358013 100644
--- a/src/tint/ir/constant.h
+++ b/src/tint/lang/core/ir/constant.h
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_CONSTANT_H_
-#define SRC_TINT_IR_CONSTANT_H_
+#ifndef SRC_TINT_LANG_CORE_IR_CONSTANT_H_
+#define SRC_TINT_LANG_CORE_IR_CONSTANT_H_
 
-#include "src/tint/ir/value.h"
 #include "src/tint/lang/core/constant/value.h"
+#include "src/tint/lang/core/ir/value.h"
 
 namespace tint::ir {
 
@@ -40,4 +40,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_CONSTANT_H_
+#endif  // SRC_TINT_LANG_CORE_IR_CONSTANT_H_
diff --git a/src/tint/ir/constant_test.cc b/src/tint/lang/core/ir/constant_test.cc
similarity index 96%
rename from src/tint/ir/constant_test.cc
rename to src/tint/lang/core/ir/constant_test.cc
index 5339e41..df59cc0 100644
--- a/src/tint/ir/constant_test.cc
+++ b/src/tint/lang/core/ir/constant_test.cc
@@ -13,9 +13,9 @@
 // limitations under the License.
 
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/ir_test_helper.h"
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/value.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/construct.cc b/src/tint/lang/core/ir/construct.cc
similarity index 95%
rename from src/tint/ir/construct.cc
rename to src/tint/lang/core/ir/construct.cc
index 7b49e92..990b625 100644
--- a/src/tint/ir/construct.cc
+++ b/src/tint/lang/core/ir/construct.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/construct.h"
+#include "src/tint/lang/core/ir/construct.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/construct.h b/src/tint/lang/core/ir/construct.h
similarity index 87%
rename from src/tint/ir/construct.h
rename to src/tint/lang/core/ir/construct.h
index 24ce9ab..d125826 100644
--- a/src/tint/ir/construct.h
+++ b/src/tint/lang/core/ir/construct.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_CONSTRUCT_H_
-#define SRC_TINT_IR_CONSTRUCT_H_
+#ifndef SRC_TINT_LANG_CORE_IR_CONSTRUCT_H_
+#define SRC_TINT_LANG_CORE_IR_CONSTRUCT_H_
 
-#include "src/tint/ir/call.h"
+#include "src/tint/lang/core/ir/call.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -38,4 +38,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_CONSTRUCT_H_
+#endif  // SRC_TINT_LANG_CORE_IR_CONSTRUCT_H_
diff --git a/src/tint/ir/construct_test.cc b/src/tint/lang/core/ir/construct_test.cc
similarity index 94%
rename from src/tint/ir/construct_test.cc
rename to src/tint/lang/core/ir/construct_test.cc
index 956aefd..81b8728 100644
--- a/src/tint/ir/construct_test.cc
+++ b/src/tint/lang/core/ir/construct_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/construct.h"
+#include "src/tint/lang/core/ir/construct.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/continue.cc b/src/tint/lang/core/ir/continue.cc
similarity index 84%
rename from src/tint/ir/continue.cc
rename to src/tint/lang/core/ir/continue.cc
index 5bb29ff..06b3517 100644
--- a/src/tint/ir/continue.cc
+++ b/src/tint/lang/core/ir/continue.cc
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/continue.h"
+#include "src/tint/lang/core/ir/continue.h"
 
 #include <utility>
 
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Continue);
 
diff --git a/src/tint/ir/continue.h b/src/tint/lang/core/ir/continue.h
similarity index 89%
rename from src/tint/ir/continue.h
rename to src/tint/lang/core/ir/continue.h
index 03e4826..12e067b 100644
--- a/src/tint/ir/continue.h
+++ b/src/tint/lang/core/ir/continue.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_CONTINUE_H_
-#define SRC_TINT_IR_CONTINUE_H_
+#ifndef SRC_TINT_LANG_CORE_IR_CONTINUE_H_
+#define SRC_TINT_LANG_CORE_IR_CONTINUE_H_
 
-#include "src/tint/ir/terminator.h"
+#include "src/tint/lang/core/ir/terminator.h"
 #include "src/tint/utils/rtti/castable.h"
 
 // Forward declarations
@@ -49,4 +49,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_CONTINUE_H_
+#endif  // SRC_TINT_LANG_CORE_IR_CONTINUE_H_
diff --git a/src/tint/ir/continue_test.cc b/src/tint/lang/core/ir/continue_test.cc
similarity index 94%
rename from src/tint/ir/continue_test.cc
rename to src/tint/lang/core/ir/continue_test.cc
index d16defb..e4778d0 100644
--- a/src/tint/ir/continue_test.cc
+++ b/src/tint/lang/core/ir/continue_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/continue.h"
+#include "src/tint/lang/core/ir/continue.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/control_instruction.cc b/src/tint/lang/core/ir/control_instruction.cc
similarity index 94%
rename from src/tint/ir/control_instruction.cc
rename to src/tint/lang/core/ir/control_instruction.cc
index a5c3f0f..a51d0de 100644
--- a/src/tint/ir/control_instruction.cc
+++ b/src/tint/lang/core/ir/control_instruction.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/control_instruction.h"
+#include "src/tint/lang/core/ir/control_instruction.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::ControlInstruction);
 
diff --git a/src/tint/ir/control_instruction.h b/src/tint/lang/core/ir/control_instruction.h
similarity index 92%
rename from src/tint/ir/control_instruction.h
rename to src/tint/lang/core/ir/control_instruction.h
index 63877cc..143704f 100644
--- a/src/tint/ir/control_instruction.h
+++ b/src/tint/lang/core/ir/control_instruction.h
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_CONTROL_INSTRUCTION_H_
-#define SRC_TINT_IR_CONTROL_INSTRUCTION_H_
+#ifndef SRC_TINT_LANG_CORE_IR_CONTROL_INSTRUCTION_H_
+#define SRC_TINT_LANG_CORE_IR_CONTROL_INSTRUCTION_H_
 
 #include <utility>
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 
 // Forward declarations
 namespace tint::ir {
@@ -84,4 +84,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_CONTROL_INSTRUCTION_H_
+#endif  // SRC_TINT_LANG_CORE_IR_CONTROL_INSTRUCTION_H_
diff --git a/src/tint/ir/convert.cc b/src/tint/lang/core/ir/convert.cc
similarity index 95%
rename from src/tint/ir/convert.cc
rename to src/tint/lang/core/ir/convert.cc
index e640fd7..00ba18f 100644
--- a/src/tint/ir/convert.cc
+++ b/src/tint/lang/core/ir/convert.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/convert.h"
+#include "src/tint/lang/core/ir/convert.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/convert.h b/src/tint/lang/core/ir/convert.h
similarity index 88%
rename from src/tint/ir/convert.h
rename to src/tint/lang/core/ir/convert.h
index b4e5641..ccd5eab 100644
--- a/src/tint/ir/convert.h
+++ b/src/tint/lang/core/ir/convert.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_CONVERT_H_
-#define SRC_TINT_IR_CONVERT_H_
+#ifndef SRC_TINT_LANG_CORE_IR_CONVERT_H_
+#define SRC_TINT_LANG_CORE_IR_CONVERT_H_
 
-#include "src/tint/ir/call.h"
+#include "src/tint/lang/core/ir/call.h"
 #include "src/tint/lang/core/type/type.h"
 #include "src/tint/utils/rtti/castable.h"
 
@@ -39,4 +39,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_CONVERT_H_
+#endif  // SRC_TINT_LANG_CORE_IR_CONVERT_H_
diff --git a/src/tint/ir/convert_test.cc b/src/tint/lang/core/ir/convert_test.cc
similarity index 92%
rename from src/tint/ir/convert_test.cc
rename to src/tint/lang/core/ir/convert_test.cc
index 5851d80..3a5419e 100644
--- a/src/tint/ir/convert_test.cc
+++ b/src/tint/lang/core/ir/convert_test.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/convert.h"
+#include "src/tint/lang/core/ir/convert.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/core_builtin_call.cc b/src/tint/lang/core/ir/core_builtin_call.cc
similarity index 95%
rename from src/tint/ir/core_builtin_call.cc
rename to src/tint/lang/core/ir/core_builtin_call.cc
index 6f888bd..94f26bb 100644
--- a/src/tint/ir/core_builtin_call.cc
+++ b/src/tint/lang/core/ir/core_builtin_call.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/core_builtin_call.h"
+#include "src/tint/lang/core/ir/core_builtin_call.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/core_builtin_call.h b/src/tint/lang/core/ir/core_builtin_call.h
similarity index 87%
rename from src/tint/ir/core_builtin_call.h
rename to src/tint/lang/core/ir/core_builtin_call.h
index a81175a..aab5ffe 100644
--- a/src/tint/ir/core_builtin_call.h
+++ b/src/tint/lang/core/ir/core_builtin_call.h
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_CORE_BUILTIN_CALL_H_
-#define SRC_TINT_IR_CORE_BUILTIN_CALL_H_
+#ifndef SRC_TINT_LANG_CORE_IR_CORE_BUILTIN_CALL_H_
+#define SRC_TINT_LANG_CORE_IR_CORE_BUILTIN_CALL_H_
 
-#include "src/tint/ir/builtin_call.h"
 #include "src/tint/lang/core/builtin/function.h"
+#include "src/tint/lang/core/ir/builtin_call.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -45,4 +45,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_CORE_BUILTIN_CALL_H_
+#endif  // SRC_TINT_LANG_CORE_IR_CORE_BUILTIN_CALL_H_
diff --git a/src/tint/ir/core_builtin_call_test.cc b/src/tint/lang/core/ir/core_builtin_call_test.cc
similarity index 95%
rename from src/tint/ir/core_builtin_call_test.cc
rename to src/tint/lang/core/ir/core_builtin_call_test.cc
index 72fd728..b46fc7f 100644
--- a/src/tint/ir/core_builtin_call_test.cc
+++ b/src/tint/lang/core/ir/core_builtin_call_test.cc
@@ -14,8 +14,8 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/block_param.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/block_param.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/disassembler.cc b/src/tint/lang/core/ir/disassembler.cc
similarity index 94%
rename from src/tint/ir/disassembler.cc
rename to src/tint/lang/core/ir/disassembler.cc
index c1dbdb5..c3670ea 100644
--- a/src/tint/ir/disassembler.cc
+++ b/src/tint/lang/core/ir/disassembler.cc
@@ -12,44 +12,44 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/disassembler.h"
+#include "src/tint/lang/core/ir/disassembler.h"
 
-#include "src//tint/ir/unary.h"
-#include "src/tint/ir/access.h"
-#include "src/tint/ir/binary.h"
-#include "src/tint/ir/bitcast.h"
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/block_param.h"
-#include "src/tint/ir/break_if.h"
-#include "src/tint/ir/construct.h"
-#include "src/tint/ir/continue.h"
-#include "src/tint/ir/convert.h"
-#include "src/tint/ir/core_builtin_call.h"
-#include "src/tint/ir/discard.h"
-#include "src/tint/ir/exit_if.h"
-#include "src/tint/ir/exit_loop.h"
-#include "src/tint/ir/exit_switch.h"
-#include "src/tint/ir/if.h"
-#include "src/tint/ir/instruction_result.h"
-#include "src/tint/ir/intrinsic_call.h"
-#include "src/tint/ir/let.h"
-#include "src/tint/ir/load.h"
-#include "src/tint/ir/load_vector_element.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/multi_in_block.h"
-#include "src/tint/ir/next_iteration.h"
-#include "src/tint/ir/return.h"
-#include "src/tint/ir/store.h"
-#include "src/tint/ir/store_vector_element.h"
-#include "src/tint/ir/switch.h"
-#include "src/tint/ir/swizzle.h"
-#include "src/tint/ir/terminate_invocation.h"
-#include "src/tint/ir/unreachable.h"
-#include "src/tint/ir/user_call.h"
-#include "src/tint/ir/var.h"
+#include "src//tint/lang/core/ir/unary.h"
 #include "src/tint/lang/core/constant/composite.h"
 #include "src/tint/lang/core/constant/scalar.h"
 #include "src/tint/lang/core/constant/splat.h"
+#include "src/tint/lang/core/ir/access.h"
+#include "src/tint/lang/core/ir/binary.h"
+#include "src/tint/lang/core/ir/bitcast.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/block_param.h"
+#include "src/tint/lang/core/ir/break_if.h"
+#include "src/tint/lang/core/ir/construct.h"
+#include "src/tint/lang/core/ir/continue.h"
+#include "src/tint/lang/core/ir/convert.h"
+#include "src/tint/lang/core/ir/core_builtin_call.h"
+#include "src/tint/lang/core/ir/discard.h"
+#include "src/tint/lang/core/ir/exit_if.h"
+#include "src/tint/lang/core/ir/exit_loop.h"
+#include "src/tint/lang/core/ir/exit_switch.h"
+#include "src/tint/lang/core/ir/if.h"
+#include "src/tint/lang/core/ir/instruction_result.h"
+#include "src/tint/lang/core/ir/intrinsic_call.h"
+#include "src/tint/lang/core/ir/let.h"
+#include "src/tint/lang/core/ir/load.h"
+#include "src/tint/lang/core/ir/load_vector_element.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/next_iteration.h"
+#include "src/tint/lang/core/ir/return.h"
+#include "src/tint/lang/core/ir/store.h"
+#include "src/tint/lang/core/ir/store_vector_element.h"
+#include "src/tint/lang/core/ir/switch.h"
+#include "src/tint/lang/core/ir/swizzle.h"
+#include "src/tint/lang/core/ir/terminate_invocation.h"
+#include "src/tint/lang/core/ir/unreachable.h"
+#include "src/tint/lang/core/ir/user_call.h"
+#include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/core/type/struct.h"
 #include "src/tint/lang/core/type/type.h"
 #include "src/tint/utils/macros/scoped_assignment.h"
diff --git a/src/tint/ir/disassembler.h b/src/tint/lang/core/ir/disassembler.h
similarity index 92%
rename from src/tint/ir/disassembler.h
rename to src/tint/lang/core/ir/disassembler.h
index e07106a..9b26d02 100644
--- a/src/tint/ir/disassembler.h
+++ b/src/tint/lang/core/ir/disassembler.h
@@ -12,19 +12,19 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_DISASSEMBLER_H_
-#define SRC_TINT_IR_DISASSEMBLER_H_
+#ifndef SRC_TINT_LANG_CORE_IR_DISASSEMBLER_H_
+#define SRC_TINT_LANG_CORE_IR_DISASSEMBLER_H_
 
 #include <string>
 
-#include "src/tint/ir/binary.h"
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/call.h"
-#include "src/tint/ir/if.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/module.h"
-#include "src/tint/ir/switch.h"
-#include "src/tint/ir/unary.h"
+#include "src/tint/lang/core/ir/binary.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/call.h"
+#include "src/tint/lang/core/ir/if.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/lang/core/ir/switch.h"
+#include "src/tint/lang/core/ir/unary.h"
 #include "src/tint/utils/containers/hashmap.h"
 #include "src/tint/utils/containers/hashset.h"
 #include "src/tint/utils/text/string_stream.h"
@@ -168,4 +168,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_DISASSEMBLER_H_
+#endif  // SRC_TINT_LANG_CORE_IR_DISASSEMBLER_H_
diff --git a/src/tint/ir/discard.cc b/src/tint/lang/core/ir/discard.cc
similarity index 94%
rename from src/tint/ir/discard.cc
rename to src/tint/lang/core/ir/discard.cc
index ad326f7..c0220e1 100644
--- a/src/tint/ir/discard.cc
+++ b/src/tint/lang/core/ir/discard.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/discard.h"
+#include "src/tint/lang/core/ir/discard.h"
 #include "src/tint/lang/core/type/void.h"
 #include "src/tint/utils/debug/debug.h"
 
diff --git a/src/tint/ir/discard.h b/src/tint/lang/core/ir/discard.h
similarity index 85%
rename from src/tint/ir/discard.h
rename to src/tint/lang/core/ir/discard.h
index d0cd3e3..c304a82 100644
--- a/src/tint/ir/discard.h
+++ b/src/tint/lang/core/ir/discard.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_DISCARD_H_
-#define SRC_TINT_IR_DISCARD_H_
+#ifndef SRC_TINT_LANG_CORE_IR_DISCARD_H_
+#define SRC_TINT_LANG_CORE_IR_DISCARD_H_
 
-#include "src/tint/ir/call.h"
+#include "src/tint/lang/core/ir/call.h"
 #include "src/tint/utils/debug/debug.h"
 #include "src/tint/utils/rtti/castable.h"
 
@@ -34,4 +34,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_DISCARD_H_
+#endif  // SRC_TINT_LANG_CORE_IR_DISCARD_H_
diff --git a/src/tint/ir/discard_test.cc b/src/tint/lang/core/ir/discard_test.cc
similarity index 87%
rename from src/tint/ir/discard_test.cc
rename to src/tint/lang/core/ir/discard_test.cc
index d6954de..341a096 100644
--- a/src/tint/ir/discard_test.cc
+++ b/src/tint/lang/core/ir/discard_test.cc
@@ -13,9 +13,9 @@
 // limitations under the License.
 
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/exit.cc b/src/tint/lang/core/ir/exit.cc
similarity index 91%
rename from src/tint/ir/exit.cc
rename to src/tint/lang/core/ir/exit.cc
index fd39edd..91934d1 100644
--- a/src/tint/ir/exit.cc
+++ b/src/tint/lang/core/ir/exit.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/exit.h"
+#include "src/tint/lang/core/ir/exit.h"
 
-#include "src/tint/ir/control_instruction.h"
+#include "src/tint/lang/core/ir/control_instruction.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Exit);
 
diff --git a/src/tint/ir/exit.h b/src/tint/lang/core/ir/exit.h
similarity index 89%
rename from src/tint/ir/exit.h
rename to src/tint/lang/core/ir/exit.h
index fcf5fb3..22e9e2b 100644
--- a/src/tint/ir/exit.h
+++ b/src/tint/lang/core/ir/exit.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_EXIT_H_
-#define SRC_TINT_IR_EXIT_H_
+#ifndef SRC_TINT_LANG_CORE_IR_EXIT_H_
+#define SRC_TINT_LANG_CORE_IR_EXIT_H_
 
-#include "src/tint/ir/terminator.h"
+#include "src/tint/lang/core/ir/terminator.h"
 
 // Forward declarations
 namespace tint::ir {
@@ -46,4 +46,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_EXIT_H_
+#endif  // SRC_TINT_LANG_CORE_IR_EXIT_H_
diff --git a/src/tint/ir/exit_if.cc b/src/tint/lang/core/ir/exit_if.cc
similarity index 88%
rename from src/tint/ir/exit_if.cc
rename to src/tint/lang/core/ir/exit_if.cc
index 7c36a05..b7c46d0 100644
--- a/src/tint/ir/exit_if.cc
+++ b/src/tint/lang/core/ir/exit_if.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/exit_if.h"
+#include "src/tint/lang/core/ir/exit_if.h"
 
 #include <utility>
 
-#include "src/tint/ir/if.h"
-#include "src/tint/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/if.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::ExitIf);
 
diff --git a/src/tint/ir/exit_if.h b/src/tint/lang/core/ir/exit_if.h
similarity index 89%
rename from src/tint/ir/exit_if.h
rename to src/tint/lang/core/ir/exit_if.h
index 3fdc826..fe9127d 100644
--- a/src/tint/ir/exit_if.h
+++ b/src/tint/lang/core/ir/exit_if.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_EXIT_IF_H_
-#define SRC_TINT_IR_EXIT_IF_H_
+#ifndef SRC_TINT_LANG_CORE_IR_EXIT_IF_H_
+#define SRC_TINT_LANG_CORE_IR_EXIT_IF_H_
 
-#include "src/tint/ir/exit.h"
+#include "src/tint/lang/core/ir/exit.h"
 #include "src/tint/utils/rtti/castable.h"
 
 // Forward declarations
@@ -50,4 +50,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_EXIT_IF_H_
+#endif  // SRC_TINT_LANG_CORE_IR_EXIT_IF_H_
diff --git a/src/tint/ir/exit_if_test.cc b/src/tint/lang/core/ir/exit_if_test.cc
similarity index 94%
rename from src/tint/ir/exit_if_test.cc
rename to src/tint/lang/core/ir/exit_if_test.cc
index b37b95e..4610695 100644
--- a/src/tint/ir/exit_if_test.cc
+++ b/src/tint/lang/core/ir/exit_if_test.cc
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/exit_if.h"
+#include "src/tint/lang/core/ir/exit_if.h"
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/exit_loop.cc b/src/tint/lang/core/ir/exit_loop.cc
similarity index 85%
rename from src/tint/ir/exit_loop.cc
rename to src/tint/lang/core/ir/exit_loop.cc
index 39a59e1..b7b49b9 100644
--- a/src/tint/ir/exit_loop.cc
+++ b/src/tint/lang/core/ir/exit_loop.cc
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/exit_loop.h"
+#include "src/tint/lang/core/ir/exit_loop.h"
 
 #include <utility>
 
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::ExitLoop);
 
diff --git a/src/tint/ir/exit_loop.h b/src/tint/lang/core/ir/exit_loop.h
similarity index 89%
rename from src/tint/ir/exit_loop.h
rename to src/tint/lang/core/ir/exit_loop.h
index 1dcb350..8e6f6d4 100644
--- a/src/tint/ir/exit_loop.h
+++ b/src/tint/lang/core/ir/exit_loop.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_EXIT_LOOP_H_
-#define SRC_TINT_IR_EXIT_LOOP_H_
+#ifndef SRC_TINT_LANG_CORE_IR_EXIT_LOOP_H_
+#define SRC_TINT_LANG_CORE_IR_EXIT_LOOP_H_
 
-#include "src/tint/ir/exit.h"
+#include "src/tint/lang/core/ir/exit.h"
 #include "src/tint/utils/rtti/castable.h"
 
 // Forward declarations
@@ -50,4 +50,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_EXIT_LOOP_H_
+#endif  // SRC_TINT_LANG_CORE_IR_EXIT_LOOP_H_
diff --git a/src/tint/ir/exit_loop_test.cc b/src/tint/lang/core/ir/exit_loop_test.cc
similarity index 93%
rename from src/tint/ir/exit_loop_test.cc
rename to src/tint/lang/core/ir/exit_loop_test.cc
index 5a69d0f..bd54e14 100644
--- a/src/tint/ir/exit_loop_test.cc
+++ b/src/tint/lang/core/ir/exit_loop_test.cc
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/exit_loop.h"
+#include "src/tint/lang/core/ir/exit_loop.h"
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/exit_switch.cc b/src/tint/lang/core/ir/exit_switch.cc
similarity index 88%
rename from src/tint/ir/exit_switch.cc
rename to src/tint/lang/core/ir/exit_switch.cc
index d56c310..96192c5 100644
--- a/src/tint/ir/exit_switch.cc
+++ b/src/tint/lang/core/ir/exit_switch.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/exit_switch.h"
+#include "src/tint/lang/core/ir/exit_switch.h"
 
 #include <utility>
 
-#include "src/tint/ir/multi_in_block.h"
-#include "src/tint/ir/switch.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/switch.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::ExitSwitch);
 
diff --git a/src/tint/ir/exit_switch.h b/src/tint/lang/core/ir/exit_switch.h
similarity index 89%
rename from src/tint/ir/exit_switch.h
rename to src/tint/lang/core/ir/exit_switch.h
index eb7652f..f13d8d4 100644
--- a/src/tint/ir/exit_switch.h
+++ b/src/tint/lang/core/ir/exit_switch.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_EXIT_SWITCH_H_
-#define SRC_TINT_IR_EXIT_SWITCH_H_
+#ifndef SRC_TINT_LANG_CORE_IR_EXIT_SWITCH_H_
+#define SRC_TINT_LANG_CORE_IR_EXIT_SWITCH_H_
 
-#include "src/tint/ir/exit.h"
+#include "src/tint/lang/core/ir/exit.h"
 #include "src/tint/utils/rtti/castable.h"
 
 // Forward declarations
@@ -50,4 +50,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_EXIT_SWITCH_H_
+#endif  // SRC_TINT_LANG_CORE_IR_EXIT_SWITCH_H_
diff --git a/src/tint/ir/exit_switch_test.cc b/src/tint/lang/core/ir/exit_switch_test.cc
similarity index 94%
rename from src/tint/ir/exit_switch_test.cc
rename to src/tint/lang/core/ir/exit_switch_test.cc
index 3ab84df..a2d3b97 100644
--- a/src/tint/ir/exit_switch_test.cc
+++ b/src/tint/lang/core/ir/exit_switch_test.cc
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/exit_switch.h"
+#include "src/tint/lang/core/ir/exit_switch.h"
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/from_program.cc b/src/tint/lang/core/ir/from_program.cc
similarity index 98%
rename from src/tint/ir/from_program.cc
rename to src/tint/lang/core/ir/from_program.cc
index f0b8101..10c4c3e 100644
--- a/src/tint/ir/from_program.cc
+++ b/src/tint/lang/core/ir/from_program.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/from_program.h"
+#include "src/tint/lang/core/ir/from_program.h"
 
 #include <iostream>
 #include <unordered_map>
@@ -20,18 +20,18 @@
 #include <variant>
 #include <vector>
 
-#include "src/tint/ir/block_param.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/exit_if.h"
-#include "src/tint/ir/exit_loop.h"
-#include "src/tint/ir/exit_switch.h"
-#include "src/tint/ir/function.h"
-#include "src/tint/ir/if.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/module.h"
-#include "src/tint/ir/store.h"
-#include "src/tint/ir/switch.h"
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/block_param.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/exit_if.h"
+#include "src/tint/lang/core/ir/exit_loop.h"
+#include "src/tint/lang/core/ir/exit_switch.h"
+#include "src/tint/lang/core/ir/function.h"
+#include "src/tint/lang/core/ir/if.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/lang/core/ir/store.h"
+#include "src/tint/lang/core/ir/switch.h"
+#include "src/tint/lang/core/ir/value.h"
 #include "src/tint/lang/core/type/pointer.h"
 #include "src/tint/lang/core/type/reference.h"
 #include "src/tint/lang/core/type/struct.h"
diff --git a/src/tint/ir/from_program.h b/src/tint/lang/core/ir/from_program.h
similarity index 87%
rename from src/tint/ir/from_program.h
rename to src/tint/lang/core/ir/from_program.h
index 3779fea..2fbcadd 100644
--- a/src/tint/ir/from_program.h
+++ b/src/tint/lang/core/ir/from_program.h
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_FROM_PROGRAM_H_
-#define SRC_TINT_IR_FROM_PROGRAM_H_
+#ifndef SRC_TINT_LANG_CORE_IR_FROM_PROGRAM_H_
+#define SRC_TINT_LANG_CORE_IR_FROM_PROGRAM_H_
 
 #include <string>
 
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/utils/result/result.h"
 
 // Forward Declarations
@@ -39,4 +39,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_FROM_PROGRAM_H_
+#endif  // SRC_TINT_LANG_CORE_IR_FROM_PROGRAM_H_
diff --git a/src/tint/ir/from_program_accessor_test.cc b/src/tint/lang/core/ir/from_program_accessor_test.cc
similarity index 98%
rename from src/tint/ir/from_program_accessor_test.cc
rename to src/tint/lang/core/ir/from_program_accessor_test.cc
index 8372542..ce03178 100644
--- a/src/tint/ir/from_program_accessor_test.cc
+++ b/src/tint/lang/core/ir/from_program_accessor_test.cc
@@ -13,11 +13,11 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/program_test_helper.h"
-#include "src/tint/ir/var.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
+#include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_binary_test.cc b/src/tint/lang/core/ir/from_program_binary_test.cc
similarity index 99%
rename from src/tint/ir/from_program_binary_test.cc
rename to src/tint/lang/core/ir/from_program_binary_test.cc
index 423133f..6d2a6e5 100644
--- a/src/tint/ir/from_program_binary_test.cc
+++ b/src/tint/lang/core/ir/from_program_binary_test.cc
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/program_test_helper.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_builtin_test.cc b/src/tint/lang/core/ir/from_program_builtin_test.cc
similarity index 96%
rename from src/tint/ir/from_program_builtin_test.cc
rename to src/tint/lang/core/ir/from_program_builtin_test.cc
index 61f9dc2..0e9ee13 100644
--- a/src/tint/ir/from_program_builtin_test.cc
+++ b/src/tint/lang/core/ir/from_program_builtin_test.cc
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/program_test_helper.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_call_test.cc b/src/tint/lang/core/ir/from_program_call_test.cc
similarity index 98%
rename from src/tint/ir/from_program_call_test.cc
rename to src/tint/lang/core/ir/from_program_call_test.cc
index 98ef8dd..a269dec8 100644
--- a/src/tint/ir/from_program_call_test.cc
+++ b/src/tint/lang/core/ir/from_program_call_test.cc
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/program_test_helper.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_function_test.cc b/src/tint/lang/core/ir/from_program_function_test.cc
similarity index 98%
rename from src/tint/ir/from_program_function_test.cc
rename to src/tint/lang/core/ir/from_program_function_test.cc
index 5cdbc96..eb6e27b 100644
--- a/src/tint/ir/from_program_function_test.cc
+++ b/src/tint/lang/core/ir/from_program_function_test.cc
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/program_test_helper.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_let_test.cc b/src/tint/lang/core/ir/from_program_let_test.cc
similarity index 97%
rename from src/tint/ir/from_program_let_test.cc
rename to src/tint/lang/core/ir/from_program_let_test.cc
index 04a1e9f..61b84cc 100644
--- a/src/tint/ir/from_program_let_test.cc
+++ b/src/tint/lang/core/ir/from_program_let_test.cc
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/program_test_helper.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_literal_test.cc b/src/tint/lang/core/ir/from_program_literal_test.cc
similarity index 97%
rename from src/tint/ir/from_program_literal_test.cc
rename to src/tint/lang/core/ir/from_program_literal_test.cc
index a25dac3..90870e0 100644
--- a/src/tint/ir/from_program_literal_test.cc
+++ b/src/tint/lang/core/ir/from_program_literal_test.cc
@@ -13,11 +13,11 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/program_test_helper.h"
-#include "src/tint/ir/var.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
+#include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_materialize_test.cc b/src/tint/lang/core/ir/from_program_materialize_test.cc
similarity index 95%
rename from src/tint/ir/from_program_materialize_test.cc
rename to src/tint/lang/core/ir/from_program_materialize_test.cc
index 67d9d84..47d4c21 100644
--- a/src/tint/ir/from_program_materialize_test.cc
+++ b/src/tint/lang/core/ir/from_program_materialize_test.cc
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/program_test_helper.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_shadowing_test.cc b/src/tint/lang/core/ir/from_program_shadowing_test.cc
similarity index 98%
rename from src/tint/ir/from_program_shadowing_test.cc
rename to src/tint/lang/core/ir/from_program_shadowing_test.cc
index 4437d90..c58d2e6 100644
--- a/src/tint/ir/from_program_shadowing_test.cc
+++ b/src/tint/lang/core/ir/from_program_shadowing_test.cc
@@ -13,11 +13,11 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/program_test_helper.h"
-#include "src/tint/ir/var.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
+#include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_store_test.cc b/src/tint/lang/core/ir/from_program_store_test.cc
similarity index 95%
rename from src/tint/ir/from_program_store_test.cc
rename to src/tint/lang/core/ir/from_program_store_test.cc
index 89bc643..d9ff9bf 100644
--- a/src/tint/ir/from_program_store_test.cc
+++ b/src/tint/lang/core/ir/from_program_store_test.cc
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/program_test_helper.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_test.cc b/src/tint/lang/core/ir/from_program_test.cc
similarity index 98%
rename from src/tint/ir/from_program_test.cc
rename to src/tint/lang/core/ir/from_program_test.cc
index fd6c4c7..3492bdd 100644
--- a/src/tint/ir/from_program_test.cc
+++ b/src/tint/lang/core/ir/from_program_test.cc
@@ -13,13 +13,13 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/if.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/multi_in_block.h"
-#include "src/tint/ir/program_test_helper.h"
-#include "src/tint/ir/switch.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/if.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
+#include "src/tint/lang/core/ir/switch.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/from_program_unary_test.cc b/src/tint/lang/core/ir/from_program_unary_test.cc
similarity index 98%
rename from src/tint/ir/from_program_unary_test.cc
rename to src/tint/lang/core/ir/from_program_unary_test.cc
index 9747403..6c70b92 100644
--- a/src/tint/ir/from_program_unary_test.cc
+++ b/src/tint/lang/core/ir/from_program_unary_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/program_test_helper.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
 
 #include "src/tint/lang/core/constant/scalar.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
diff --git a/src/tint/ir/from_program_var_test.cc b/src/tint/lang/core/ir/from_program_var_test.cc
similarity index 99%
rename from src/tint/ir/from_program_var_test.cc
rename to src/tint/lang/core/ir/from_program_var_test.cc
index e9c7dfe..0dcf16c 100644
--- a/src/tint/ir/from_program_var_test.cc
+++ b/src/tint/lang/core/ir/from_program_var_test.cc
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/program_test_helper.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
 
diff --git a/src/tint/ir/function.cc b/src/tint/lang/core/ir/function.cc
similarity index 97%
rename from src/tint/ir/function.cc
rename to src/tint/lang/core/ir/function.cc
index 969ac01..00117cb 100644
--- a/src/tint/ir/function.cc
+++ b/src/tint/lang/core/ir/function.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/function.h"
+#include "src/tint/lang/core/ir/function.h"
 
 #include "src/tint/utils/containers/predicates.h"
 
diff --git a/src/tint/ir/function.h b/src/tint/lang/core/ir/function.h
similarity index 94%
rename from src/tint/ir/function.h
rename to src/tint/lang/core/ir/function.h
index 84e548b..141cda1 100644
--- a/src/tint/ir/function.h
+++ b/src/tint/lang/core/ir/function.h
@@ -12,16 +12,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_FUNCTION_H_
-#define SRC_TINT_IR_FUNCTION_H_
+#ifndef SRC_TINT_LANG_CORE_IR_FUNCTION_H_
+#define SRC_TINT_LANG_CORE_IR_FUNCTION_H_
 
 #include <array>
 #include <optional>
 #include <utility>
 
-#include "src/tint/ir/function_param.h"
-#include "src/tint/ir/location.h"
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/function_param.h"
+#include "src/tint/lang/core/ir/location.h"
+#include "src/tint/lang/core/ir/value.h"
 #include "src/tint/lang/core/type/type.h"
 
 // Forward declarations
@@ -156,4 +156,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_FUNCTION_H_
+#endif  // SRC_TINT_LANG_CORE_IR_FUNCTION_H_
diff --git a/src/tint/ir/function_param.cc b/src/tint/lang/core/ir/function_param.cc
similarity index 97%
rename from src/tint/ir/function_param.cc
rename to src/tint/lang/core/ir/function_param.cc
index 710a380..898d22c 100644
--- a/src/tint/ir/function_param.cc
+++ b/src/tint/lang/core/ir/function_param.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/function_param.h"
+#include "src/tint/lang/core/ir/function_param.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::FunctionParam);
 
diff --git a/src/tint/ir/function_param.h b/src/tint/lang/core/ir/function_param.h
similarity index 92%
rename from src/tint/ir/function_param.h
rename to src/tint/lang/core/ir/function_param.h
index b7feca6..4612e30 100644
--- a/src/tint/ir/function_param.h
+++ b/src/tint/lang/core/ir/function_param.h
@@ -12,14 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_FUNCTION_PARAM_H_
-#define SRC_TINT_IR_FUNCTION_PARAM_H_
+#ifndef SRC_TINT_LANG_CORE_IR_FUNCTION_PARAM_H_
+#define SRC_TINT_LANG_CORE_IR_FUNCTION_PARAM_H_
 
 #include <utility>
 
-#include "src/tint/ir/binding_point.h"
-#include "src/tint/ir/location.h"
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/binding_point.h"
+#include "src/tint/lang/core/ir/location.h"
+#include "src/tint/lang/core/ir/value.h"
 #include "src/tint/utils/containers/vector.h"
 #include "src/tint/utils/rtti/castable.h"
 
@@ -109,4 +109,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_FUNCTION_PARAM_H_
+#endif  // SRC_TINT_LANG_CORE_IR_FUNCTION_PARAM_H_
diff --git a/src/tint/ir/function_param_test.cc b/src/tint/lang/core/ir/function_param_test.cc
similarity index 92%
rename from src/tint/ir/function_param_test.cc
rename to src/tint/lang/core/ir/function_param_test.cc
index 43c00b9..d7716cf 100644
--- a/src/tint/ir/function_param_test.cc
+++ b/src/tint/lang/core/ir/function_param_test.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/function_param.h"
+#include "src/tint/lang/core/ir/function_param.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/function_test.cc b/src/tint/lang/core/ir/function_test.cc
similarity index 94%
rename from src/tint/ir/function_test.cc
rename to src/tint/lang/core/ir/function_test.cc
index f5e55d0..33a13bb 100644
--- a/src/tint/ir/function_test.cc
+++ b/src/tint/lang/core/ir/function_test.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/function.h"
+#include "src/tint/lang/core/ir/function.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/if.cc b/src/tint/lang/core/ir/if.cc
similarity index 92%
rename from src/tint/ir/if.cc
rename to src/tint/lang/core/ir/if.cc
index bc2e5b0..e080712 100644
--- a/src/tint/ir/if.cc
+++ b/src/tint/lang/core/ir/if.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/if.h"
+#include "src/tint/lang/core/ir/if.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::If);
 
-#include "src/tint/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
 
 namespace tint::ir {
 
diff --git a/src/tint/ir/if.h b/src/tint/lang/core/ir/if.h
similarity index 93%
rename from src/tint/ir/if.h
rename to src/tint/lang/core/ir/if.h
index bcafba9..54a7191 100644
--- a/src/tint/ir/if.h
+++ b/src/tint/lang/core/ir/if.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_IF_H_
-#define SRC_TINT_IR_IF_H_
+#ifndef SRC_TINT_LANG_CORE_IR_IF_H_
+#define SRC_TINT_LANG_CORE_IR_IF_H_
 
-#include "src/tint/ir/control_instruction.h"
+#include "src/tint/lang/core/ir/control_instruction.h"
 
 // Forward declarations
 namespace tint::ir {
@@ -74,4 +74,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_IF_H_
+#endif  // SRC_TINT_LANG_CORE_IR_IF_H_
diff --git a/src/tint/ir/if_test.cc b/src/tint/lang/core/ir/if_test.cc
similarity index 94%
rename from src/tint/ir/if_test.cc
rename to src/tint/lang/core/ir/if_test.cc
index 934a58c..33ce48f 100644
--- a/src/tint/ir/if_test.cc
+++ b/src/tint/lang/core/ir/if_test.cc
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/if.h"
+#include "src/tint/lang/core/ir/if.h"
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/instruction.cc b/src/tint/lang/core/ir/instruction.cc
similarity index 94%
rename from src/tint/ir/instruction.cc
rename to src/tint/lang/core/ir/instruction.cc
index 197cdc1..85e8aa7 100644
--- a/src/tint/ir/instruction.cc
+++ b/src/tint/lang/core/ir/instruction.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/instruction.h"
+#include "src/tint/lang/core/ir/instruction.h"
 
-#include "src/tint/ir/block.h"
+#include "src/tint/lang/core/ir/block.h"
 #include "src/tint/utils/debug/debug.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Instruction);
diff --git a/src/tint/ir/instruction.h b/src/tint/lang/core/ir/instruction.h
similarity index 94%
rename from src/tint/ir/instruction.h
rename to src/tint/lang/core/ir/instruction.h
index fc66d2f..df0f825 100644
--- a/src/tint/ir/instruction.h
+++ b/src/tint/lang/core/ir/instruction.h
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_INSTRUCTION_H_
-#define SRC_TINT_IR_INSTRUCTION_H_
+#ifndef SRC_TINT_LANG_CORE_IR_INSTRUCTION_H_
+#define SRC_TINT_LANG_CORE_IR_INSTRUCTION_H_
 
-#include "src/tint/ir/instruction_result.h"
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/instruction_result.h"
+#include "src/tint/lang/core/ir/value.h"
 #include "src/tint/utils/containers/enum_set.h"
 #include "src/tint/utils/rtti/castable.h"
 
@@ -120,4 +120,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_INSTRUCTION_H_
+#endif  // SRC_TINT_LANG_CORE_IR_INSTRUCTION_H_
diff --git a/src/tint/ir/instruction_result.cc b/src/tint/lang/core/ir/instruction_result.cc
similarity index 86%
rename from src/tint/ir/instruction_result.cc
rename to src/tint/lang/core/ir/instruction_result.cc
index 85eaafe..20a4674 100644
--- a/src/tint/ir/instruction_result.cc
+++ b/src/tint/lang/core/ir/instruction_result.cc
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/instruction_result.h"
+#include "src/tint/lang/core/ir/instruction_result.h"
 
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/instruction.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/instruction.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::InstructionResult);
 
diff --git a/src/tint/ir/instruction_result.h b/src/tint/lang/core/ir/instruction_result.h
similarity index 88%
rename from src/tint/ir/instruction_result.h
rename to src/tint/lang/core/ir/instruction_result.h
index 843759f..20b6cd1 100644
--- a/src/tint/ir/instruction_result.h
+++ b/src/tint/lang/core/ir/instruction_result.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_INSTRUCTION_RESULT_H_
-#define SRC_TINT_IR_INSTRUCTION_RESULT_H_
+#ifndef SRC_TINT_LANG_CORE_IR_INSTRUCTION_RESULT_H_
+#define SRC_TINT_LANG_CORE_IR_INSTRUCTION_RESULT_H_
 
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/value.h"
 #include "src/tint/utils/text/string_stream.h"
 
 namespace tint::ir {
@@ -54,4 +54,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_INSTRUCTION_RESULT_H_
+#endif  // SRC_TINT_LANG_CORE_IR_INSTRUCTION_RESULT_H_
diff --git a/src/tint/ir/instruction_result_test.cc b/src/tint/lang/core/ir/instruction_result_test.cc
similarity index 95%
rename from src/tint/ir/instruction_result_test.cc
rename to src/tint/lang/core/ir/instruction_result_test.cc
index b21aaac..923d5fd 100644
--- a/src/tint/ir/instruction_result_test.cc
+++ b/src/tint/lang/core/ir/instruction_result_test.cc
@@ -14,7 +14,7 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 using namespace tint::number_suffixes;        // NOLINT
 using namespace tint::builtin::fluent_types;  // NOLINT
diff --git a/src/tint/ir/instruction_test.cc b/src/tint/lang/core/ir/instruction_test.cc
similarity index 95%
rename from src/tint/ir/instruction_test.cc
rename to src/tint/lang/core/ir/instruction_test.cc
index 2da2102..a6ca823 100644
--- a/src/tint/ir/instruction_test.cc
+++ b/src/tint/lang/core/ir/instruction_test.cc
@@ -13,10 +13,10 @@
 // limitations under the License.
 
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/ir_test_helper.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/module.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/intrinsic_call.cc b/src/tint/lang/core/ir/intrinsic_call.cc
similarity index 98%
rename from src/tint/ir/intrinsic_call.cc
rename to src/tint/lang/core/ir/intrinsic_call.cc
index e9dc9d6..b8f8d5e 100644
--- a/src/tint/ir/intrinsic_call.cc
+++ b/src/tint/lang/core/ir/intrinsic_call.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/intrinsic_call.h"
+#include "src/tint/lang/core/ir/intrinsic_call.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/intrinsic_call.h b/src/tint/lang/core/ir/intrinsic_call.h
similarity index 93%
rename from src/tint/ir/intrinsic_call.h
rename to src/tint/lang/core/ir/intrinsic_call.h
index ddb35fd..038049a 100644
--- a/src/tint/ir/intrinsic_call.h
+++ b/src/tint/lang/core/ir/intrinsic_call.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_INTRINSIC_CALL_H_
-#define SRC_TINT_IR_INTRINSIC_CALL_H_
+#ifndef SRC_TINT_LANG_CORE_IR_INTRINSIC_CALL_H_
+#define SRC_TINT_LANG_CORE_IR_INTRINSIC_CALL_H_
 
-#include "src/tint/ir/call.h"
+#include "src/tint/lang/core/ir/call.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -87,4 +87,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_INTRINSIC_CALL_H_
+#endif  // SRC_TINT_LANG_CORE_IR_INTRINSIC_CALL_H_
diff --git a/src/tint/ir/intrinsic_call_test.cc b/src/tint/lang/core/ir/intrinsic_call_test.cc
similarity index 97%
rename from src/tint/ir/intrinsic_call_test.cc
rename to src/tint/lang/core/ir/intrinsic_call_test.cc
index 3f9d650..f728831 100644
--- a/src/tint/ir/intrinsic_call_test.cc
+++ b/src/tint/lang/core/ir/intrinsic_call_test.cc
@@ -14,7 +14,7 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/ir_test_helper.h b/src/tint/lang/core/ir/ir_test_helper.h
similarity index 82%
rename from src/tint/ir/ir_test_helper.h
rename to src/tint/lang/core/ir/ir_test_helper.h
index 0406606..cba1020 100644
--- a/src/tint/ir/ir_test_helper.h
+++ b/src/tint/lang/core/ir/ir_test_helper.h
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_IR_TEST_HELPER_H_
-#define SRC_TINT_IR_IR_TEST_HELPER_H_
+#ifndef SRC_TINT_LANG_CORE_IR_IR_TEST_HELPER_H_
+#define SRC_TINT_LANG_CORE_IR_IR_TEST_HELPER_H_
 
 #include "gtest/gtest.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 
 namespace tint::ir {
 
@@ -43,4 +43,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_IR_TEST_HELPER_H_
+#endif  // SRC_TINT_LANG_CORE_IR_IR_TEST_HELPER_H_
diff --git a/src/tint/ir/let.cc b/src/tint/lang/core/ir/let.cc
similarity index 91%
rename from src/tint/ir/let.cc
rename to src/tint/lang/core/ir/let.cc
index 8d63559..b489fc1 100644
--- a/src/tint/ir/let.cc
+++ b/src/tint/lang/core/ir/let.cc
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/let.h"
-#include "src/tint/ir/store.h"
+#include "src/tint/lang/core/ir/let.h"
+#include "src/tint/lang/core/ir/store.h"
 #include "src/tint/utils/debug/debug.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Let);
diff --git a/src/tint/ir/let.h b/src/tint/lang/core/ir/let.h
similarity index 88%
rename from src/tint/ir/let.h
rename to src/tint/lang/core/ir/let.h
index ba24a30..52f8c8f 100644
--- a/src/tint/ir/let.h
+++ b/src/tint/lang/core/ir/let.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_LET_H_
-#define SRC_TINT_IR_LET_H_
+#ifndef SRC_TINT_LANG_CORE_IR_LET_H_
+#define SRC_TINT_LANG_CORE_IR_LET_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 
 namespace tint::ir {
 
@@ -40,4 +40,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_LET_H_
+#endif  // SRC_TINT_LANG_CORE_IR_LET_H_
diff --git a/src/tint/ir/let_test.cc b/src/tint/lang/core/ir/let_test.cc
similarity index 88%
rename from src/tint/ir/let_test.cc
rename to src/tint/lang/core/ir/let_test.cc
index 499d86c..1709118 100644
--- a/src/tint/ir/let_test.cc
+++ b/src/tint/lang/core/ir/let_test.cc
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/let.h"
+#include "src/tint/lang/core/ir/let.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/load.cc b/src/tint/lang/core/ir/load.cc
similarity index 96%
rename from src/tint/ir/load.cc
rename to src/tint/lang/core/ir/load.cc
index 1e127c0..00a03f5 100644
--- a/src/tint/ir/load.cc
+++ b/src/tint/lang/core/ir/load.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/load.h"
+#include "src/tint/lang/core/ir/load.h"
 
 #include "src/tint/lang/core/type/pointer.h"
 #include "src/tint/utils/debug/debug.h"
diff --git a/src/tint/ir/load.h b/src/tint/lang/core/ir/load.h
similarity index 88%
rename from src/tint/ir/load.h
rename to src/tint/lang/core/ir/load.h
index 91c423a..958cf57 100644
--- a/src/tint/ir/load.h
+++ b/src/tint/lang/core/ir/load.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_LOAD_H_
-#define SRC_TINT_IR_LOAD_H_
+#ifndef SRC_TINT_LANG_CORE_IR_LOAD_H_
+#define SRC_TINT_LANG_CORE_IR_LOAD_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -42,4 +42,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_LOAD_H_
+#endif  // SRC_TINT_LANG_CORE_IR_LOAD_H_
diff --git a/src/tint/ir/load_test.cc b/src/tint/lang/core/ir/load_test.cc
similarity index 93%
rename from src/tint/ir/load_test.cc
rename to src/tint/lang/core/ir/load_test.cc
index 5e063a8..882f0a0 100644
--- a/src/tint/ir/load_test.cc
+++ b/src/tint/lang/core/ir/load_test.cc
@@ -14,9 +14,9 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/load_vector_element.cc b/src/tint/lang/core/ir/load_vector_element.cc
similarity index 94%
rename from src/tint/ir/load_vector_element.cc
rename to src/tint/lang/core/ir/load_vector_element.cc
index 0579a72..aad4f47 100644
--- a/src/tint/ir/load_vector_element.cc
+++ b/src/tint/lang/core/ir/load_vector_element.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/load_vector_element.h"
+#include "src/tint/lang/core/ir/load_vector_element.h"
 #include "src/tint/utils/debug/debug.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::LoadVectorElement);
diff --git a/src/tint/ir/load_vector_element.h b/src/tint/lang/core/ir/load_vector_element.h
similarity index 88%
rename from src/tint/ir/load_vector_element.h
rename to src/tint/lang/core/ir/load_vector_element.h
index d00753b..db42278 100644
--- a/src/tint/ir/load_vector_element.h
+++ b/src/tint/lang/core/ir/load_vector_element.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_LOAD_VECTOR_ELEMENT_H_
-#define SRC_TINT_IR_LOAD_VECTOR_ELEMENT_H_
+#ifndef SRC_TINT_LANG_CORE_IR_LOAD_VECTOR_ELEMENT_H_
+#define SRC_TINT_LANG_CORE_IR_LOAD_VECTOR_ELEMENT_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -48,4 +48,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_LOAD_VECTOR_ELEMENT_H_
+#endif  // SRC_TINT_LANG_CORE_IR_LOAD_VECTOR_ELEMENT_H_
diff --git a/src/tint/ir/load_vector_element_test.cc b/src/tint/lang/core/ir/load_vector_element_test.cc
similarity index 93%
rename from src/tint/ir/load_vector_element_test.cc
rename to src/tint/lang/core/ir/load_vector_element_test.cc
index 1117ca3..5c99760 100644
--- a/src/tint/ir/load_vector_element_test.cc
+++ b/src/tint/lang/core/ir/load_vector_element_test.cc
@@ -14,9 +14,9 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/location.h b/src/tint/lang/core/ir/location.h
similarity index 87%
rename from src/tint/ir/location.h
rename to src/tint/lang/core/ir/location.h
index c5fccad..351075d 100644
--- a/src/tint/ir/location.h
+++ b/src/tint/lang/core/ir/location.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_LOCATION_H_
-#define SRC_TINT_IR_LOCATION_H_
+#ifndef SRC_TINT_LANG_CORE_IR_LOCATION_H_
+#define SRC_TINT_LANG_CORE_IR_LOCATION_H_
 
 #include <optional>
 
@@ -31,4 +31,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_LOCATION_H_
+#endif  // SRC_TINT_LANG_CORE_IR_LOCATION_H_
diff --git a/src/tint/ir/loop.cc b/src/tint/lang/core/ir/loop.cc
similarity index 93%
rename from src/tint/ir/loop.cc
rename to src/tint/lang/core/ir/loop.cc
index a09699d..81d9def 100644
--- a/src/tint/ir/loop.cc
+++ b/src/tint/lang/core/ir/loop.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/loop.h"
+#include "src/tint/lang/core/ir/loop.h"
 
 #include <utility>
 
-#include "src/tint/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Loop);
 
diff --git a/src/tint/ir/loop.h b/src/tint/lang/core/ir/loop.h
similarity index 94%
rename from src/tint/ir/loop.h
rename to src/tint/lang/core/ir/loop.h
index fefa5f9..99e08f7 100644
--- a/src/tint/ir/loop.h
+++ b/src/tint/lang/core/ir/loop.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_LOOP_H_
-#define SRC_TINT_IR_LOOP_H_
+#ifndef SRC_TINT_LANG_CORE_IR_LOOP_H_
+#define SRC_TINT_LANG_CORE_IR_LOOP_H_
 
-#include "src/tint/ir/control_instruction.h"
+#include "src/tint/lang/core/ir/control_instruction.h"
 
 // Forward declarations
 namespace tint::ir {
@@ -90,4 +90,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_LOOP_H_
+#endif  // SRC_TINT_LANG_CORE_IR_LOOP_H_
diff --git a/src/tint/ir/loop_test.cc b/src/tint/lang/core/ir/loop_test.cc
similarity index 94%
rename from src/tint/ir/loop_test.cc
rename to src/tint/lang/core/ir/loop_test.cc
index 1746c8d..33be89e 100644
--- a/src/tint/ir/loop_test.cc
+++ b/src/tint/lang/core/ir/loop_test.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/loop.h"
+#include "src/tint/lang/core/ir/loop.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/module.cc b/src/tint/lang/core/ir/module.cc
similarity index 96%
rename from src/tint/ir/module.cc
rename to src/tint/lang/core/ir/module.cc
index 1c8811c..0c5da05 100644
--- a/src/tint/ir/module.cc
+++ b/src/tint/lang/core/ir/module.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/module.h"
 
 #include <limits>
 
diff --git a/src/tint/ir/module.h b/src/tint/lang/core/ir/module.h
similarity index 90%
rename from src/tint/ir/module.h
rename to src/tint/lang/core/ir/module.h
index 3506c35..204e4ed 100644
--- a/src/tint/ir/module.h
+++ b/src/tint/lang/core/ir/module.h
@@ -12,18 +12,18 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_MODULE_H_
-#define SRC_TINT_IR_MODULE_H_
+#ifndef SRC_TINT_LANG_CORE_IR_MODULE_H_
+#define SRC_TINT_LANG_CORE_IR_MODULE_H_
 
 #include <memory>
 #include <string>
 
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/function.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/value.h"
 #include "src/tint/lang/core/constant/manager.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/function.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/value.h"
 #include "src/tint/lang/core/type/manager.h"
 #include "src/tint/program_id.h"
 #include "src/tint/utils/containers/vector.h"
@@ -110,4 +110,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_MODULE_H_
+#endif  // SRC_TINT_LANG_CORE_IR_MODULE_H_
diff --git a/src/tint/ir/module_test.cc b/src/tint/lang/core/ir/module_test.cc
similarity index 90%
rename from src/tint/ir/module_test.cc
rename to src/tint/lang/core/ir/module_test.cc
index 81ddf4b..fb4bf42 100644
--- a/src/tint/ir/module_test.cc
+++ b/src/tint/lang/core/ir/module_test.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/module.h"
-#include "src/tint/ir/ir_test_helper.h"
-#include "src/tint/ir/var.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/var.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/multi_in_block.cc b/src/tint/lang/core/ir/multi_in_block.cc
similarity index 95%
rename from src/tint/ir/multi_in_block.cc
rename to src/tint/lang/core/ir/multi_in_block.cc
index e51fa64..84b5e0c 100644
--- a/src/tint/ir/multi_in_block.cc
+++ b/src/tint/lang/core/ir/multi_in_block.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
 
 #include "src/tint/utils/containers/predicates.h"
 
diff --git a/src/tint/ir/multi_in_block.h b/src/tint/lang/core/ir/multi_in_block.h
similarity index 91%
rename from src/tint/ir/multi_in_block.h
rename to src/tint/lang/core/ir/multi_in_block.h
index c70bb9c..1dd8e07 100644
--- a/src/tint/ir/multi_in_block.h
+++ b/src/tint/lang/core/ir/multi_in_block.h
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_MULTI_IN_BLOCK_H_
-#define SRC_TINT_IR_MULTI_IN_BLOCK_H_
+#ifndef SRC_TINT_LANG_CORE_IR_MULTI_IN_BLOCK_H_
+#define SRC_TINT_LANG_CORE_IR_MULTI_IN_BLOCK_H_
 
 #include <utility>
 
-#include "src/tint/ir/block.h"
+#include "src/tint/lang/core/ir/block.h"
 
 // Forward declarations
 namespace tint::ir {
@@ -62,4 +62,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_MULTI_IN_BLOCK_H_
+#endif  // SRC_TINT_LANG_CORE_IR_MULTI_IN_BLOCK_H_
diff --git a/src/tint/ir/multi_in_block_test.cc b/src/tint/lang/core/ir/multi_in_block_test.cc
similarity index 87%
rename from src/tint/ir/multi_in_block_test.cc
rename to src/tint/lang/core/ir/multi_in_block_test.cc
index ef9438c..19e113a 100644
--- a/src/tint/ir/multi_in_block_test.cc
+++ b/src/tint/lang/core/ir/multi_in_block_test.cc
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/block_param.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/block_param.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/next_iteration.cc b/src/tint/lang/core/ir/next_iteration.cc
similarity index 88%
rename from src/tint/ir/next_iteration.cc
rename to src/tint/lang/core/ir/next_iteration.cc
index c7f1e80..1d06530 100644
--- a/src/tint/ir/next_iteration.cc
+++ b/src/tint/lang/core/ir/next_iteration.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/next_iteration.h"
+#include "src/tint/lang/core/ir/next_iteration.h"
 
 #include <utility>
 
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::NextIteration);
 
diff --git a/src/tint/ir/next_iteration.h b/src/tint/lang/core/ir/next_iteration.h
similarity index 88%
rename from src/tint/ir/next_iteration.h
rename to src/tint/lang/core/ir/next_iteration.h
index 79eadb0..ae76ff4 100644
--- a/src/tint/ir/next_iteration.h
+++ b/src/tint/lang/core/ir/next_iteration.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_NEXT_ITERATION_H_
-#define SRC_TINT_IR_NEXT_ITERATION_H_
+#ifndef SRC_TINT_LANG_CORE_IR_NEXT_ITERATION_H_
+#define SRC_TINT_LANG_CORE_IR_NEXT_ITERATION_H_
 
-#include "src/tint/ir/terminator.h"
+#include "src/tint/lang/core/ir/terminator.h"
 #include "src/tint/utils/rtti/castable.h"
 
 // Forward declarations
@@ -49,4 +49,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_NEXT_ITERATION_H_
+#endif  // SRC_TINT_LANG_CORE_IR_NEXT_ITERATION_H_
diff --git a/src/tint/ir/next_iteration_test.cc b/src/tint/lang/core/ir/next_iteration_test.cc
similarity index 91%
rename from src/tint/ir/next_iteration_test.cc
rename to src/tint/lang/core/ir/next_iteration_test.cc
index 5c6d16d..780507a 100644
--- a/src/tint/ir/next_iteration_test.cc
+++ b/src/tint/lang/core/ir/next_iteration_test.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/next_iteration.h"
+#include "src/tint/lang/core/ir/next_iteration.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/operand_instruction.cc b/src/tint/lang/core/ir/operand_instruction.cc
similarity index 95%
rename from src/tint/ir/operand_instruction.cc
rename to src/tint/lang/core/ir/operand_instruction.cc
index 3b9f38e..702e78b 100644
--- a/src/tint/ir/operand_instruction.cc
+++ b/src/tint/lang/core/ir/operand_instruction.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 
 using Op10 = tint::ir::OperandInstruction<1, 0>;
 using Op11 = tint::ir::OperandInstruction<1, 1>;
diff --git a/src/tint/ir/operand_instruction.h b/src/tint/lang/core/ir/operand_instruction.h
similarity index 94%
rename from src/tint/ir/operand_instruction.h
rename to src/tint/lang/core/ir/operand_instruction.h
index 040bfc9..7f9a5c1 100644
--- a/src/tint/ir/operand_instruction.h
+++ b/src/tint/lang/core/ir/operand_instruction.h
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_OPERAND_INSTRUCTION_H_
-#define SRC_TINT_IR_OPERAND_INSTRUCTION_H_
+#ifndef SRC_TINT_LANG_CORE_IR_OPERAND_INSTRUCTION_H_
+#define SRC_TINT_LANG_CORE_IR_OPERAND_INSTRUCTION_H_
 
 #include <utility>
 
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/instruction_result.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/instruction_result.h"
 
 namespace tint::ir {
 
@@ -137,4 +137,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_OPERAND_INSTRUCTION_H_
+#endif  // SRC_TINT_LANG_CORE_IR_OPERAND_INSTRUCTION_H_
diff --git a/src/tint/ir/operand_instruction_test.cc b/src/tint/lang/core/ir/operand_instruction_test.cc
similarity index 97%
rename from src/tint/ir/operand_instruction_test.cc
rename to src/tint/lang/core/ir/operand_instruction_test.cc
index 03c0435..9b5a600 100644
--- a/src/tint/ir/operand_instruction_test.cc
+++ b/src/tint/lang/core/ir/operand_instruction_test.cc
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/program_test_helper.h b/src/tint/lang/core/ir/program_test_helper.h
similarity index 90%
rename from src/tint/ir/program_test_helper.h
rename to src/tint/lang/core/ir/program_test_helper.h
index 6333811..5105641 100644
--- a/src/tint/ir/program_test_helper.h
+++ b/src/tint/lang/core/ir/program_test_helper.h
@@ -12,18 +12,18 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_PROGRAM_TEST_HELPER_H_
-#define SRC_TINT_IR_PROGRAM_TEST_HELPER_H_
+#ifndef SRC_TINT_LANG_CORE_IR_PROGRAM_TEST_HELPER_H_
+#define SRC_TINT_LANG_CORE_IR_PROGRAM_TEST_HELPER_H_
 
 #include <memory>
 #include <string>
 #include <utility>
 
 #include "gtest/gtest.h"
-#include "src/tint/ir/disassembler.h"
-#include "src/tint/ir/from_program.h"
-#include "src/tint/ir/validator.h"
 #include "src/tint/lang/core/builtin/number.h"
+#include "src/tint/lang/core/ir/disassembler.h"
+#include "src/tint/lang/core/ir/from_program.h"
+#include "src/tint/lang/core/ir/validator.h"
 #include "src/tint/lang/wgsl/program/program_builder.h"
 #include "src/tint/lang/wgsl/reader/parser.h"
 #include "src/tint/utils/text/string_stream.h"
@@ -96,4 +96,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_PROGRAM_TEST_HELPER_H_
+#endif  // SRC_TINT_LANG_CORE_IR_PROGRAM_TEST_HELPER_H_
diff --git a/src/tint/ir/return.cc b/src/tint/lang/core/ir/return.cc
similarity index 91%
rename from src/tint/ir/return.cc
rename to src/tint/lang/core/ir/return.cc
index 325f283..4280fe2 100644
--- a/src/tint/ir/return.cc
+++ b/src/tint/lang/core/ir/return.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/return.h"
+#include "src/tint/lang/core/ir/return.h"
 
 #include <utility>
 
-#include "src/tint/ir/function.h"
+#include "src/tint/lang/core/ir/function.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Return);
 
diff --git a/src/tint/ir/return.h b/src/tint/lang/core/ir/return.h
similarity index 92%
rename from src/tint/ir/return.h
rename to src/tint/lang/core/ir/return.h
index d644cca..d918220 100644
--- a/src/tint/ir/return.h
+++ b/src/tint/lang/core/ir/return.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_RETURN_H_
-#define SRC_TINT_IR_RETURN_H_
+#ifndef SRC_TINT_LANG_CORE_IR_RETURN_H_
+#define SRC_TINT_LANG_CORE_IR_RETURN_H_
 
-#include "src/tint/ir/terminator.h"
+#include "src/tint/lang/core/ir/terminator.h"
 #include "src/tint/utils/rtti/castable.h"
 
 // Forward declarations
@@ -68,4 +68,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_RETURN_H_
+#endif  // SRC_TINT_LANG_CORE_IR_RETURN_H_
diff --git a/src/tint/ir/return_test.cc b/src/tint/lang/core/ir/return_test.cc
similarity index 95%
rename from src/tint/ir/return_test.cc
rename to src/tint/lang/core/ir/return_test.cc
index 159e94d..ef6b64e 100644
--- a/src/tint/ir/return_test.cc
+++ b/src/tint/lang/core/ir/return_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/return.h"
+#include "src/tint/lang/core/ir/return.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/store.cc b/src/tint/lang/core/ir/store.cc
similarity index 95%
rename from src/tint/ir/store.cc
rename to src/tint/lang/core/ir/store.cc
index ca88ec4..e4f7ce2 100644
--- a/src/tint/ir/store.cc
+++ b/src/tint/lang/core/ir/store.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/store.h"
+#include "src/tint/lang/core/ir/store.h"
 #include "src/tint/utils/debug/debug.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Store);
diff --git a/src/tint/ir/store.h b/src/tint/lang/core/ir/store.h
similarity index 89%
rename from src/tint/ir/store.h
rename to src/tint/lang/core/ir/store.h
index 170fa43..a9f6319 100644
--- a/src/tint/ir/store.h
+++ b/src/tint/lang/core/ir/store.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_STORE_H_
-#define SRC_TINT_IR_STORE_H_
+#ifndef SRC_TINT_LANG_CORE_IR_STORE_H_
+#define SRC_TINT_LANG_CORE_IR_STORE_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -47,4 +47,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_STORE_H_
+#endif  // SRC_TINT_LANG_CORE_IR_STORE_H_
diff --git a/src/tint/ir/store_test.cc b/src/tint/lang/core/ir/store_test.cc
similarity index 92%
rename from src/tint/ir/store_test.cc
rename to src/tint/lang/core/ir/store_test.cc
index 1bf40cb..ccd52d3 100644
--- a/src/tint/ir/store_test.cc
+++ b/src/tint/lang/core/ir/store_test.cc
@@ -14,9 +14,9 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/store_vector_element.cc b/src/tint/lang/core/ir/store_vector_element.cc
similarity index 94%
rename from src/tint/ir/store_vector_element.cc
rename to src/tint/lang/core/ir/store_vector_element.cc
index 00c14dd..5cbb108 100644
--- a/src/tint/ir/store_vector_element.cc
+++ b/src/tint/lang/core/ir/store_vector_element.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/store_vector_element.h"
+#include "src/tint/lang/core/ir/store_vector_element.h"
 #include "src/tint/utils/debug/debug.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::StoreVectorElement);
diff --git a/src/tint/ir/store_vector_element.h b/src/tint/lang/core/ir/store_vector_element.h
similarity index 89%
rename from src/tint/ir/store_vector_element.h
rename to src/tint/lang/core/ir/store_vector_element.h
index f7a5885..d718da8 100644
--- a/src/tint/ir/store_vector_element.h
+++ b/src/tint/lang/core/ir/store_vector_element.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_STORE_VECTOR_ELEMENT_H_
-#define SRC_TINT_IR_STORE_VECTOR_ELEMENT_H_
+#ifndef SRC_TINT_LANG_CORE_IR_STORE_VECTOR_ELEMENT_H_
+#define SRC_TINT_LANG_CORE_IR_STORE_VECTOR_ELEMENT_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -54,4 +54,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_STORE_VECTOR_ELEMENT_H_
+#endif  // SRC_TINT_LANG_CORE_IR_STORE_VECTOR_ELEMENT_H_
diff --git a/src/tint/ir/store_vector_element_test.cc b/src/tint/lang/core/ir/store_vector_element_test.cc
similarity index 94%
rename from src/tint/ir/store_vector_element_test.cc
rename to src/tint/lang/core/ir/store_vector_element_test.cc
index 1d71a71..386a0f7 100644
--- a/src/tint/ir/store_vector_element_test.cc
+++ b/src/tint/lang/core/ir/store_vector_element_test.cc
@@ -14,9 +14,9 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/switch.cc b/src/tint/lang/core/ir/switch.cc
similarity index 95%
rename from src/tint/ir/switch.cc
rename to src/tint/lang/core/ir/switch.cc
index 9d9e75d..4f1c5b2 100644
--- a/src/tint/ir/switch.cc
+++ b/src/tint/lang/core/ir/switch.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/switch.h"
+#include "src/tint/lang/core/ir/switch.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Switch);
 
diff --git a/src/tint/ir/switch.h b/src/tint/lang/core/ir/switch.h
similarity index 94%
rename from src/tint/ir/switch.h
rename to src/tint/lang/core/ir/switch.h
index c332afb..70d8170 100644
--- a/src/tint/ir/switch.h
+++ b/src/tint/lang/core/ir/switch.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_SWITCH_H_
-#define SRC_TINT_IR_SWITCH_H_
+#ifndef SRC_TINT_LANG_CORE_IR_SWITCH_H_
+#define SRC_TINT_LANG_CORE_IR_SWITCH_H_
 
-#include "src/tint/ir/control_instruction.h"
+#include "src/tint/lang/core/ir/control_instruction.h"
 
 // Forward declarations
 namespace tint::ir {
@@ -89,4 +89,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_SWITCH_H_
+#endif  // SRC_TINT_LANG_CORE_IR_SWITCH_H_
diff --git a/src/tint/ir/switch_test.cc b/src/tint/lang/core/ir/switch_test.cc
similarity index 93%
rename from src/tint/ir/switch_test.cc
rename to src/tint/lang/core/ir/switch_test.cc
index d881247..5281199 100644
--- a/src/tint/ir/switch_test.cc
+++ b/src/tint/lang/core/ir/switch_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/switch.h"
+#include "src/tint/lang/core/ir/switch.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/swizzle.cc b/src/tint/lang/core/ir/swizzle.cc
similarity index 96%
rename from src/tint/ir/swizzle.cc
rename to src/tint/lang/core/ir/swizzle.cc
index 9ee672d..2b64364 100644
--- a/src/tint/ir/swizzle.cc
+++ b/src/tint/lang/core/ir/swizzle.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/swizzle.h"
+#include "src/tint/lang/core/ir/swizzle.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/swizzle.h b/src/tint/lang/core/ir/swizzle.h
similarity index 89%
rename from src/tint/ir/swizzle.h
rename to src/tint/lang/core/ir/swizzle.h
index 16c863d..b099032 100644
--- a/src/tint/ir/swizzle.h
+++ b/src/tint/lang/core/ir/swizzle.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_SWIZZLE_H_
-#define SRC_TINT_IR_SWIZZLE_H_
+#ifndef SRC_TINT_LANG_CORE_IR_SWIZZLE_H_
+#define SRC_TINT_LANG_CORE_IR_SWIZZLE_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -48,4 +48,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_SWIZZLE_H_
+#endif  // SRC_TINT_LANG_CORE_IR_SWIZZLE_H_
diff --git a/src/tint/ir/swizzle_test.cc b/src/tint/lang/core/ir/swizzle_test.cc
similarity index 96%
rename from src/tint/ir/swizzle_test.cc
rename to src/tint/lang/core/ir/swizzle_test.cc
index ab45e8c..c1471bb 100644
--- a/src/tint/ir/swizzle_test.cc
+++ b/src/tint/lang/core/ir/swizzle_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/swizzle.h"
+#include "src/tint/lang/core/ir/swizzle.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 using namespace tint::builtin::fluent_types;  // NOLINT
 
diff --git a/src/tint/ir/terminate_invocation.cc b/src/tint/lang/core/ir/terminate_invocation.cc
similarity index 92%
rename from src/tint/ir/terminate_invocation.cc
rename to src/tint/lang/core/ir/terminate_invocation.cc
index 04c7d8d..0f0bb3b 100644
--- a/src/tint/ir/terminate_invocation.cc
+++ b/src/tint/lang/core/ir/terminate_invocation.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/terminate_invocation.h"
+#include "src/tint/lang/core/ir/terminate_invocation.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::TerminateInvocation);
 
diff --git a/src/tint/ir/terminate_invocation.h b/src/tint/lang/core/ir/terminate_invocation.h
similarity index 81%
rename from src/tint/ir/terminate_invocation.h
rename to src/tint/lang/core/ir/terminate_invocation.h
index 9821922..ddb9ee7 100644
--- a/src/tint/ir/terminate_invocation.h
+++ b/src/tint/lang/core/ir/terminate_invocation.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TERMINATE_INVOCATION_H_
-#define SRC_TINT_IR_TERMINATE_INVOCATION_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TERMINATE_INVOCATION_H_
+#define SRC_TINT_LANG_CORE_IR_TERMINATE_INVOCATION_H_
 
-#include "src/tint/ir/terminator.h"
+#include "src/tint/lang/core/ir/terminator.h"
 
 namespace tint::ir {
 
@@ -30,4 +30,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_TERMINATE_INVOCATION_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TERMINATE_INVOCATION_H_
diff --git a/src/tint/ir/terminator.cc b/src/tint/lang/core/ir/terminator.cc
similarity index 93%
rename from src/tint/ir/terminator.cc
rename to src/tint/lang/core/ir/terminator.cc
index ce76977..97600bf 100644
--- a/src/tint/ir/terminator.cc
+++ b/src/tint/lang/core/ir/terminator.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/terminator.h"
+#include "src/tint/lang/core/ir/terminator.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/terminator.h b/src/tint/lang/core/ir/terminator.h
similarity index 82%
rename from src/tint/ir/terminator.h
rename to src/tint/lang/core/ir/terminator.h
index 79b622c..9169db4 100644
--- a/src/tint/ir/terminator.h
+++ b/src/tint/lang/core/ir/terminator.h
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TERMINATOR_H_
-#define SRC_TINT_IR_TERMINATOR_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TERMINATOR_H_
+#define SRC_TINT_LANG_CORE_IR_TERMINATOR_H_
 
-#include "src/tint/ir/operand_instruction.h"
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/value.h"
 #include "src/tint/utils/rtti/castable.h"
 
 // Forward declarations
@@ -37,4 +37,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_TERMINATOR_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TERMINATOR_H_
diff --git a/src/tint/ir/to_program.cc b/src/tint/lang/core/ir/to_program.cc
similarity index 96%
rename from src/tint/ir/to_program.cc
rename to src/tint/lang/core/ir/to_program.cc
index 9330c2b..3643af8 100644
--- a/src/tint/ir/to_program.cc
+++ b/src/tint/lang/core/ir/to_program.cc
@@ -12,49 +12,49 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/to_program.h"
+#include "src/tint/lang/core/ir/to_program.h"
 
 #include <string>
 #include <tuple>
 #include <utility>
 
-#include "src/tint/ir/access.h"
-#include "src/tint/ir/binary.h"
-#include "src/tint/ir/bitcast.h"
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/break_if.h"
-#include "src/tint/ir/call.h"
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/construct.h"
-#include "src/tint/ir/continue.h"
-#include "src/tint/ir/convert.h"
-#include "src/tint/ir/core_builtin_call.h"
-#include "src/tint/ir/discard.h"
-#include "src/tint/ir/exit_if.h"
-#include "src/tint/ir/exit_loop.h"
-#include "src/tint/ir/exit_switch.h"
-#include "src/tint/ir/if.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/let.h"
-#include "src/tint/ir/load.h"
-#include "src/tint/ir/load_vector_element.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/module.h"
-#include "src/tint/ir/multi_in_block.h"
-#include "src/tint/ir/next_iteration.h"
-#include "src/tint/ir/return.h"
-#include "src/tint/ir/store.h"
-#include "src/tint/ir/store_vector_element.h"
-#include "src/tint/ir/switch.h"
-#include "src/tint/ir/swizzle.h"
-#include "src/tint/ir/transform/rename_conflicts_wgsl.h"
-#include "src/tint/ir/unary.h"
-#include "src/tint/ir/unreachable.h"
-#include "src/tint/ir/user_call.h"
-#include "src/tint/ir/validator.h"
-#include "src/tint/ir/var.h"
 #include "src/tint/lang/core/builtin/builtin.h"
 #include "src/tint/lang/core/constant/splat.h"
+#include "src/tint/lang/core/ir/access.h"
+#include "src/tint/lang/core/ir/binary.h"
+#include "src/tint/lang/core/ir/bitcast.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/break_if.h"
+#include "src/tint/lang/core/ir/call.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/construct.h"
+#include "src/tint/lang/core/ir/continue.h"
+#include "src/tint/lang/core/ir/convert.h"
+#include "src/tint/lang/core/ir/core_builtin_call.h"
+#include "src/tint/lang/core/ir/discard.h"
+#include "src/tint/lang/core/ir/exit_if.h"
+#include "src/tint/lang/core/ir/exit_loop.h"
+#include "src/tint/lang/core/ir/exit_switch.h"
+#include "src/tint/lang/core/ir/if.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/let.h"
+#include "src/tint/lang/core/ir/load.h"
+#include "src/tint/lang/core/ir/load_vector_element.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/next_iteration.h"
+#include "src/tint/lang/core/ir/return.h"
+#include "src/tint/lang/core/ir/store.h"
+#include "src/tint/lang/core/ir/store_vector_element.h"
+#include "src/tint/lang/core/ir/switch.h"
+#include "src/tint/lang/core/ir/swizzle.h"
+#include "src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h"
+#include "src/tint/lang/core/ir/unary.h"
+#include "src/tint/lang/core/ir/unreachable.h"
+#include "src/tint/lang/core/ir/user_call.h"
+#include "src/tint/lang/core/ir/validator.h"
+#include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/core/type/atomic.h"
 #include "src/tint/lang/core/type/depth_multisampled_texture.h"
 #include "src/tint/lang/core/type/depth_texture.h"
diff --git a/src/tint/ir/to_program.h b/src/tint/lang/core/ir/to_program.h
similarity index 87%
rename from src/tint/ir/to_program.h
rename to src/tint/lang/core/ir/to_program.h
index 13e4ea0..69d0210 100644
--- a/src/tint/ir/to_program.h
+++ b/src/tint/lang/core/ir/to_program.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TO_PROGRAM_H_
-#define SRC_TINT_IR_TO_PROGRAM_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TO_PROGRAM_H_
+#define SRC_TINT_LANG_CORE_IR_TO_PROGRAM_H_
 
 #include "src/tint/lang/wgsl/program/program.h"
 
@@ -31,4 +31,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_TO_PROGRAM_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TO_PROGRAM_H_
diff --git a/src/tint/ir/to_program_inlining_test.cc b/src/tint/lang/core/ir/to_program_inlining_test.cc
similarity index 99%
rename from src/tint/ir/to_program_inlining_test.cc
rename to src/tint/lang/core/ir/to_program_inlining_test.cc
index 77e1ce9..ef97c10 100644
--- a/src/tint/ir/to_program_inlining_test.cc
+++ b/src/tint/lang/core/ir/to_program_inlining_test.cc
@@ -14,9 +14,9 @@
 
 #include <string>
 
-#include "src/tint/ir/disassembler.h"
-#include "src/tint/ir/to_program.h"
-#include "src/tint/ir/to_program_test.h"
+#include "src/tint/lang/core/ir/disassembler.h"
+#include "src/tint/lang/core/ir/to_program.h"
+#include "src/tint/lang/core/ir/to_program_test.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/matrix.h"
 #include "src/tint/lang/wgsl/ast_writer/generator.h"
diff --git a/src/tint/ir/to_program_roundtrip_test.cc b/src/tint/lang/core/ir/to_program_roundtrip_test.cc
similarity index 99%
rename from src/tint/ir/to_program_roundtrip_test.cc
rename to src/tint/lang/core/ir/to_program_roundtrip_test.cc
index a9890f3..f489861 100644
--- a/src/tint/ir/to_program_roundtrip_test.cc
+++ b/src/tint/lang/core/ir/to_program_roundtrip_test.cc
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/from_program.h"
-#include "src/tint/ir/program_test_helper.h"
-#include "src/tint/ir/to_program.h"
+#include "src/tint/lang/core/ir/from_program.h"
+#include "src/tint/lang/core/ir/program_test_helper.h"
+#include "src/tint/lang/core/ir/to_program.h"
 #include "src/tint/lang/wgsl/ast_writer/generator.h"
 #include "src/tint/lang/wgsl/reader/parser.h"
 #include "src/tint/utils/text/string.h"
diff --git a/src/tint/ir/to_program_test.cc b/src/tint/lang/core/ir/to_program_test.cc
similarity index 99%
rename from src/tint/ir/to_program_test.cc
rename to src/tint/lang/core/ir/to_program_test.cc
index d69414a..33448a4 100644
--- a/src/tint/ir/to_program_test.cc
+++ b/src/tint/lang/core/ir/to_program_test.cc
@@ -15,9 +15,9 @@
 #include <sstream>
 #include <string>
 
-#include "src/tint/ir/disassembler.h"
-#include "src/tint/ir/to_program.h"
-#include "src/tint/ir/to_program_test.h"
+#include "src/tint/lang/core/ir/disassembler.h"
+#include "src/tint/lang/core/ir/to_program.h"
+#include "src/tint/lang/core/ir/to_program_test.h"
 #include "src/tint/lang/wgsl/ast_writer/generator.h"
 #include "src/tint/utils/text/string.h"
 
diff --git a/src/tint/ir/to_program_test.h b/src/tint/lang/core/ir/to_program_test.h
similarity index 91%
rename from src/tint/ir/to_program_test.h
rename to src/tint/lang/core/ir/to_program_test.h
index 2151e4f..d99a5d3 100644
--- a/src/tint/ir/to_program_test.h
+++ b/src/tint/lang/core/ir/to_program_test.h
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TO_PROGRAM_TEST_H_
-#define SRC_TINT_IR_TO_PROGRAM_TEST_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TO_PROGRAM_TEST_H_
+#define SRC_TINT_LANG_CORE_IR_TO_PROGRAM_TEST_H_
 
 #include <string>
 
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 #if !TINT_BUILD_WGSL_WRITER
 #error "to_program_test.h requires the WGSL writer to be enabled"
@@ -60,4 +60,4 @@
 
 }  // namespace tint::ir::test
 
-#endif  // SRC_TINT_IR_TO_PROGRAM_TEST_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TO_PROGRAM_TEST_H_
diff --git a/src/tint/ir/transform/add_empty_entry_point.cc b/src/tint/lang/core/ir/transform/add_empty_entry_point.cc
similarity index 89%
rename from src/tint/ir/transform/add_empty_entry_point.cc
rename to src/tint/lang/core/ir/transform/add_empty_entry_point.cc
index 985c2ff..ca6ef11 100644
--- a/src/tint/ir/transform/add_empty_entry_point.cc
+++ b/src/tint/lang/core/ir/transform/add_empty_entry_point.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/add_empty_entry_point.h"
+#include "src/tint/lang/core/ir/transform/add_empty_entry_point.h"
 
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::transform::AddEmptyEntryPoint);
 
diff --git a/src/tint/ir/transform/add_empty_entry_point.h b/src/tint/lang/core/ir/transform/add_empty_entry_point.h
similarity index 80%
rename from src/tint/ir/transform/add_empty_entry_point.h
rename to src/tint/lang/core/ir/transform/add_empty_entry_point.h
index 39f3413..ceaf6da 100644
--- a/src/tint/ir/transform/add_empty_entry_point.h
+++ b/src/tint/lang/core/ir/transform/add_empty_entry_point.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_ADD_EMPTY_ENTRY_POINT_H_
-#define SRC_TINT_IR_TRANSFORM_ADD_EMPTY_ENTRY_POINT_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_ADD_EMPTY_ENTRY_POINT_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_ADD_EMPTY_ENTRY_POINT_H_
 
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 
 namespace tint::ir::transform {
 
@@ -33,4 +33,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_ADD_EMPTY_ENTRY_POINT_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_ADD_EMPTY_ENTRY_POINT_H_
diff --git a/src/tint/ir/transform/add_empty_entry_point_test.cc b/src/tint/lang/core/ir/transform/add_empty_entry_point_test.cc
similarity index 91%
rename from src/tint/ir/transform/add_empty_entry_point_test.cc
rename to src/tint/lang/core/ir/transform/add_empty_entry_point_test.cc
index d74ed0e..b86c71d 100644
--- a/src/tint/ir/transform/add_empty_entry_point_test.cc
+++ b/src/tint/lang/core/ir/transform/add_empty_entry_point_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/add_empty_entry_point.h"
+#include "src/tint/lang/core/ir/transform/add_empty_entry_point.h"
 
 #include <utility>
 
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 
 namespace tint::ir::transform {
 namespace {
diff --git a/src/tint/ir/transform/block_decorated_structs.cc b/src/tint/lang/core/ir/transform/block_decorated_structs.cc
similarity index 96%
rename from src/tint/ir/transform/block_decorated_structs.cc
rename to src/tint/lang/core/ir/transform/block_decorated_structs.cc
index c0e2e20..a270756 100644
--- a/src/tint/ir/transform/block_decorated_structs.cc
+++ b/src/tint/lang/core/ir/transform/block_decorated_structs.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/block_decorated_structs.h"
+#include "src/tint/lang/core/ir/transform/block_decorated_structs.h"
 
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/type/pointer.h"
 #include "src/tint/lang/core/type/struct.h"
 
diff --git a/src/tint/ir/transform/block_decorated_structs.h b/src/tint/lang/core/ir/transform/block_decorated_structs.h
similarity index 83%
rename from src/tint/ir/transform/block_decorated_structs.h
rename to src/tint/lang/core/ir/transform/block_decorated_structs.h
index ba47305..bc9611c 100644
--- a/src/tint/ir/transform/block_decorated_structs.h
+++ b/src/tint/lang/core/ir/transform/block_decorated_structs.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_BLOCK_DECORATED_STRUCTS_H_
-#define SRC_TINT_IR_TRANSFORM_BLOCK_DECORATED_STRUCTS_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_BLOCK_DECORATED_STRUCTS_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_BLOCK_DECORATED_STRUCTS_H_
 
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 
 #include "src/tint/lang/core/type/struct.h"
 
@@ -37,4 +37,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_BLOCK_DECORATED_STRUCTS_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_BLOCK_DECORATED_STRUCTS_H_
diff --git a/src/tint/ir/transform/block_decorated_structs_test.cc b/src/tint/lang/core/ir/transform/block_decorated_structs_test.cc
similarity index 98%
rename from src/tint/ir/transform/block_decorated_structs_test.cc
rename to src/tint/lang/core/ir/transform/block_decorated_structs_test.cc
index b21409c..1085eeb 100644
--- a/src/tint/ir/transform/block_decorated_structs_test.cc
+++ b/src/tint/lang/core/ir/transform/block_decorated_structs_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/block_decorated_structs.h"
+#include "src/tint/lang/core/ir/transform/block_decorated_structs.h"
 
 #include <utility>
 
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/pointer.h"
 #include "src/tint/lang/core/type/struct.h"
diff --git a/src/tint/ir/transform/builtin_polyfill_spirv.cc b/src/tint/lang/core/ir/transform/builtin_polyfill_spirv.cc
similarity index 99%
rename from src/tint/ir/transform/builtin_polyfill_spirv.cc
rename to src/tint/lang/core/ir/transform/builtin_polyfill_spirv.cc
index 996264a..6aa2372 100644
--- a/src/tint/ir/transform/builtin_polyfill_spirv.cc
+++ b/src/tint/lang/core/ir/transform/builtin_polyfill_spirv.cc
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/builtin_polyfill_spirv.h"
+#include "src/tint/lang/core/ir/transform/builtin_polyfill_spirv.h"
 
 #include <utility>
 
 #include "spirv/unified1/spirv.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/type/builtin_structs.h"
 #include "src/tint/lang/core/type/depth_multisampled_texture.h"
 #include "src/tint/lang/core/type/depth_texture.h"
diff --git a/src/tint/ir/transform/builtin_polyfill_spirv.h b/src/tint/lang/core/ir/transform/builtin_polyfill_spirv.h
similarity index 89%
rename from src/tint/ir/transform/builtin_polyfill_spirv.h
rename to src/tint/lang/core/ir/transform/builtin_polyfill_spirv.h
index d21d443..e4692b5 100644
--- a/src/tint/ir/transform/builtin_polyfill_spirv.h
+++ b/src/tint/lang/core/ir/transform/builtin_polyfill_spirv.h
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_BUILTIN_POLYFILL_SPIRV_H_
-#define SRC_TINT_IR_TRANSFORM_BUILTIN_POLYFILL_SPIRV_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_BUILTIN_POLYFILL_SPIRV_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_BUILTIN_POLYFILL_SPIRV_H_
 
 #include <string>
 
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 #include "src/tint/lang/core/type/type.h"
 
 // Forward declarations
@@ -84,4 +84,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_BUILTIN_POLYFILL_SPIRV_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_BUILTIN_POLYFILL_SPIRV_H_
diff --git a/src/tint/ir/transform/builtin_polyfill_spirv_test.cc b/src/tint/lang/core/ir/transform/builtin_polyfill_spirv_test.cc
similarity index 99%
rename from src/tint/ir/transform/builtin_polyfill_spirv_test.cc
rename to src/tint/lang/core/ir/transform/builtin_polyfill_spirv_test.cc
index b9c1e9c..0bf1cba 100644
--- a/src/tint/ir/transform/builtin_polyfill_spirv_test.cc
+++ b/src/tint/lang/core/ir/transform/builtin_polyfill_spirv_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/builtin_polyfill_spirv.h"
+#include "src/tint/lang/core/ir/transform/builtin_polyfill_spirv.h"
 
 #include <utility>
 
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/atomic.h"
 #include "src/tint/lang/core/type/builtin_structs.h"
diff --git a/src/tint/ir/transform/demote_to_helper.cc b/src/tint/lang/core/ir/transform/demote_to_helper.cc
similarity index 97%
rename from src/tint/ir/transform/demote_to_helper.cc
rename to src/tint/lang/core/ir/transform/demote_to_helper.cc
index 997d563..90bf88f 100644
--- a/src/tint/ir/transform/demote_to_helper.cc
+++ b/src/tint/lang/core/ir/transform/demote_to_helper.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/demote_to_helper.h"
+#include "src/tint/lang/core/ir/transform/demote_to_helper.h"
 
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::transform::DemoteToHelper);
 
diff --git a/src/tint/ir/transform/demote_to_helper.h b/src/tint/lang/core/ir/transform/demote_to_helper.h
similarity index 85%
rename from src/tint/ir/transform/demote_to_helper.h
rename to src/tint/lang/core/ir/transform/demote_to_helper.h
index 30e5e33..0adc1f9 100644
--- a/src/tint/ir/transform/demote_to_helper.h
+++ b/src/tint/lang/core/ir/transform/demote_to_helper.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_DEMOTE_TO_HELPER_H_
-#define SRC_TINT_IR_TRANSFORM_DEMOTE_TO_HELPER_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_DEMOTE_TO_HELPER_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_DEMOTE_TO_HELPER_H_
 
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 
 namespace tint::ir::transform {
 
@@ -41,4 +41,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_DEMOTE_TO_HELPER_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_DEMOTE_TO_HELPER_H_
diff --git a/src/tint/ir/transform/demote_to_helper_test.cc b/src/tint/lang/core/ir/transform/demote_to_helper_test.cc
similarity index 99%
rename from src/tint/ir/transform/demote_to_helper_test.cc
rename to src/tint/lang/core/ir/transform/demote_to_helper_test.cc
index d534f18..ec1fdbd 100644
--- a/src/tint/ir/transform/demote_to_helper_test.cc
+++ b/src/tint/lang/core/ir/transform/demote_to_helper_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/demote_to_helper.h"
+#include "src/tint/lang/core/ir/transform/demote_to_helper.h"
 
 #include <utility>
 
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 #include "src/tint/lang/core/type/builtin_structs.h"
 #include "src/tint/lang/core/type/f32.h"
 #include "src/tint/lang/core/type/storage_texture.h"
diff --git a/src/tint/ir/transform/expand_implicit_splats.cc b/src/tint/lang/core/ir/transform/expand_implicit_splats.cc
similarity index 96%
rename from src/tint/ir/transform/expand_implicit_splats.cc
rename to src/tint/lang/core/ir/transform/expand_implicit_splats.cc
index 79b43cf..9b26b30 100644
--- a/src/tint/ir/transform/expand_implicit_splats.cc
+++ b/src/tint/lang/core/ir/transform/expand_implicit_splats.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/expand_implicit_splats.h"
+#include "src/tint/lang/core/ir/transform/expand_implicit_splats.h"
 
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::transform::ExpandImplicitSplats);
 
diff --git a/src/tint/ir/transform/expand_implicit_splats.h b/src/tint/lang/core/ir/transform/expand_implicit_splats.h
similarity index 81%
rename from src/tint/ir/transform/expand_implicit_splats.h
rename to src/tint/lang/core/ir/transform/expand_implicit_splats.h
index ec1ae18..ad15f96 100644
--- a/src/tint/ir/transform/expand_implicit_splats.h
+++ b/src/tint/lang/core/ir/transform/expand_implicit_splats.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_EXPAND_IMPLICIT_SPLATS_H_
-#define SRC_TINT_IR_TRANSFORM_EXPAND_IMPLICIT_SPLATS_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_EXPAND_IMPLICIT_SPLATS_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_EXPAND_IMPLICIT_SPLATS_H_
 
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 
 namespace tint::ir::transform {
 
@@ -34,4 +34,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_EXPAND_IMPLICIT_SPLATS_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_EXPAND_IMPLICIT_SPLATS_H_
diff --git a/src/tint/ir/transform/expand_implicit_splats_test.cc b/src/tint/lang/core/ir/transform/expand_implicit_splats_test.cc
similarity index 98%
rename from src/tint/ir/transform/expand_implicit_splats_test.cc
rename to src/tint/lang/core/ir/transform/expand_implicit_splats_test.cc
index 2e36c98..55edaa8 100644
--- a/src/tint/ir/transform/expand_implicit_splats_test.cc
+++ b/src/tint/lang/core/ir/transform/expand_implicit_splats_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/expand_implicit_splats.h"
+#include "src/tint/lang/core/ir/transform/expand_implicit_splats.h"
 
 #include <utility>
 
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 
 namespace tint::ir::transform {
 namespace {
diff --git a/src/tint/ir/transform/handle_matrix_arithmetic.cc b/src/tint/lang/core/ir/transform/handle_matrix_arithmetic.cc
similarity index 97%
rename from src/tint/ir/transform/handle_matrix_arithmetic.cc
rename to src/tint/lang/core/ir/transform/handle_matrix_arithmetic.cc
index 5d33bc4..89816ff 100644
--- a/src/tint/ir/transform/handle_matrix_arithmetic.cc
+++ b/src/tint/lang/core/ir/transform/handle_matrix_arithmetic.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/handle_matrix_arithmetic.h"
+#include "src/tint/lang/core/ir/transform/handle_matrix_arithmetic.h"
 
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/type/matrix.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::transform::HandleMatrixArithmetic);
diff --git a/src/tint/ir/transform/handle_matrix_arithmetic.h b/src/tint/lang/core/ir/transform/handle_matrix_arithmetic.h
similarity index 81%
rename from src/tint/ir/transform/handle_matrix_arithmetic.h
rename to src/tint/lang/core/ir/transform/handle_matrix_arithmetic.h
index 3129dd3..f7630ea 100644
--- a/src/tint/ir/transform/handle_matrix_arithmetic.h
+++ b/src/tint/lang/core/ir/transform/handle_matrix_arithmetic.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_HANDLE_MATRIX_ARITHMETIC_H_
-#define SRC_TINT_IR_TRANSFORM_HANDLE_MATRIX_ARITHMETIC_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_HANDLE_MATRIX_ARITHMETIC_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_HANDLE_MATRIX_ARITHMETIC_H_
 
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 
 namespace tint::ir::transform {
 
@@ -34,4 +34,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_HANDLE_MATRIX_ARITHMETIC_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_HANDLE_MATRIX_ARITHMETIC_H_
diff --git a/src/tint/ir/transform/handle_matrix_arithmetic_test.cc b/src/tint/lang/core/ir/transform/handle_matrix_arithmetic_test.cc
similarity index 98%
rename from src/tint/ir/transform/handle_matrix_arithmetic_test.cc
rename to src/tint/lang/core/ir/transform/handle_matrix_arithmetic_test.cc
index 7f0f5c1..20ef140 100644
--- a/src/tint/ir/transform/handle_matrix_arithmetic_test.cc
+++ b/src/tint/lang/core/ir/transform/handle_matrix_arithmetic_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/handle_matrix_arithmetic.h"
+#include "src/tint/lang/core/ir/transform/handle_matrix_arithmetic.h"
 
 #include <utility>
 
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 #include "src/tint/lang/core/type/matrix.h"
 
 namespace tint::ir::transform {
diff --git a/src/tint/ir/transform/merge_return.cc b/src/tint/lang/core/ir/transform/merge_return.cc
similarity index 98%
rename from src/tint/ir/transform/merge_return.cc
rename to src/tint/lang/core/ir/transform/merge_return.cc
index ee9d514..d02dcb7 100644
--- a/src/tint/ir/transform/merge_return.cc
+++ b/src/tint/lang/core/ir/transform/merge_return.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/merge_return.h"
+#include "src/tint/lang/core/ir/transform/merge_return.h"
 
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/utils/containers/reverse.h"
 #include "src/tint/utils/containers/transform.h"
 #include "src/tint/utils/rtti/switch.h"
diff --git a/src/tint/ir/transform/merge_return.h b/src/tint/lang/core/ir/transform/merge_return.h
similarity index 83%
rename from src/tint/ir/transform/merge_return.h
rename to src/tint/lang/core/ir/transform/merge_return.h
index d127366..31bb914 100644
--- a/src/tint/ir/transform/merge_return.h
+++ b/src/tint/lang/core/ir/transform/merge_return.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_MERGE_RETURN_H_
-#define SRC_TINT_IR_TRANSFORM_MERGE_RETURN_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_MERGE_RETURN_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_MERGE_RETURN_H_
 
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 
 namespace tint::ir::transform {
 
@@ -37,4 +37,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_MERGE_RETURN_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_MERGE_RETURN_H_
diff --git a/src/tint/ir/transform/merge_return_test.cc b/src/tint/lang/core/ir/transform/merge_return_test.cc
similarity index 99%
rename from src/tint/ir/transform/merge_return_test.cc
rename to src/tint/lang/core/ir/transform/merge_return_test.cc
index e4002ef..055de57 100644
--- a/src/tint/ir/transform/merge_return_test.cc
+++ b/src/tint/lang/core/ir/transform/merge_return_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/merge_return.h"
+#include "src/tint/lang/core/ir/transform/merge_return.h"
 
 #include <utility>
 
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 
 namespace tint::ir::transform {
 namespace {
diff --git a/src/tint/ir/transform/rename_conflicts_wgsl.cc b/src/tint/lang/core/ir/transform/rename_conflicts_wgsl.cc
similarity index 95%
rename from src/tint/ir/transform/rename_conflicts_wgsl.cc
rename to src/tint/lang/core/ir/transform/rename_conflicts_wgsl.cc
index f70eca5..28b6321 100644
--- a/src/tint/ir/transform/rename_conflicts_wgsl.cc
+++ b/src/tint/lang/core/ir/transform/rename_conflicts_wgsl.cc
@@ -14,16 +14,16 @@
 
 #include <variant>
 
-#include "src/tint/ir/construct.h"
-#include "src/tint/ir/control_instruction.h"
-#include "src/tint/ir/core_builtin_call.h"
-#include "src/tint/ir/function.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/module.h"
-#include "src/tint/ir/multi_in_block.h"
-#include "src/tint/ir/transform/rename_conflicts_wgsl.h"
-#include "src/tint/ir/var.h"
+#include "src/tint/lang/core/ir/construct.h"
+#include "src/tint/lang/core/ir/control_instruction.h"
+#include "src/tint/lang/core/ir/core_builtin_call.h"
+#include "src/tint/lang/core/ir/function.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h"
+#include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/core/type/matrix.h"
 #include "src/tint/lang/core/type/scalar.h"
 #include "src/tint/lang/core/type/struct.h"
diff --git a/src/tint/ir/transform/rename_conflicts_wgsl.h b/src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h
similarity index 84%
rename from src/tint/ir/transform/rename_conflicts_wgsl.h
rename to src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h
index acc3369..a5df3e5 100644
--- a/src/tint/ir/transform/rename_conflicts_wgsl.h
+++ b/src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_RENAME_CONFLICTS_WGSL_H_
-#define SRC_TINT_IR_TRANSFORM_RENAME_CONFLICTS_WGSL_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_RENAME_CONFLICTS_WGSL_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_RENAME_CONFLICTS_WGSL_H_
 
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 
 // Forward declarations
 namespace tint::ir {
@@ -46,4 +46,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_RENAME_CONFLICTS_WGSL_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_RENAME_CONFLICTS_WGSL_H_
diff --git a/src/tint/ir/transform/rename_conflicts_wgsl_test.cc b/src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc
similarity index 99%
rename from src/tint/ir/transform/rename_conflicts_wgsl_test.cc
rename to src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc
index f8e0ffa..3ea134c29a 100644
--- a/src/tint/ir/transform/rename_conflicts_wgsl_test.cc
+++ b/src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/rename_conflicts_wgsl.h"
+#include "src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h"
 
 #include <utility>
 
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 #include "src/tint/lang/core/type/matrix.h"
 
 namespace tint::ir::transform {
diff --git a/src/tint/ir/transform/shader_io.cc b/src/tint/lang/core/ir/transform/shader_io.cc
similarity index 98%
rename from src/tint/ir/transform/shader_io.cc
rename to src/tint/lang/core/ir/transform/shader_io.cc
index a979f57..292ed4a 100644
--- a/src/tint/ir/transform/shader_io.cc
+++ b/src/tint/lang/core/ir/transform/shader_io.cc
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/shader_io.h"
+#include "src/tint/lang/core/ir/transform/shader_io.h"
 
 #include <memory>
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/type/struct.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::transform::ShaderIO);
diff --git a/src/tint/ir/transform/shader_io.h b/src/tint/lang/core/ir/transform/shader_io.h
similarity index 94%
rename from src/tint/ir/transform/shader_io.h
rename to src/tint/lang/core/ir/transform/shader_io.h
index 77a5629..5a5ef49 100644
--- a/src/tint/ir/transform/shader_io.h
+++ b/src/tint/lang/core/ir/transform/shader_io.h
@@ -12,14 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_SHADER_IO_H_
-#define SRC_TINT_IR_TRANSFORM_SHADER_IO_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_SHADER_IO_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_SHADER_IO_H_
 
 #include <memory>
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 #include "src/tint/lang/core/type/manager.h"
 
 namespace tint::ir::transform {
@@ -131,4 +131,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_SHADER_IO_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_SHADER_IO_H_
diff --git a/src/tint/ir/transform/shader_io_spirv.cc b/src/tint/lang/core/ir/transform/shader_io_spirv.cc
similarity index 97%
rename from src/tint/ir/transform/shader_io_spirv.cc
rename to src/tint/lang/core/ir/transform/shader_io_spirv.cc
index dc1f5a8..d22722c 100644
--- a/src/tint/ir/transform/shader_io_spirv.cc
+++ b/src/tint/lang/core/ir/transform/shader_io_spirv.cc
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/shader_io_spirv.h"
+#include "src/tint/lang/core/ir/transform/shader_io_spirv.h"
 
 #include <memory>
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/struct.h"
 
diff --git a/src/tint/ir/transform/shader_io_spirv.h b/src/tint/lang/core/ir/transform/shader_io_spirv.h
similarity index 83%
rename from src/tint/ir/transform/shader_io_spirv.h
rename to src/tint/lang/core/ir/transform/shader_io_spirv.h
index f374e9c..8b3eea6 100644
--- a/src/tint/ir/transform/shader_io_spirv.h
+++ b/src/tint/lang/core/ir/transform/shader_io_spirv.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_SHADER_IO_SPIRV_H_
-#define SRC_TINT_IR_TRANSFORM_SHADER_IO_SPIRV_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_SHADER_IO_SPIRV_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_SHADER_IO_SPIRV_H_
 
-#include "src/tint/ir/transform/shader_io.h"
+#include "src/tint/lang/core/ir/transform/shader_io.h"
 
 #include <memory>
 
@@ -36,4 +36,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_SHADER_IO_SPIRV_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_SHADER_IO_SPIRV_H_
diff --git a/src/tint/ir/transform/shader_io_spirv_test.cc b/src/tint/lang/core/ir/transform/shader_io_spirv_test.cc
similarity index 99%
rename from src/tint/ir/transform/shader_io_spirv_test.cc
rename to src/tint/lang/core/ir/transform/shader_io_spirv_test.cc
index 61be6d1..2f07838 100644
--- a/src/tint/ir/transform/shader_io_spirv_test.cc
+++ b/src/tint/lang/core/ir/transform/shader_io_spirv_test.cc
@@ -14,8 +14,8 @@
 
 #include <utility>
 
-#include "src/tint/ir/transform/shader_io_spirv.h"
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/shader_io_spirv.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 #include "src/tint/lang/core/type/struct.h"
 
 namespace tint::ir::transform {
diff --git a/src/tint/ir/transform/test_helper.h b/src/tint/lang/core/ir/transform/test_helper.h
similarity index 87%
rename from src/tint/ir/transform/test_helper.h
rename to src/tint/lang/core/ir/transform/test_helper.h
index 5b9b937..1de7bd8 100644
--- a/src/tint/ir/transform/test_helper.h
+++ b/src/tint/lang/core/ir/transform/test_helper.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_TEST_HELPER_H_
-#define SRC_TINT_IR_TRANSFORM_TEST_HELPER_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_TEST_HELPER_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_TEST_HELPER_H_
 
 #include <memory>
 #include <string>
@@ -21,10 +21,10 @@
 #include <vector>
 
 #include "gtest/gtest.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/disassembler.h"
-#include "src/tint/ir/transform/transform.h"
-#include "src/tint/ir/validator.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/disassembler.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/validator.h"
 #include "src/tint/transform/manager.h"
 
 namespace tint::ir::transform {
@@ -87,4 +87,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_TEST_HELPER_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_TEST_HELPER_H_
diff --git a/src/tint/ir/transform/transform.cc b/src/tint/lang/core/ir/transform/transform.cc
similarity index 93%
rename from src/tint/ir/transform/transform.cc
rename to src/tint/lang/core/ir/transform/transform.cc
index eb5e68e..efb23a2 100644
--- a/src/tint/ir/transform/transform.cc
+++ b/src/tint/lang/core/ir/transform/transform.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::transform::Transform);
 
diff --git a/src/tint/ir/transform/transform.h b/src/tint/lang/core/ir/transform/transform.h
similarity index 89%
rename from src/tint/ir/transform/transform.h
rename to src/tint/lang/core/ir/transform/transform.h
index 54bc540..d4f52f6 100644
--- a/src/tint/ir/transform/transform.h
+++ b/src/tint/lang/core/ir/transform/transform.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_TRANSFORM_H_
-#define SRC_TINT_IR_TRANSFORM_TRANSFORM_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_TRANSFORM_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_TRANSFORM_H_
 
 #include "src/tint/transform/transform.h"
 
@@ -46,4 +46,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_TRANSFORM_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_TRANSFORM_H_
diff --git a/src/tint/ir/transform/var_for_dynamic_index.cc b/src/tint/lang/core/ir/transform/var_for_dynamic_index.cc
similarity index 97%
rename from src/tint/ir/transform/var_for_dynamic_index.cc
rename to src/tint/lang/core/ir/transform/var_for_dynamic_index.cc
index 00c5ad8..05776a8 100644
--- a/src/tint/ir/transform/var_for_dynamic_index.cc
+++ b/src/tint/lang/core/ir/transform/var_for_dynamic_index.cc
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/var_for_dynamic_index.h"
+#include "src/tint/lang/core/ir/transform/var_for_dynamic_index.h"
 
 #include <utility>
 
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/matrix.h"
 #include "src/tint/lang/core/type/pointer.h"
diff --git a/src/tint/ir/transform/var_for_dynamic_index.h b/src/tint/lang/core/ir/transform/var_for_dynamic_index.h
similarity index 83%
rename from src/tint/ir/transform/var_for_dynamic_index.h
rename to src/tint/lang/core/ir/transform/var_for_dynamic_index.h
index 1f86b7d..01c05be 100644
--- a/src/tint/ir/transform/var_for_dynamic_index.h
+++ b/src/tint/lang/core/ir/transform/var_for_dynamic_index.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_TRANSFORM_VAR_FOR_DYNAMIC_INDEX_H_
-#define SRC_TINT_IR_TRANSFORM_VAR_FOR_DYNAMIC_INDEX_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_VAR_FOR_DYNAMIC_INDEX_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_VAR_FOR_DYNAMIC_INDEX_H_
 
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 
 namespace tint::ir::transform {
 
@@ -36,4 +36,4 @@
 
 }  // namespace tint::ir::transform
 
-#endif  // SRC_TINT_IR_TRANSFORM_VAR_FOR_DYNAMIC_INDEX_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_VAR_FOR_DYNAMIC_INDEX_H_
diff --git a/src/tint/ir/transform/var_for_dynamic_index_test.cc b/src/tint/lang/core/ir/transform/var_for_dynamic_index_test.cc
similarity index 98%
rename from src/tint/ir/transform/var_for_dynamic_index_test.cc
rename to src/tint/lang/core/ir/transform/var_for_dynamic_index_test.cc
index fdd8e6f..e0c6dd2 100644
--- a/src/tint/ir/transform/var_for_dynamic_index_test.cc
+++ b/src/tint/lang/core/ir/transform/var_for_dynamic_index_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/transform/var_for_dynamic_index.h"
+#include "src/tint/lang/core/ir/transform/var_for_dynamic_index.h"
 
 #include <utility>
 
-#include "src/tint/ir/transform/test_helper.h"
+#include "src/tint/lang/core/ir/transform/test_helper.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/matrix.h"
 #include "src/tint/lang/core/type/struct.h"
diff --git a/src/tint/ir/unary.cc b/src/tint/lang/core/ir/unary.cc
similarity index 95%
rename from src/tint/ir/unary.cc
rename to src/tint/lang/core/ir/unary.cc
index 3f22809..41a9aaa 100644
--- a/src/tint/ir/unary.cc
+++ b/src/tint/lang/core/ir/unary.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/unary.h"
+#include "src/tint/lang/core/ir/unary.h"
 #include "src/tint/utils/debug/debug.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Unary);
diff --git a/src/tint/ir/unary.h b/src/tint/lang/core/ir/unary.h
similarity index 89%
rename from src/tint/ir/unary.h
rename to src/tint/lang/core/ir/unary.h
index 91303ac..0489f7e 100644
--- a/src/tint/ir/unary.h
+++ b/src/tint/lang/core/ir/unary.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_UNARY_H_
-#define SRC_TINT_IR_UNARY_H_
+#ifndef SRC_TINT_LANG_CORE_IR_UNARY_H_
+#define SRC_TINT_LANG_CORE_IR_UNARY_H_
 
-#include "src/tint/ir/operand_instruction.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -54,4 +54,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_UNARY_H_
+#endif  // SRC_TINT_LANG_CORE_IR_UNARY_H_
diff --git a/src/tint/ir/unary_test.cc b/src/tint/lang/core/ir/unary_test.cc
similarity index 94%
rename from src/tint/ir/unary_test.cc
rename to src/tint/lang/core/ir/unary_test.cc
index b13cc09..cfc42f1 100644
--- a/src/tint/ir/unary_test.cc
+++ b/src/tint/lang/core/ir/unary_test.cc
@@ -14,9 +14,9 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/unreachable.cc b/src/tint/lang/core/ir/unreachable.cc
similarity index 93%
rename from src/tint/ir/unreachable.cc
rename to src/tint/lang/core/ir/unreachable.cc
index b1aadfd..158d77f 100644
--- a/src/tint/ir/unreachable.cc
+++ b/src/tint/lang/core/ir/unreachable.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/unreachable.h"
+#include "src/tint/lang/core/ir/unreachable.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Unreachable);
 
diff --git a/src/tint/ir/unreachable.h b/src/tint/lang/core/ir/unreachable.h
similarity index 83%
rename from src/tint/ir/unreachable.h
rename to src/tint/lang/core/ir/unreachable.h
index c15b3a3..81c9020 100644
--- a/src/tint/ir/unreachable.h
+++ b/src/tint/lang/core/ir/unreachable.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_UNREACHABLE_H_
-#define SRC_TINT_IR_UNREACHABLE_H_
+#ifndef SRC_TINT_LANG_CORE_IR_UNREACHABLE_H_
+#define SRC_TINT_LANG_CORE_IR_UNREACHABLE_H_
 
-#include "src/tint/ir/terminator.h"
+#include "src/tint/lang/core/ir/terminator.h"
 
 namespace tint::ir {
 
@@ -30,4 +30,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_UNREACHABLE_H_
+#endif  // SRC_TINT_LANG_CORE_IR_UNREACHABLE_H_
diff --git a/src/tint/ir/user_call.cc b/src/tint/lang/core/ir/user_call.cc
similarity index 95%
rename from src/tint/ir/user_call.cc
rename to src/tint/lang/core/ir/user_call.cc
index bd1e9a6..4bd8d83 100644
--- a/src/tint/ir/user_call.cc
+++ b/src/tint/lang/core/ir/user_call.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/user_call.h"
+#include "src/tint/lang/core/ir/user_call.h"
 
 #include <utility>
 
diff --git a/src/tint/ir/user_call.h b/src/tint/lang/core/ir/user_call.h
similarity index 88%
rename from src/tint/ir/user_call.h
rename to src/tint/lang/core/ir/user_call.h
index 95d55d9..9638bb7 100644
--- a/src/tint/ir/user_call.h
+++ b/src/tint/lang/core/ir/user_call.h
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_USER_CALL_H_
-#define SRC_TINT_IR_USER_CALL_H_
+#ifndef SRC_TINT_LANG_CORE_IR_USER_CALL_H_
+#define SRC_TINT_LANG_CORE_IR_USER_CALL_H_
 
-#include "src/tint/ir/call.h"
-#include "src/tint/ir/function.h"
+#include "src/tint/lang/core/ir/call.h"
+#include "src/tint/lang/core/ir/function.h"
 #include "src/tint/utils/rtti/castable.h"
 
 namespace tint::ir {
@@ -49,4 +49,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_USER_CALL_H_
+#endif  // SRC_TINT_LANG_CORE_IR_USER_CALL_H_
diff --git a/src/tint/ir/user_call_test.cc b/src/tint/lang/core/ir/user_call_test.cc
similarity index 94%
rename from src/tint/ir/user_call_test.cc
rename to src/tint/lang/core/ir/user_call_test.cc
index eb2cedb..4f41efa 100644
--- a/src/tint/ir/user_call_test.cc
+++ b/src/tint/lang/core/ir/user_call_test.cc
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/user_call.h"
+#include "src/tint/lang/core/ir/user_call.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/ir/validator.cc b/src/tint/lang/core/ir/validator.cc
similarity index 92%
rename from src/tint/ir/validator.cc
rename to src/tint/lang/core/ir/validator.cc
index abc7d64..02f1892 100644
--- a/src/tint/ir/validator.cc
+++ b/src/tint/lang/core/ir/validator.cc
@@ -12,44 +12,44 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/validator.h"
+#include "src/tint/lang/core/ir/validator.h"
 
 #include <memory>
 #include <string>
 #include <utility>
 
-#include "src/tint/ir/access.h"
-#include "src/tint/ir/binary.h"
-#include "src/tint/ir/bitcast.h"
-#include "src/tint/ir/break_if.h"
-#include "src/tint/ir/construct.h"
-#include "src/tint/ir/continue.h"
-#include "src/tint/ir/convert.h"
-#include "src/tint/ir/core_builtin_call.h"
-#include "src/tint/ir/disassembler.h"
-#include "src/tint/ir/discard.h"
-#include "src/tint/ir/exit_if.h"
-#include "src/tint/ir/exit_loop.h"
-#include "src/tint/ir/exit_switch.h"
-#include "src/tint/ir/function.h"
-#include "src/tint/ir/if.h"
-#include "src/tint/ir/intrinsic_call.h"
-#include "src/tint/ir/let.h"
-#include "src/tint/ir/load.h"
-#include "src/tint/ir/load_vector_element.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/multi_in_block.h"
-#include "src/tint/ir/next_iteration.h"
-#include "src/tint/ir/return.h"
-#include "src/tint/ir/store.h"
-#include "src/tint/ir/store_vector_element.h"
-#include "src/tint/ir/switch.h"
-#include "src/tint/ir/swizzle.h"
-#include "src/tint/ir/terminate_invocation.h"
-#include "src/tint/ir/unary.h"
-#include "src/tint/ir/unreachable.h"
-#include "src/tint/ir/user_call.h"
-#include "src/tint/ir/var.h"
+#include "src/tint/lang/core/ir/access.h"
+#include "src/tint/lang/core/ir/binary.h"
+#include "src/tint/lang/core/ir/bitcast.h"
+#include "src/tint/lang/core/ir/break_if.h"
+#include "src/tint/lang/core/ir/construct.h"
+#include "src/tint/lang/core/ir/continue.h"
+#include "src/tint/lang/core/ir/convert.h"
+#include "src/tint/lang/core/ir/core_builtin_call.h"
+#include "src/tint/lang/core/ir/disassembler.h"
+#include "src/tint/lang/core/ir/discard.h"
+#include "src/tint/lang/core/ir/exit_if.h"
+#include "src/tint/lang/core/ir/exit_loop.h"
+#include "src/tint/lang/core/ir/exit_switch.h"
+#include "src/tint/lang/core/ir/function.h"
+#include "src/tint/lang/core/ir/if.h"
+#include "src/tint/lang/core/ir/intrinsic_call.h"
+#include "src/tint/lang/core/ir/let.h"
+#include "src/tint/lang/core/ir/load.h"
+#include "src/tint/lang/core/ir/load_vector_element.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/next_iteration.h"
+#include "src/tint/lang/core/ir/return.h"
+#include "src/tint/lang/core/ir/store.h"
+#include "src/tint/lang/core/ir/store_vector_element.h"
+#include "src/tint/lang/core/ir/switch.h"
+#include "src/tint/lang/core/ir/swizzle.h"
+#include "src/tint/lang/core/ir/terminate_invocation.h"
+#include "src/tint/lang/core/ir/unary.h"
+#include "src/tint/lang/core/ir/unreachable.h"
+#include "src/tint/lang/core/ir/user_call.h"
+#include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/core/type/bool.h"
 #include "src/tint/lang/core/type/pointer.h"
 #include "src/tint/lang/core/type/vector.h"
diff --git a/src/tint/ir/validator.h b/src/tint/lang/core/ir/validator.h
similarity index 96%
rename from src/tint/ir/validator.h
rename to src/tint/lang/core/ir/validator.h
index befbcb9..cbd1611 100644
--- a/src/tint/ir/validator.h
+++ b/src/tint/lang/core/ir/validator.h
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_VALIDATOR_H_
-#define SRC_TINT_IR_VALIDATOR_H_
+#ifndef SRC_TINT_LANG_CORE_IR_VALIDATOR_H_
+#define SRC_TINT_LANG_CORE_IR_VALIDATOR_H_
 
 #include <string>
 
-#include "src/tint/ir/disassembler.h"
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/disassembler.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/utils/diagnostic/diagnostic.h"
 #include "src/tint/utils/result/result.h"
 
@@ -241,4 +241,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_VALIDATOR_H_
+#endif  // SRC_TINT_LANG_CORE_IR_VALIDATOR_H_
diff --git a/src/tint/ir/validator_test.cc b/src/tint/lang/core/ir/validator_test.cc
similarity index 99%
rename from src/tint/ir/validator_test.cc
rename to src/tint/lang/core/ir/validator_test.cc
index 8abe3eb..9921a81 100644
--- a/src/tint/ir/validator_test.cc
+++ b/src/tint/lang/core/ir/validator_test.cc
@@ -16,9 +16,9 @@
 #include <utility>
 
 #include "gmock/gmock.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/ir_test_helper.h"
-#include "src/tint/ir/validator.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/validator.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/matrix.h"
 #include "src/tint/lang/core/type/pointer.h"
diff --git a/src/tint/ir/value.cc b/src/tint/lang/core/ir/value.cc
similarity index 90%
rename from src/tint/ir/value.cc
rename to src/tint/lang/core/ir/value.cc
index dd93f4b..4353ab6 100644
--- a/src/tint/ir/value.cc
+++ b/src/tint/lang/core/ir/value.cc
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/value.h"
+#include "src/tint/lang/core/ir/value.h"
 
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/instruction.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/instruction.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Value);
 
diff --git a/src/tint/ir/value.h b/src/tint/lang/core/ir/value.h
similarity index 96%
rename from src/tint/ir/value.h
rename to src/tint/lang/core/ir/value.h
index 9881e16..bc4c79d 100644
--- a/src/tint/ir/value.h
+++ b/src/tint/lang/core/ir/value.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_VALUE_H_
-#define SRC_TINT_IR_VALUE_H_
+#ifndef SRC_TINT_LANG_CORE_IR_VALUE_H_
+#define SRC_TINT_LANG_CORE_IR_VALUE_H_
 
 #include "src/tint/lang/core/type/type.h"
 #include "src/tint/utils/containers/hashset.h"
@@ -104,4 +104,4 @@
 };
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_VALUE_H_
+#endif  // SRC_TINT_LANG_CORE_IR_VALUE_H_
diff --git a/src/tint/ir/value_test.cc b/src/tint/lang/core/ir/value_test.cc
similarity index 97%
rename from src/tint/ir/value_test.cc
rename to src/tint/lang/core/ir/value_test.cc
index fc0d2fc..573ceeb 100644
--- a/src/tint/ir/value_test.cc
+++ b/src/tint/lang/core/ir/value_test.cc
@@ -14,7 +14,7 @@
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 using namespace tint::number_suffixes;        // NOLINT
 using namespace tint::builtin::fluent_types;  // NOLINT
diff --git a/src/tint/ir/var.cc b/src/tint/lang/core/ir/var.cc
similarity index 94%
rename from src/tint/ir/var.cc
rename to src/tint/lang/core/ir/var.cc
index 6afcc19..0609fd0 100644
--- a/src/tint/ir/var.cc
+++ b/src/tint/lang/core/ir/var.cc
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/var.h"
-#include "src/tint/ir/store.h"
+#include "src/tint/lang/core/ir/var.h"
+#include "src/tint/lang/core/ir/store.h"
 #include "src/tint/utils/debug/debug.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ir::Var);
diff --git a/src/tint/ir/var.h b/src/tint/lang/core/ir/var.h
similarity index 90%
rename from src/tint/ir/var.h
rename to src/tint/lang/core/ir/var.h
index 9bd74f9..efe3b69 100644
--- a/src/tint/ir/var.h
+++ b/src/tint/lang/core/ir/var.h
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_IR_VAR_H_
-#define SRC_TINT_IR_VAR_H_
+#ifndef SRC_TINT_LANG_CORE_IR_VAR_H_
+#define SRC_TINT_LANG_CORE_IR_VAR_H_
 
-#include "src/tint/ir/binding_point.h"
-#include "src/tint/ir/operand_instruction.h"
 #include "src/tint/lang/core/builtin/access.h"
 #include "src/tint/lang/core/builtin/address_space.h"
+#include "src/tint/lang/core/ir/binding_point.h"
+#include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/lang/core/type/pointer.h"
 #include "src/tint/utils/containers/vector.h"
 #include "src/tint/utils/rtti/castable.h"
@@ -61,4 +61,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_VAR_H_
+#endif  // SRC_TINT_LANG_CORE_IR_VAR_H_
diff --git a/src/tint/ir/var_test.cc b/src/tint/lang/core/ir/var_test.cc
similarity index 90%
rename from src/tint/ir/var_test.cc
rename to src/tint/lang/core/ir/var_test.cc
index 5674213..c8f9d69 100644
--- a/src/tint/ir/var_test.cc
+++ b/src/tint/lang/core/ir/var_test.cc
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/var.h"
+#include "src/tint/lang/core/ir/var.h"
 
 #include "gmock/gmock.h"
 #include "gtest/gtest-spi.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/instruction.h"
-#include "src/tint/ir/ir_test_helper.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/instruction.h"
+#include "src/tint/lang/core/ir/ir_test_helper.h"
 
 namespace tint::ir {
 namespace {
diff --git a/src/tint/lang/msl/ast_writer/generator.cc b/src/tint/lang/msl/ast_writer/generator.cc
index 10555a8..1050949 100644
--- a/src/tint/lang/msl/ast_writer/generator.cc
+++ b/src/tint/lang/msl/ast_writer/generator.cc
@@ -19,7 +19,7 @@
 #include "src/tint/lang/msl/ast_writer/generator_impl.h"
 
 #if TINT_BUILD_IR
-#include "src/tint/ir/from_program.h"                    // nogncheck
+#include "src/tint/lang/core/ir/from_program.h"          // nogncheck
 #include "src/tint/lang/msl/writer/generator_impl_ir.h"  // nogncheck
 #endif                                                   // TINT_BUILD_IR
 
diff --git a/src/tint/lang/msl/writer/generator_impl_ir.cc b/src/tint/lang/msl/writer/generator_impl_ir.cc
index 966eef8..ead092f 100644
--- a/src/tint/lang/msl/writer/generator_impl_ir.cc
+++ b/src/tint/lang/msl/writer/generator_impl_ir.cc
@@ -14,10 +14,10 @@
 
 #include "src/tint/lang/msl/writer/generator_impl_ir.h"
 
-#include "src/tint/ir/constant.h"
-#include "src/tint/ir/validator.h"
 #include "src/tint/lang/core/constant/composite.h"
 #include "src/tint/lang/core/constant/splat.h"
+#include "src/tint/lang/core/ir/constant.h"
+#include "src/tint/lang/core/ir/validator.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/atomic.h"
 #include "src/tint/lang/core/type/bool.h"
diff --git a/src/tint/lang/msl/writer/generator_impl_ir.h b/src/tint/lang/msl/writer/generator_impl_ir.h
index 0d5b68e..4ef5245 100644
--- a/src/tint/lang/msl/writer/generator_impl_ir.h
+++ b/src/tint/lang/msl/writer/generator_impl_ir.h
@@ -18,7 +18,7 @@
 #include <string>
 #include <unordered_set>
 
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/type/texture.h"
 #include "src/tint/utils/diagnostic/diagnostic.h"
 #include "src/tint/utils/text/string_stream.h"
diff --git a/src/tint/lang/msl/writer/test_helper_ir.h b/src/tint/lang/msl/writer/test_helper_ir.h
index 9dd4f32..2429957 100644
--- a/src/tint/lang/msl/writer/test_helper_ir.h
+++ b/src/tint/lang/msl/writer/test_helper_ir.h
@@ -19,8 +19,8 @@
 #include <string>
 
 #include "gtest/gtest.h"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/validator.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/validator.h"
 #include "src/tint/lang/msl/writer/generator_impl_ir.h"
 
 namespace tint::writer::msl {
diff --git a/src/tint/lang/spirv/ast_writer/generator.cc b/src/tint/lang/spirv/ast_writer/generator.cc
index 8d8df59..5fcb703 100644
--- a/src/tint/lang/spirv/ast_writer/generator.cc
+++ b/src/tint/lang/spirv/ast_writer/generator.cc
@@ -18,7 +18,7 @@
 
 #include "src/tint/lang/spirv/ast_writer/generator_impl.h"
 #if TINT_BUILD_IR
-#include "src/tint/ir/from_program.h"           // nogncheck
+#include "src/tint/lang/core/ir/from_program.h"  // nogncheck
 #include "src/tint/lang/spirv/writer/writer.h"  // nogncheck
 #endif                                          // TINT_BUILD_IR
 
diff --git a/src/tint/lang/spirv/writer/binary_test.cc b/src/tint/lang/spirv/writer/binary_test.cc
index c35134d..ef94c92 100644
--- a/src/tint/lang/spirv/writer/binary_test.cc
+++ b/src/tint/lang/spirv/writer/binary_test.cc
@@ -14,7 +14,7 @@
 
 #include "src/tint/lang/spirv/writer/test_helper.h"
 
-#include "src/tint/ir/binary.h"
+#include "src/tint/lang/core/ir/binary.h"
 
 using namespace tint::number_suffixes;  // NOLINT
 
diff --git a/src/tint/lang/spirv/writer/test_helper.h b/src/tint/lang/spirv/writer/test_helper.h
index a2d704c..bcd35b2 100644
--- a/src/tint/lang/spirv/writer/test_helper.h
+++ b/src/tint/lang/spirv/writer/test_helper.h
@@ -22,8 +22,8 @@
 #include "gmock/gmock.h"
 #include "gtest/gtest.h"
 #include "spirv-tools/libspirv.hpp"
-#include "src/tint/ir/builder.h"
-#include "src/tint/ir/validator.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/validator.h"
 #include "src/tint/lang/spirv/ast_writer/spv_dump.h"
 #include "src/tint/lang/spirv/writer/writer.h"
 
diff --git a/src/tint/lang/spirv/writer/unary_test.cc b/src/tint/lang/spirv/writer/unary_test.cc
index 24079ec..8e02be8 100644
--- a/src/tint/lang/spirv/writer/unary_test.cc
+++ b/src/tint/lang/spirv/writer/unary_test.cc
@@ -14,7 +14,7 @@
 
 #include "src/tint/lang/spirv/writer/test_helper.h"
 
-#include "src/tint/ir/unary.h"
+#include "src/tint/lang/core/ir/unary.h"
 
 using namespace tint::number_suffixes;  // NOLINT
 
diff --git a/src/tint/lang/spirv/writer/writer.cc b/src/tint/lang/spirv/writer/writer.cc
index 6f47684..09e7fe5 100644
--- a/src/tint/lang/spirv/writer/writer.cc
+++ b/src/tint/lang/spirv/writer/writer.cc
@@ -18,43 +18,43 @@
 
 #include "spirv/unified1/GLSL.std.450.h"
 #include "spirv/unified1/spirv.h"
-#include "src/tint/ir/access.h"
-#include "src/tint/ir/binary.h"
-#include "src/tint/ir/block.h"
-#include "src/tint/ir/block_param.h"
-#include "src/tint/ir/break_if.h"
-#include "src/tint/ir/construct.h"
-#include "src/tint/ir/continue.h"
-#include "src/tint/ir/core_builtin_call.h"
-#include "src/tint/ir/exit_if.h"
-#include "src/tint/ir/exit_loop.h"
-#include "src/tint/ir/exit_switch.h"
-#include "src/tint/ir/if.h"
-#include "src/tint/ir/let.h"
-#include "src/tint/ir/load.h"
-#include "src/tint/ir/loop.h"
-#include "src/tint/ir/module.h"
-#include "src/tint/ir/multi_in_block.h"
-#include "src/tint/ir/next_iteration.h"
-#include "src/tint/ir/return.h"
-#include "src/tint/ir/store.h"
-#include "src/tint/ir/switch.h"
-#include "src/tint/ir/terminate_invocation.h"
-#include "src/tint/ir/terminator.h"
-#include "src/tint/ir/transform/add_empty_entry_point.h"
-#include "src/tint/ir/transform/block_decorated_structs.h"
-#include "src/tint/ir/transform/builtin_polyfill_spirv.h"
-#include "src/tint/ir/transform/demote_to_helper.h"
-#include "src/tint/ir/transform/expand_implicit_splats.h"
-#include "src/tint/ir/transform/handle_matrix_arithmetic.h"
-#include "src/tint/ir/transform/merge_return.h"
-#include "src/tint/ir/transform/shader_io_spirv.h"
-#include "src/tint/ir/transform/var_for_dynamic_index.h"
-#include "src/tint/ir/unreachable.h"
-#include "src/tint/ir/user_call.h"
-#include "src/tint/ir/validator.h"
-#include "src/tint/ir/var.h"
 #include "src/tint/lang/core/constant/scalar.h"
+#include "src/tint/lang/core/ir/access.h"
+#include "src/tint/lang/core/ir/binary.h"
+#include "src/tint/lang/core/ir/block.h"
+#include "src/tint/lang/core/ir/block_param.h"
+#include "src/tint/lang/core/ir/break_if.h"
+#include "src/tint/lang/core/ir/construct.h"
+#include "src/tint/lang/core/ir/continue.h"
+#include "src/tint/lang/core/ir/core_builtin_call.h"
+#include "src/tint/lang/core/ir/exit_if.h"
+#include "src/tint/lang/core/ir/exit_loop.h"
+#include "src/tint/lang/core/ir/exit_switch.h"
+#include "src/tint/lang/core/ir/if.h"
+#include "src/tint/lang/core/ir/let.h"
+#include "src/tint/lang/core/ir/load.h"
+#include "src/tint/lang/core/ir/loop.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/lang/core/ir/multi_in_block.h"
+#include "src/tint/lang/core/ir/next_iteration.h"
+#include "src/tint/lang/core/ir/return.h"
+#include "src/tint/lang/core/ir/store.h"
+#include "src/tint/lang/core/ir/switch.h"
+#include "src/tint/lang/core/ir/terminate_invocation.h"
+#include "src/tint/lang/core/ir/terminator.h"
+#include "src/tint/lang/core/ir/transform/add_empty_entry_point.h"
+#include "src/tint/lang/core/ir/transform/block_decorated_structs.h"
+#include "src/tint/lang/core/ir/transform/builtin_polyfill_spirv.h"
+#include "src/tint/lang/core/ir/transform/demote_to_helper.h"
+#include "src/tint/lang/core/ir/transform/expand_implicit_splats.h"
+#include "src/tint/lang/core/ir/transform/handle_matrix_arithmetic.h"
+#include "src/tint/lang/core/ir/transform/merge_return.h"
+#include "src/tint/lang/core/ir/transform/shader_io_spirv.h"
+#include "src/tint/lang/core/ir/transform/var_for_dynamic_index.h"
+#include "src/tint/lang/core/ir/unreachable.h"
+#include "src/tint/lang/core/ir/user_call.h"
+#include "src/tint/lang/core/ir/validator.h"
+#include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/atomic.h"
 #include "src/tint/lang/core/type/bool.h"
diff --git a/src/tint/lang/spirv/writer/writer.h b/src/tint/lang/spirv/writer/writer.h
index f068d35..eef33b2 100644
--- a/src/tint/lang/spirv/writer/writer.h
+++ b/src/tint/lang/spirv/writer/writer.h
@@ -17,11 +17,11 @@
 
 #include <vector>
 
-#include "src/tint/ir/constant.h"
 #include "src/tint/lang/core/builtin/address_space.h"
 #include "src/tint/lang/core/builtin/builtin_value.h"
 #include "src/tint/lang/core/builtin/texel_format.h"
 #include "src/tint/lang/core/constant/value.h"
+#include "src/tint/lang/core/ir/constant.h"
 #include "src/tint/lang/spirv/ast_writer/binary_writer.h"
 #include "src/tint/lang/spirv/ast_writer/function.h"
 #include "src/tint/lang/spirv/ast_writer/module.h"
diff --git a/src/tint/transform/manager.cc b/src/tint/transform/manager.cc
index d5bea15..bd4af0e 100644
--- a/src/tint/transform/manager.cc
+++ b/src/tint/transform/manager.cc
@@ -18,9 +18,9 @@
 #include "src/tint/lang/wgsl/program/program_builder.h"
 
 #if TINT_BUILD_IR
-#include "src/tint/ir/from_program.h"
-#include "src/tint/ir/to_program.h"
-#include "src/tint/ir/transform/transform.h"
+#include "src/tint/lang/core/ir/from_program.h"
+#include "src/tint/lang/core/ir/to_program.h"
+#include "src/tint/lang/core/ir/transform/transform.h"
 #else
 // Declare an ir::Module class so that the transform target variant compiles.
 namespace ir {
@@ -34,7 +34,7 @@
 
 #if TINT_PRINT_PROGRAM_FOR_EACH_TRANSFORM
 #include <iostream>
-#include "src/tint/ir/disassembler.h"
+#include "src/tint/lang/core/ir/disassembler.h"
 #define TINT_IF_PRINT_PROGRAM(x) x
 #else  // TINT_PRINT_PROGRAM_FOR_EACH_TRANSFORM
 #define TINT_IF_PRINT_PROGRAM(x)
diff --git a/src/tint/transform/manager_test.cc b/src/tint/transform/manager_test.cc
index 66e7be4..0bb0025 100644
--- a/src/tint/transform/manager_test.cc
+++ b/src/tint/transform/manager_test.cc
@@ -21,8 +21,8 @@
 #include "src/tint/lang/wgsl/program/program_builder.h"
 
 #if TINT_BUILD_IR
-#include "src/tint/ir/builder.h"              // nogncheck
-#include "src/tint/ir/transform/transform.h"  // nogncheck
+#include "src/tint/lang/core/ir/builder.h"              // nogncheck
+#include "src/tint/lang/core/ir/transform/transform.h"  // nogncheck
 #endif                                        // TINT_BUILD_IR
 
 namespace tint::transform {
diff --git a/src/tint/writer/ir_text_generator.h b/src/tint/writer/ir_text_generator.h
index 3cb3a666..64a9db6 100644
--- a/src/tint/writer/ir_text_generator.h
+++ b/src/tint/writer/ir_text_generator.h
@@ -17,7 +17,7 @@
 
 #include <string>
 
-#include "src/tint/ir/module.h"
+#include "src/tint/lang/core/ir/module.h"
 #include "src/tint/utils/text/text_generator.h"
 
 namespace tint::writer {