Import Tint changes from Dawn

Changes:
  - e132516e6ff8cd315ee7027b25d9b853e75349f8 tint: Rename and move builtin_table and builtin-gen by Ben Clayton <bclayton@google.com>
GitOrigin-RevId: e132516e6ff8cd315ee7027b25d9b853e75349f8
Change-Id: I4cabd12d4673b354d99ce0524fb7d738a04aeb39
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/89280
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 71cd2dc..259a26b 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -334,9 +334,6 @@
     "ast/void.h",
     "ast/workgroup_attribute.cc",
     "ast/workgroup_attribute.h",
-    "builtin_table.cc",
-    "builtin_table.h",
-    "builtin_table.inl",
     "castable.cc",
     "castable.h",
     "clone_context.cc",
@@ -370,6 +367,9 @@
     "reader/reader.h",
     "resolver/dependency_graph.cc",
     "resolver/dependency_graph.h",
+    "resolver/intrinsic_table.cc",
+    "resolver/intrinsic_table.h",
+    "resolver/intrinsic_table.inl",
     "resolver/resolver.cc",
     "resolver/resolver.h",
     "resolver/resolver_constants.cc",
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index 4d10bcb..682817f 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -223,9 +223,6 @@
   ast/void.h
   ast/workgroup_attribute.cc
   ast/workgroup_attribute.h
-  builtin_table.cc
-  builtin_table.h
-  builtin_table.inl
   castable.cc
   castable.h
   clone_context.cc
@@ -251,6 +248,9 @@
   reader/reader.h
   resolver/dependency_graph.cc
   resolver/dependency_graph.h
+  resolver/intrinsic_table.cc
+  resolver/intrinsic_table.h
+  resolver/intrinsic_table.inl
   resolver/resolver.cc
   resolver/resolver_constants.cc
   resolver/resolver.h
@@ -727,7 +727,6 @@
     ast/variable_test.cc
     ast/vector_test.cc
     ast/workgroup_attribute_test.cc
-    builtin_table_test.cc
     castable_test.cc
     clone_context_test.cc
     debug_test.cc
@@ -756,6 +755,7 @@
     resolver/host_shareable_validation_test.cc
     resolver/increment_decrement_validation_test.cc
     resolver/inferred_type_test.cc
+    resolver/intrinsic_table_test.cc
     resolver/is_host_shareable_test.cc
     resolver/is_storeable_test.cc
     resolver/pipeline_overridable_constant_test.cc
diff --git a/src/tint/builtins.def b/src/tint/intrinsics.def
similarity index 100%
rename from src/tint/builtins.def
rename to src/tint/intrinsics.def
diff --git a/src/tint/builtin_table.cc b/src/tint/resolver/intrinsic_table.cc
similarity index 98%
rename from src/tint/builtin_table.cc
rename to src/tint/resolver/intrinsic_table.cc
index 1a3c9cc..7656e55 100644
--- a/src/tint/builtin_table.cc
+++ b/src/tint/resolver/intrinsic_table.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin_table.h"
+#include "src/tint/resolver/intrinsic_table.h"
 
 #include <algorithm>
 #include <limits>
@@ -770,7 +770,7 @@
     OverloadInfo const* const overloads;
 };
 
-#include "builtin_table.inl"
+#include "intrinsic_table.inl"
 
 /// BuiltinPrototype describes a fully matched builtin function, which is
 /// used as a lookup for building unique sem::Builtin instances.
@@ -820,8 +820,8 @@
     return true;
 }
 
-/// Impl is the private implementation of the BuiltinTable interface.
-class Impl : public BuiltinTable {
+/// Impl is the private implementation of the IntrinsicTable interface.
+class Impl : public IntrinsicTable {
   public:
     explicit Impl(ProgramBuilder& builder);
 
@@ -1116,11 +1116,11 @@
 
 }  // namespace
 
-std::unique_ptr<BuiltinTable> BuiltinTable::Create(ProgramBuilder& builder) {
+std::unique_ptr<IntrinsicTable> IntrinsicTable::Create(ProgramBuilder& builder) {
     return std::make_unique<Impl>(builder);
 }
 
-BuiltinTable::~BuiltinTable() = default;
+IntrinsicTable::~IntrinsicTable() = default;
 
 /// TypeInfo for the Any type declared in the anonymous namespace above
 TINT_INSTANTIATE_TYPEINFO(Any);
diff --git a/src/tint/builtin_table.h b/src/tint/resolver/intrinsic_table.h
similarity index 78%
rename from src/tint/builtin_table.h
rename to src/tint/resolver/intrinsic_table.h
index 89f7e90..e9760a5 100644
--- a/src/tint/builtin_table.h
+++ b/src/tint/resolver/intrinsic_table.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_BUILTIN_TABLE_H_
-#define SRC_TINT_BUILTIN_TABLE_H_
+#ifndef SRC_TINT_RESOLVER_INTRINSIC_TABLE_H_
+#define SRC_TINT_RESOLVER_INTRINSIC_TABLE_H_
 
 #include <memory>
 #include <string>
@@ -28,15 +28,15 @@
 
 namespace tint {
 
-/// BuiltinTable is a lookup table of all the WGSL builtin functions
-class BuiltinTable {
+/// IntrinsicTable is a lookup table of all the WGSL builtin functions
+class IntrinsicTable {
   public:
     /// @param builder the program builder
-    /// @return a pointer to a newly created BuiltinTable
-    static std::unique_ptr<BuiltinTable> Create(ProgramBuilder& builder);
+    /// @return a pointer to a newly created IntrinsicTable
+    static std::unique_ptr<IntrinsicTable> Create(ProgramBuilder& builder);
 
     /// Destructor
-    virtual ~BuiltinTable();
+    virtual ~IntrinsicTable();
 
     /// Lookup looks for the builtin overload with the given signature, raising
     /// an error diagnostic if the builtin was not found.
@@ -51,4 +51,4 @@
 
 }  // namespace tint
 
-#endif  // SRC_TINT_BUILTIN_TABLE_H_
+#endif  // SRC_TINT_RESOLVER_INTRINSIC_TABLE_H_
diff --git a/src/tint/builtin_table.inl b/src/tint/resolver/intrinsic_table.inl
similarity index 100%
rename from src/tint/builtin_table.inl
rename to src/tint/resolver/intrinsic_table.inl
diff --git a/src/tint/builtin_table.inl.tmpl b/src/tint/resolver/intrinsic_table.inl.tmpl
similarity index 98%
rename from src/tint/builtin_table.inl.tmpl
rename to src/tint/resolver/intrinsic_table.inl.tmpl
index b7604b8..931ae24 100644
--- a/src/tint/builtin_table.inl.tmpl
+++ b/src/tint/resolver/intrinsic_table.inl.tmpl
@@ -4,7 +4,7 @@
 Used by BuiltinTable.cc for builtin overload resolution.
 
 See:
-* tools/cmd/builtin-gen/gen for structures used by this template
+* tools/cmd/intrinsic-gen/gen for structures used by this template
 * https://golang.org/pkg/text/template/ for documentation on the template syntax
 --------------------------------------------------------------------------------
 */ -}}
diff --git a/src/tint/builtin_table_test.cc b/src/tint/resolver/intrinsic_table_test.cc
similarity index 92%
rename from src/tint/builtin_table_test.cc
rename to src/tint/resolver/intrinsic_table_test.cc
index 48cdc18..c4f4fd4 100644
--- a/src/tint/builtin_table_test.cc
+++ b/src/tint/resolver/intrinsic_table_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/builtin_table.h"
+#include "src/tint/resolver/intrinsic_table.h"
 
 #include "gmock/gmock.h"
 #include "src/tint/program_builder.h"
@@ -34,12 +34,12 @@
 using Parameter = sem::Parameter;
 using ParameterUsage = sem::ParameterUsage;
 
-class BuiltinTableTest : public testing::Test, public ProgramBuilder {
+class IntrinsicTableTest : public testing::Test, public ProgramBuilder {
   public:
-    std::unique_ptr<BuiltinTable> table = BuiltinTable::Create(*this);
+    std::unique_ptr<IntrinsicTable> table = IntrinsicTable::Create(*this);
 };
 
-TEST_F(BuiltinTableTest, MatchF32) {
+TEST_F(IntrinsicTableTest, MatchF32) {
     auto* f32 = create<sem::F32>();
     auto* result = table->Lookup(BuiltinType::kCos, {f32}, Source{});
     ASSERT_NE(result, nullptr) << Diagnostics().str();
@@ -50,14 +50,14 @@
     EXPECT_EQ(result->Parameters()[0]->Type(), f32);
 }
 
-TEST_F(BuiltinTableTest, MismatchF32) {
+TEST_F(IntrinsicTableTest, MismatchF32) {
     auto* i32 = create<sem::I32>();
     auto* result = table->Lookup(BuiltinType::kCos, {i32}, Source{});
     ASSERT_EQ(result, nullptr);
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchU32) {
+TEST_F(IntrinsicTableTest, MatchU32) {
     auto* f32 = create<sem::F32>();
     auto* u32 = create<sem::U32>();
     auto* vec2_f32 = create<sem::Vector>(f32, 2u);
@@ -70,14 +70,14 @@
     EXPECT_EQ(result->Parameters()[0]->Type(), u32);
 }
 
-TEST_F(BuiltinTableTest, MismatchU32) {
+TEST_F(IntrinsicTableTest, MismatchU32) {
     auto* f32 = create<sem::F32>();
     auto* result = table->Lookup(BuiltinType::kUnpack2x16float, {f32}, Source{});
     ASSERT_EQ(result, nullptr);
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchI32) {
+TEST_F(IntrinsicTableTest, MatchI32) {
     auto* f32 = create<sem::F32>();
     auto* i32 = create<sem::I32>();
     auto* vec4_f32 = create<sem::Vector>(f32, 4u);
@@ -96,7 +96,7 @@
     EXPECT_EQ(result->Parameters()[2]->Usage(), ParameterUsage::kLevel);
 }
 
-TEST_F(BuiltinTableTest, MismatchI32) {
+TEST_F(IntrinsicTableTest, MismatchI32) {
     auto* f32 = create<sem::F32>();
     auto* tex = create<sem::SampledTexture>(ast::TextureDimension::k1d, f32);
     auto* result = table->Lookup(BuiltinType::kTextureLoad, {tex, f32}, Source{});
@@ -104,7 +104,7 @@
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchIU32AsI32) {
+TEST_F(IntrinsicTableTest, MatchIU32AsI32) {
     auto* i32 = create<sem::I32>();
     auto* result = table->Lookup(BuiltinType::kCountOneBits, {i32}, Source{});
     ASSERT_NE(result, nullptr) << Diagnostics().str();
@@ -115,7 +115,7 @@
     EXPECT_EQ(result->Parameters()[0]->Type(), i32);
 }
 
-TEST_F(BuiltinTableTest, MatchIU32AsU32) {
+TEST_F(IntrinsicTableTest, MatchIU32AsU32) {
     auto* u32 = create<sem::U32>();
     auto* result = table->Lookup(BuiltinType::kCountOneBits, {u32}, Source{});
     ASSERT_NE(result, nullptr) << Diagnostics().str();
@@ -126,14 +126,14 @@
     EXPECT_EQ(result->Parameters()[0]->Type(), u32);
 }
 
-TEST_F(BuiltinTableTest, MismatchIU32) {
+TEST_F(IntrinsicTableTest, MismatchIU32) {
     auto* f32 = create<sem::F32>();
     auto* result = table->Lookup(BuiltinType::kCountOneBits, {f32}, Source{});
     ASSERT_EQ(result, nullptr);
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchFIU32AsI32) {
+TEST_F(IntrinsicTableTest, MatchFIU32AsI32) {
     auto* i32 = create<sem::I32>();
     auto* result = table->Lookup(BuiltinType::kClamp, {i32, i32, i32}, Source{});
     ASSERT_NE(result, nullptr) << Diagnostics().str();
@@ -146,7 +146,7 @@
     EXPECT_EQ(result->Parameters()[2]->Type(), i32);
 }
 
-TEST_F(BuiltinTableTest, MatchFIU32AsU32) {
+TEST_F(IntrinsicTableTest, MatchFIU32AsU32) {
     auto* u32 = create<sem::U32>();
     auto* result = table->Lookup(BuiltinType::kClamp, {u32, u32, u32}, Source{});
     ASSERT_NE(result, nullptr) << Diagnostics().str();
@@ -159,7 +159,7 @@
     EXPECT_EQ(result->Parameters()[2]->Type(), u32);
 }
 
-TEST_F(BuiltinTableTest, MatchFIU32AsF32) {
+TEST_F(IntrinsicTableTest, MatchFIU32AsF32) {
     auto* f32 = create<sem::F32>();
     auto* result = table->Lookup(BuiltinType::kClamp, {f32, f32, f32}, Source{});
     ASSERT_NE(result, nullptr) << Diagnostics().str();
@@ -172,14 +172,14 @@
     EXPECT_EQ(result->Parameters()[2]->Type(), f32);
 }
 
-TEST_F(BuiltinTableTest, MismatchFIU32) {
+TEST_F(IntrinsicTableTest, MismatchFIU32) {
     auto* bool_ = create<sem::Bool>();
     auto* result = table->Lookup(BuiltinType::kClamp, {bool_, bool_, bool_}, Source{});
     ASSERT_EQ(result, nullptr);
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchBool) {
+TEST_F(IntrinsicTableTest, MatchBool) {
     auto* f32 = create<sem::F32>();
     auto* bool_ = create<sem::Bool>();
     auto* result = table->Lookup(BuiltinType::kSelect, {f32, f32, bool_}, Source{});
@@ -193,14 +193,14 @@
     EXPECT_EQ(result->Parameters()[2]->Type(), bool_);
 }
 
-TEST_F(BuiltinTableTest, MismatchBool) {
+TEST_F(IntrinsicTableTest, MismatchBool) {
     auto* f32 = create<sem::F32>();
     auto* result = table->Lookup(BuiltinType::kSelect, {f32, f32, f32}, Source{});
     ASSERT_EQ(result, nullptr);
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchPointer) {
+TEST_F(IntrinsicTableTest, MatchPointer) {
     auto* i32 = create<sem::I32>();
     auto* atomicI32 = create<sem::Atomic>(i32);
     auto* ptr =
@@ -214,7 +214,7 @@
     EXPECT_EQ(result->Parameters()[0]->Type(), ptr);
 }
 
-TEST_F(BuiltinTableTest, MismatchPointer) {
+TEST_F(IntrinsicTableTest, MismatchPointer) {
     auto* i32 = create<sem::I32>();
     auto* atomicI32 = create<sem::Atomic>(i32);
     auto* result = table->Lookup(BuiltinType::kAtomicLoad, {atomicI32}, Source{});
@@ -222,7 +222,7 @@
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchArray) {
+TEST_F(IntrinsicTableTest, MatchArray) {
     auto* arr = create<sem::Array>(create<sem::U32>(), 0u, 4u, 4u, 4u, 4u);
     auto* arr_ptr = create<sem::Pointer>(arr, ast::StorageClass::kStorage, ast::Access::kReadWrite);
     auto* result = table->Lookup(BuiltinType::kArrayLength, {arr_ptr}, Source{});
@@ -236,14 +236,14 @@
     EXPECT_TRUE(param_type->As<sem::Pointer>()->StoreType()->Is<sem::Array>());
 }
 
-TEST_F(BuiltinTableTest, MismatchArray) {
+TEST_F(IntrinsicTableTest, MismatchArray) {
     auto* f32 = create<sem::F32>();
     auto* result = table->Lookup(BuiltinType::kArrayLength, {f32}, Source{});
     ASSERT_EQ(result, nullptr);
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchSampler) {
+TEST_F(IntrinsicTableTest, MatchSampler) {
     auto* f32 = create<sem::F32>();
     auto* vec2_f32 = create<sem::Vector>(f32, 2u);
     auto* vec4_f32 = create<sem::Vector>(f32, 4u);
@@ -263,7 +263,7 @@
     EXPECT_EQ(result->Parameters()[2]->Usage(), ParameterUsage::kCoords);
 }
 
-TEST_F(BuiltinTableTest, MismatchSampler) {
+TEST_F(IntrinsicTableTest, MismatchSampler) {
     auto* f32 = create<sem::F32>();
     auto* vec2_f32 = create<sem::Vector>(f32, 2u);
     auto* tex = create<sem::SampledTexture>(ast::TextureDimension::k2d, f32);
@@ -272,7 +272,7 @@
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchSampledTexture) {
+TEST_F(IntrinsicTableTest, MatchSampledTexture) {
     auto* i32 = create<sem::I32>();
     auto* f32 = create<sem::F32>();
     auto* vec2_i32 = create<sem::Vector>(i32, 2u);
@@ -292,7 +292,7 @@
     EXPECT_EQ(result->Parameters()[2]->Usage(), ParameterUsage::kLevel);
 }
 
-TEST_F(BuiltinTableTest, MatchMultisampledTexture) {
+TEST_F(IntrinsicTableTest, MatchMultisampledTexture) {
     auto* i32 = create<sem::I32>();
     auto* f32 = create<sem::F32>();
     auto* vec2_i32 = create<sem::Vector>(i32, 2u);
@@ -312,7 +312,7 @@
     EXPECT_EQ(result->Parameters()[2]->Usage(), ParameterUsage::kSampleIndex);
 }
 
-TEST_F(BuiltinTableTest, MatchDepthTexture) {
+TEST_F(IntrinsicTableTest, MatchDepthTexture) {
     auto* f32 = create<sem::F32>();
     auto* i32 = create<sem::I32>();
     auto* vec2_i32 = create<sem::Vector>(i32, 2u);
@@ -331,7 +331,7 @@
     EXPECT_EQ(result->Parameters()[2]->Usage(), ParameterUsage::kLevel);
 }
 
-TEST_F(BuiltinTableTest, MatchDepthMultisampledTexture) {
+TEST_F(IntrinsicTableTest, MatchDepthMultisampledTexture) {
     auto* f32 = create<sem::F32>();
     auto* i32 = create<sem::I32>();
     auto* vec2_i32 = create<sem::Vector>(i32, 2u);
@@ -350,7 +350,7 @@
     EXPECT_EQ(result->Parameters()[2]->Usage(), ParameterUsage::kSampleIndex);
 }
 
-TEST_F(BuiltinTableTest, MatchExternalTexture) {
+TEST_F(IntrinsicTableTest, MatchExternalTexture) {
     auto* f32 = create<sem::F32>();
     auto* i32 = create<sem::I32>();
     auto* vec2_i32 = create<sem::Vector>(i32, 2u);
@@ -368,7 +368,7 @@
     EXPECT_EQ(result->Parameters()[1]->Usage(), ParameterUsage::kCoords);
 }
 
-TEST_F(BuiltinTableTest, MatchWOStorageTexture) {
+TEST_F(IntrinsicTableTest, MatchWOStorageTexture) {
     auto* f32 = create<sem::F32>();
     auto* i32 = create<sem::I32>();
     auto* vec2_i32 = create<sem::Vector>(i32, 2u);
@@ -391,7 +391,7 @@
     EXPECT_EQ(result->Parameters()[2]->Usage(), ParameterUsage::kValue);
 }
 
-TEST_F(BuiltinTableTest, MismatchTexture) {
+TEST_F(IntrinsicTableTest, MismatchTexture) {
     auto* f32 = create<sem::F32>();
     auto* i32 = create<sem::I32>();
     auto* vec2_i32 = create<sem::Vector>(i32, 2u);
@@ -400,7 +400,7 @@
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, ImplicitLoadOnReference) {
+TEST_F(IntrinsicTableTest, ImplicitLoadOnReference) {
     auto* f32 = create<sem::F32>();
     auto* result = table->Lookup(
         BuiltinType::kCos,
@@ -414,7 +414,7 @@
     EXPECT_EQ(result->Parameters()[0]->Type(), f32);
 }
 
-TEST_F(BuiltinTableTest, MatchOpenType) {
+TEST_F(IntrinsicTableTest, MatchOpenType) {
     auto* f32 = create<sem::F32>();
     auto* result = table->Lookup(BuiltinType::kClamp, {f32, f32, f32}, Source{});
     ASSERT_NE(result, nullptr) << Diagnostics().str();
@@ -426,7 +426,7 @@
     EXPECT_EQ(result->Parameters()[2]->Type(), f32);
 }
 
-TEST_F(BuiltinTableTest, MismatchOpenType) {
+TEST_F(IntrinsicTableTest, MismatchOpenType) {
     auto* f32 = create<sem::F32>();
     auto* u32 = create<sem::U32>();
     auto* result = table->Lookup(BuiltinType::kClamp, {f32, u32, f32}, Source{});
@@ -434,7 +434,7 @@
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchOpenSizeVector) {
+TEST_F(IntrinsicTableTest, MatchOpenSizeVector) {
     auto* f32 = create<sem::F32>();
     auto* vec2_f32 = create<sem::Vector>(f32, 2u);
     auto* result = table->Lookup(BuiltinType::kClamp, {vec2_f32, vec2_f32, vec2_f32}, Source{});
@@ -448,7 +448,7 @@
     EXPECT_EQ(result->Parameters()[2]->Type(), vec2_f32);
 }
 
-TEST_F(BuiltinTableTest, MismatchOpenSizeVector) {
+TEST_F(IntrinsicTableTest, MismatchOpenSizeVector) {
     auto* f32 = create<sem::F32>();
     auto* u32 = create<sem::U32>();
     auto* vec2_f32 = create<sem::Vector>(f32, 2u);
@@ -457,7 +457,7 @@
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, MatchOpenSizeMatrix) {
+TEST_F(IntrinsicTableTest, MatchOpenSizeMatrix) {
     auto* f32 = create<sem::F32>();
     auto* vec3_f32 = create<sem::Vector>(f32, 3u);
     auto* mat3_f32 = create<sem::Matrix>(vec3_f32, 3u);
@@ -470,7 +470,7 @@
     EXPECT_EQ(result->Parameters()[0]->Type(), mat3_f32);
 }
 
-TEST_F(BuiltinTableTest, MismatchOpenSizeMatrix) {
+TEST_F(IntrinsicTableTest, MismatchOpenSizeMatrix) {
     auto* f32 = create<sem::F32>();
     auto* vec2_f32 = create<sem::Vector>(f32, 2u);
     auto* mat3x2_f32 = create<sem::Matrix>(vec2_f32, 3u);
@@ -479,7 +479,7 @@
     ASSERT_THAT(Diagnostics().str(), HasSubstr("no matching call"));
 }
 
-TEST_F(BuiltinTableTest, OverloadOrderByNumberOfParameters) {
+TEST_F(IntrinsicTableTest, OverloadOrderByNumberOfParameters) {
     // None of the arguments match, so expect the overloads with 2 parameters to
     // come first
     auto* bool_ = create<sem::Bool>();
@@ -518,7 +518,7 @@
 )");
 }
 
-TEST_F(BuiltinTableTest, OverloadOrderByMatchingParameter) {
+TEST_F(IntrinsicTableTest, OverloadOrderByMatchingParameter) {
     auto* tex = create<sem::DepthTexture>(ast::TextureDimension::k2d);
     auto* bool_ = create<sem::Bool>();
     table->Lookup(BuiltinType::kTextureDimensions, {tex, bool_}, Source{});
@@ -556,7 +556,7 @@
 )");
 }
 
-TEST_F(BuiltinTableTest, SameOverloadReturnsSameBuiltinPointer) {
+TEST_F(IntrinsicTableTest, SameOverloadReturnsSameBuiltinPointer) {
     auto* f32 = create<sem::F32>();
     auto* vec2_f32 = create<sem::Vector>(create<sem::F32>(), 2u);
     auto* bool_ = create<sem::Bool>();
diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc
index dc1007b..760813d 100644
--- a/src/tint/resolver/resolver.cc
+++ b/src/tint/resolver/resolver.cc
@@ -84,7 +84,7 @@
 Resolver::Resolver(ProgramBuilder* builder)
     : builder_(builder),
       diagnostics_(builder->Diagnostics()),
-      builtin_table_(BuiltinTable::Create(*builder)),
+      intrinsic_table_(IntrinsicTable::Create(*builder)),
       sem_(builder, dependencies_),
       validator_(builder, sem_) {}
 
@@ -1292,7 +1292,7 @@
                                  sem::BuiltinType builtin_type,
                                  const std::vector<const sem::Expression*> args,
                                  const std::vector<const sem::Type*> arg_tys) {
-    auto* builtin = builtin_table_->Lookup(builtin_type, std::move(arg_tys), expr->source);
+    auto* builtin = intrinsic_table_->Lookup(builtin_type, std::move(arg_tys), expr->source);
     if (!builtin) {
         return nullptr;
     }
diff --git a/src/tint/resolver/resolver.h b/src/tint/resolver/resolver.h
index f8dec15..ba90a30 100644
--- a/src/tint/resolver/resolver.h
+++ b/src/tint/resolver/resolver.h
@@ -22,9 +22,9 @@
 #include <utility>
 #include <vector>
 
-#include "src/tint/builtin_table.h"
 #include "src/tint/program_builder.h"
 #include "src/tint/resolver/dependency_graph.h"
+#include "src/tint/resolver/intrinsic_table.h"
 #include "src/tint/resolver/sem_helper.h"
 #include "src/tint/resolver/validator.h"
 #include "src/tint/scope_stack.h"
@@ -378,7 +378,7 @@
 
     ProgramBuilder* const builder_;
     diag::List& diagnostics_;
-    std::unique_ptr<BuiltinTable> const builtin_table_;
+    std::unique_ptr<IntrinsicTable> const intrinsic_table_;
     DependencyGraph dependencies_;
     SemHelper sem_;
     Validator validator_;
diff --git a/src/tint/sem/builtin_type.cc b/src/tint/sem/builtin_type.cc
index 820b3e6..49ee000 100644
--- a/src/tint/sem/builtin_type.cc
+++ b/src/tint/sem/builtin_type.cc
@@ -13,11 +13,11 @@
 // limitations under the License.
 
 ////////////////////////////////////////////////////////////////////////////////
-// File generated by tools/builtin-gen
+// File generated by tools/intrinsic-gen
 // using the template:
 //   src/tint/sem/builtin_type.cc.tmpl
-// and the builtin defintion file:
-//   src/tint/builtins.def
+// and the intrinsic defintion file:
+//   src/tint/intrinsics.def
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/tint/sem/builtin_type.cc.tmpl b/src/tint/sem/builtin_type.cc.tmpl
index 2330c87..63c2083 100644
--- a/src/tint/sem/builtin_type.cc.tmpl
+++ b/src/tint/sem/builtin_type.cc.tmpl
@@ -3,7 +3,7 @@
 Template file for use with tools/builtin-gen to generate builtin_type.cc
 
 See:
-* tools/cmd/builtin-gen/gen for structures used by this template
+* tools/cmd/intrinsic-gen/gen for structures used by this template
 * https://golang.org/pkg/text/template/ for documentation on the template syntax
 --------------------------------------------------------------------------------
 */ -}}
diff --git a/src/tint/sem/builtin_type.h b/src/tint/sem/builtin_type.h
index ec07274..780f9c5 100644
--- a/src/tint/sem/builtin_type.h
+++ b/src/tint/sem/builtin_type.h
@@ -13,11 +13,11 @@
 // limitations under the License.
 
 ////////////////////////////////////////////////////////////////////////////////
-// File generated by tools/builtin-gen
+// File generated by tools/intrinsic-gen
 // using the template:
 //   src/tint/sem/builtin_type.h.tmpl
-// and the builtin defintion file:
-//   src/tint/builtins.def
+// and the intrinsic defintion file:
+//   src/tint/intrinsics.def
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/tint/sem/builtin_type.h.tmpl b/src/tint/sem/builtin_type.h.tmpl
index b601c37..d4e1cc7 100644
--- a/src/tint/sem/builtin_type.h.tmpl
+++ b/src/tint/sem/builtin_type.h.tmpl
@@ -3,7 +3,7 @@
 Template file for use with tools/builtin-gen to generate builtin_type.h
 
 See:
-* tools/cmd/builtin-gen/gen for structures used by this template
+* tools/cmd/intrinsic-gen/gen for structures used by this template
 * https://golang.org/pkg/text/template/ for documentation on the template syntax
 --------------------------------------------------------------------------------
 */ -}}
diff --git a/src/tint/sem/parameter_usage.cc b/src/tint/sem/parameter_usage.cc
index 0eef789..4891bba 100644
--- a/src/tint/sem/parameter_usage.cc
+++ b/src/tint/sem/parameter_usage.cc
@@ -13,11 +13,11 @@
 // limitations under the License.
 
 ////////////////////////////////////////////////////////////////////////////////
-// File generated by tools/builtin-gen
+// File generated by tools/intrinsic-gen
 // using the template:
 //   src/tint/sem/parameter_usage.cc.tmpl
-// and the builtin defintion file:
-//   src/tint/builtins.def
+// and the intrinsic defintion file:
+//   src/tint/intrinsics.def
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/tint/sem/parameter_usage.cc.tmpl b/src/tint/sem/parameter_usage.cc.tmpl
index bb767d4..bc413e1 100644
--- a/src/tint/sem/parameter_usage.cc.tmpl
+++ b/src/tint/sem/parameter_usage.cc.tmpl
@@ -3,7 +3,7 @@
 Template file for use with tools/builtin-gen to generate parameter_usage.cc
 
 See:
-* tools/cmd/builtin-gen/gen for structures used by this template
+* tools/cmd/intrinsic-gen/gen for structures used by this template
 * https://golang.org/pkg/text/template/ for documentation on the template syntax
 --------------------------------------------------------------------------------
 */ -}}
diff --git a/src/tint/sem/parameter_usage.h b/src/tint/sem/parameter_usage.h
index d4e99c1..85ef64f 100644
--- a/src/tint/sem/parameter_usage.h
+++ b/src/tint/sem/parameter_usage.h
@@ -13,11 +13,11 @@
 // limitations under the License.
 
 ////////////////////////////////////////////////////////////////////////////////
-// File generated by tools/builtin-gen
+// File generated by tools/intrinsic-gen
 // using the template:
 //   src/tint/sem/parameter_usage.h.tmpl
-// and the builtin defintion file:
-//   src/tint/builtins.def
+// and the intrinsic defintion file:
+//   src/tint/intrinsics.def
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/tint/sem/parameter_usage.h.tmpl b/src/tint/sem/parameter_usage.h.tmpl
index f7a3c28..b1b5789 100644
--- a/src/tint/sem/parameter_usage.h.tmpl
+++ b/src/tint/sem/parameter_usage.h.tmpl
@@ -3,7 +3,7 @@
 Template file for use with tools/builtin-gen to generate parameter_usage.h
 
 See:
-* tools/cmd/builtin-gen/gen for structures used by this template
+* tools/cmd/intrinsic-gen/gen for structures used by this template
 * https://golang.org/pkg/text/template/ for documentation on the template syntax
 --------------------------------------------------------------------------------
 */ -}}
diff --git a/test/tint/BUILD.gn b/test/tint/BUILD.gn
index 8111273..bed8729 100644
--- a/test/tint/BUILD.gn
+++ b/test/tint/BUILD.gn
@@ -252,6 +252,7 @@
     "../../src/tint/resolver/function_validation_test.cc",
     "../../src/tint/resolver/host_shareable_validation_test.cc",
     "../../src/tint/resolver/increment_decrement_validation_test.cc",
+    "../../src/tint/resolver/intrinsic_table_test.cc",
     "../../src/tint/resolver/is_host_shareable_test.cc",
     "../../src/tint/resolver/is_storeable_test.cc",
     "../../src/tint/resolver/pipeline_overridable_constant_test.cc",
@@ -713,7 +714,6 @@
 
 tint_unittests_source_set("tint_unittests_core_src") {
   sources = [
-    "../../src/tint/builtin_table_test.cc",
     "../../src/tint/castable_test.cc",
     "../../src/tint/clone_context_test.cc",
     "../../src/tint/debug_test.cc",