[ir] Rename BuiltinCall to CoreBuiltinCall.

This CL moves the BuiltinCall class to the CoreBuiltinCall class. A
future CL will extract a BuiltinCall base class out of CoreBuiltinClass
which can then be used by other backends to create custom builtin call
classes.

Bug: tint:1718
Change-Id: I9a2fafa654bcb2f2f0c69e71eedd2ac062ba848a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/141221
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 914b6f5..16546f2 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -1280,8 +1280,6 @@
       "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",
@@ -1294,6 +1292,8 @@
       "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",
@@ -2403,11 +2403,11 @@
         "ir/block_param_test.cc",
         "ir/block_test.cc",
         "ir/break_if_test.cc",
-        "ir/builtin_call_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",
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index 4bea2e1..665f5ed 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -763,8 +763,6 @@
     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
@@ -777,6 +775,8 @@
     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
@@ -1579,11 +1579,11 @@
       ir/block_param_test.cc
       ir/block_test.cc
       ir/break_if_test.cc
-      ir/builtin_call_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
diff --git a/src/tint/ir/builder.h b/src/tint/ir/builder.h
index 83db711..6d75a37 100644
--- a/src/tint/ir/builder.h
+++ b/src/tint/ir/builder.h
@@ -25,11 +25,11 @@
 #include "src/tint/ir/bitcast.h"
 #include "src/tint/ir/block_param.h"
 #include "src/tint/ir/break_if.h"
-#include "src/tint/ir/builtin_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"
@@ -532,15 +532,15 @@
                                                            Values(std::forward<ARGS>(args)...)));
     }
 
-    /// Creates a builtin call instruction
+    /// Creates a core builtin call instruction
     /// @param type the return type of the call
     /// @param func the builtin function to call
     /// @param args the call arguments
     /// @returns the instruction
     template <typename... ARGS>
-    ir::BuiltinCall* Call(const type::Type* type, builtin::Function func, ARGS&&... args) {
-        return Append(ir.instructions.Create<ir::BuiltinCall>(InstructionResult(type), func,
-                                                              Values(std::forward<ARGS>(args)...)));
+    ir::CoreBuiltinCall* Call(const type::Type* type, builtin::Function func, ARGS&&... args) {
+        return Append(ir.instructions.Create<ir::CoreBuiltinCall>(
+            InstructionResult(type), func, Values(std::forward<ARGS>(args)...)));
     }
 
     /// Creates an intrinsic call instruction
diff --git a/src/tint/ir/builtin_call.cc b/src/tint/ir/core_builtin_call.cc
similarity index 68%
rename from src/tint/ir/builtin_call.cc
rename to src/tint/ir/core_builtin_call.cc
index 2726191..d6a6ab3 100644
--- a/src/tint/ir/builtin_call.cc
+++ b/src/tint/ir/core_builtin_call.cc
@@ -12,27 +12,27 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/ir/builtin_call.h"
+#include "src/tint/ir/core_builtin_call.h"
 
 #include <utility>
 
 #include "src/tint/debug.h"
 
-TINT_INSTANTIATE_TYPEINFO(tint::ir::BuiltinCall);
+TINT_INSTANTIATE_TYPEINFO(tint::ir::CoreBuiltinCall);
 
 namespace tint::ir {
 
-BuiltinCall::BuiltinCall(InstructionResult* result,
-                         builtin::Function func,
-                         utils::VectorRef<Value*> arguments)
+CoreBuiltinCall::CoreBuiltinCall(InstructionResult* result,
+                                 builtin::Function func,
+                                 utils::VectorRef<Value*> arguments)
     : func_(func) {
     TINT_ASSERT(IR, func != builtin::Function::kNone);
     TINT_ASSERT(IR, func != builtin::Function::kTintMaterialize);
 
-    AddOperands(BuiltinCall::kArgsOperandOffset, std::move(arguments));
+    AddOperands(CoreBuiltinCall::kArgsOperandOffset, std::move(arguments));
     AddResult(result);
 }
 
-BuiltinCall::~BuiltinCall() = default;
+CoreBuiltinCall::~CoreBuiltinCall() = default;
 
 }  // namespace tint::ir
diff --git a/src/tint/ir/builtin_call.h b/src/tint/ir/core_builtin_call.h
similarity index 70%
rename from src/tint/ir/builtin_call.h
rename to src/tint/ir/core_builtin_call.h
index 1050e72..8b7228f 100644
--- a/src/tint/ir/builtin_call.h
+++ b/src/tint/ir/core_builtin_call.h
@@ -12,8 +12,8 @@
 // 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_IR_CORE_BUILTIN_CALL_H_
+#define SRC_TINT_IR_CORE_BUILTIN_CALL_H_
 
 #include "src/tint/builtin/function.h"
 #include "src/tint/ir/call.h"
@@ -21,8 +21,8 @@
 
 namespace tint::ir {
 
-/// A builtin call instruction in the IR.
-class BuiltinCall : public utils::Castable<BuiltinCall, Call> {
+/// A core builtin call instruction in the IR.
+class CoreBuiltinCall : public utils::Castable<CoreBuiltinCall, Call> {
   public:
     /// The base offset in Operands() for the args
     static constexpr size_t kArgsOperandOffset = 0;
@@ -31,16 +31,16 @@
     /// @param result the result value
     /// @param func the builtin function
     /// @param args the conversion arguments
-    BuiltinCall(InstructionResult* result,
-                builtin::Function func,
-                utils::VectorRef<Value*> args = utils::Empty);
-    ~BuiltinCall() override;
+    CoreBuiltinCall(InstructionResult* result,
+                    builtin::Function func,
+                    utils::VectorRef<Value*> args = utils::Empty);
+    ~CoreBuiltinCall() override;
 
     /// @returns the builtin function
     builtin::Function Func() { return func_; }
 
     /// @returns the friendly name for the instruction
-    std::string_view FriendlyName() override { return "builtin-call"; }
+    std::string_view FriendlyName() override { return "core-builtin-call"; }
 
   private:
     builtin::Function func_;
@@ -48,4 +48,4 @@
 
 }  // namespace tint::ir
 
-#endif  // SRC_TINT_IR_BUILTIN_CALL_H_
+#endif  // SRC_TINT_IR_CORE_BUILTIN_CALL_H_
diff --git a/src/tint/ir/builtin_call_test.cc b/src/tint/ir/core_builtin_call_test.cc
similarity index 87%
rename from src/tint/ir/builtin_call_test.cc
rename to src/tint/ir/core_builtin_call_test.cc
index f0928a0..72fd728 100644
--- a/src/tint/ir/builtin_call_test.cc
+++ b/src/tint/ir/core_builtin_call_test.cc
@@ -21,9 +21,9 @@
 namespace {
 
 using namespace tint::number_suffixes;  // NOLINT
-using IR_BuiltinCallTest = IRTestHelper;
+using IR_CoreBuiltinCallTest = IRTestHelper;
 
-TEST_F(IR_BuiltinCallTest, Usage) {
+TEST_F(IR_CoreBuiltinCallTest, Usage) {
     auto* arg1 = b.Constant(1_u);
     auto* arg2 = b.Constant(2_u);
     auto* builtin = b.Call(mod.Types().f32(), builtin::Function::kAbs, arg1, arg2);
@@ -32,7 +32,7 @@
     EXPECT_THAT(arg2->Usages(), testing::UnorderedElementsAre(Usage{builtin, 1u}));
 }
 
-TEST_F(IR_BuiltinCallTest, Result) {
+TEST_F(IR_CoreBuiltinCallTest, Result) {
     auto* arg1 = b.Constant(1_u);
     auto* arg2 = b.Constant(2_u);
     auto* builtin = b.Call(mod.Types().f32(), builtin::Function::kAbs, arg1, arg2);
@@ -43,7 +43,7 @@
     EXPECT_EQ(builtin->Result()->Source(), builtin);
 }
 
-TEST_F(IR_BuiltinCallTest, Fail_NullType) {
+TEST_F(IR_CoreBuiltinCallTest, Fail_NullType) {
     EXPECT_FATAL_FAILURE(
         {
             Module mod;
@@ -53,7 +53,7 @@
         "");
 }
 
-TEST_F(IR_BuiltinCallTest, Fail_NoneFunction) {
+TEST_F(IR_CoreBuiltinCallTest, Fail_NoneFunction) {
     EXPECT_FATAL_FAILURE(
         {
             Module mod;
@@ -63,7 +63,7 @@
         "");
 }
 
-TEST_F(IR_BuiltinCallTest, Fail_TintMaterializeFunction) {
+TEST_F(IR_CoreBuiltinCallTest, Fail_TintMaterializeFunction) {
     EXPECT_FATAL_FAILURE(
         {
             Module mod;
diff --git a/src/tint/ir/disassembler.cc b/src/tint/ir/disassembler.cc
index 2ca25a9..946671e 100644
--- a/src/tint/ir/disassembler.cc
+++ b/src/tint/ir/disassembler.cc
@@ -24,10 +24,10 @@
 #include "src/tint/ir/block.h"
 #include "src/tint/ir/block_param.h"
 #include "src/tint/ir/break_if.h"
-#include "src/tint/ir/builtin_call.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"
@@ -418,7 +418,7 @@
             EmitInstructionName("discard", d);
             EmitLine();
         },
-        [&](BuiltinCall* b) {
+        [&](CoreBuiltinCall* b) {
             EmitValueWithType(b);
             out_ << " = ";
             EmitInstructionName(builtin::str(b->Func()), b);
diff --git a/src/tint/ir/to_program.cc b/src/tint/ir/to_program.cc
index 43157c4..2e535e2 100644
--- a/src/tint/ir/to_program.cc
+++ b/src/tint/ir/to_program.cc
@@ -24,12 +24,12 @@
 #include "src/tint/ir/bitcast.h"
 #include "src/tint/ir/block.h"
 #include "src/tint/ir/break_if.h"
-#include "src/tint/ir/builtin_call.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"
@@ -565,7 +565,7 @@
                 }
                 Bind(c->Result(), expr, PtrKind::kPtr);
             },
-            [&](ir::BuiltinCall* c) {
+            [&](ir::CoreBuiltinCall* c) {
                 if (!disabled_derivative_uniformity_ && RequiresDerivativeUniformity(c->Func())) {
                     // TODO(crbug.com/tint/1985): Be smarter about disabling derivative uniformity.
                     b.DiagnosticDirective(builtin::DiagnosticSeverity::kOff,
diff --git a/src/tint/ir/to_program_roundtrip_test.cc b/src/tint/ir/to_program_roundtrip_test.cc
index f486a26..c0faa19 100644
--- a/src/tint/ir/to_program_roundtrip_test.cc
+++ b/src/tint/ir/to_program_roundtrip_test.cc
@@ -288,9 +288,9 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// Builtin Call
+// Core Builtin Call
 ////////////////////////////////////////////////////////////////////////////////
-TEST_F(IRToProgramRoundtripTest, BuiltinCall_Stmt) {
+TEST_F(IRToProgramRoundtripTest, CoreBuiltinCall_Stmt) {
     Test(R"(
 fn f() {
   workgroupBarrier();
@@ -298,7 +298,7 @@
 )");
 }
 
-TEST_F(IRToProgramRoundtripTest, BuiltinCall_Expr) {
+TEST_F(IRToProgramRoundtripTest, CoreBuiltinCall_Expr) {
     Test(R"(
 fn f(a : i32, b : i32) {
   var i : i32 = max(a, b);
@@ -306,7 +306,7 @@
 )");
 }
 
-TEST_F(IRToProgramRoundtripTest, BuiltinCall_PhonyAssignment) {
+TEST_F(IRToProgramRoundtripTest, CoreBuiltinCall_PhonyAssignment) {
     Test(R"(
 fn f(a : i32, b : i32) {
   _ = max(a, b);
@@ -314,7 +314,7 @@
 )");
 }
 
-TEST_F(IRToProgramRoundtripTest, BuiltinCall_UnusedLet) {
+TEST_F(IRToProgramRoundtripTest, CoreBuiltinCall_UnusedLet) {
     Test(R"(
 fn f(a : i32, b : i32) {
   let unused = max(a, b);
@@ -322,7 +322,7 @@
 )");
 }
 
-TEST_F(IRToProgramRoundtripTest, BuiltinCall_PtrArg) {
+TEST_F(IRToProgramRoundtripTest, CoreBuiltinCall_PtrArg) {
     Test(R"(
 var<workgroup> v : bool;
 
@@ -332,7 +332,7 @@
 )");
 }
 
-TEST_F(IRToProgramRoundtripTest, BuiltinCall_DisableDerivativeUniformity) {
+TEST_F(IRToProgramRoundtripTest, CoreBuiltinCall_DisableDerivativeUniformity) {
     Test(R"(
 fn f(in : f32) {
   let x = dpdx(in);
diff --git a/src/tint/ir/transform/builtin_polyfill_spirv.cc b/src/tint/ir/transform/builtin_polyfill_spirv.cc
index 3e0521d..1aa82e5 100644
--- a/src/tint/ir/transform/builtin_polyfill_spirv.cc
+++ b/src/tint/ir/transform/builtin_polyfill_spirv.cc
@@ -43,12 +43,12 @@
     /// Process the module.
     void Process() {
         // Find the builtins that need replacing.
-        utils::Vector<BuiltinCall*, 4> worklist;
+        utils::Vector<CoreBuiltinCall*, 4> worklist;
         for (auto* inst : ir->instructions.Objects()) {
             if (!inst->Alive()) {
                 continue;
             }
-            if (auto* builtin = inst->As<BuiltinCall>()) {
+            if (auto* builtin = inst->As<CoreBuiltinCall>()) {
                 switch (builtin->Func()) {
                     case builtin::Function::kDot:
                     case builtin::Function::kSelect:
@@ -87,7 +87,7 @@
     /// Handle a `dot()` builtin.
     /// @param builtin the builtin call instruction
     /// @returns the replacement value
-    Value* Dot(BuiltinCall* builtin) {
+    Value* Dot(CoreBuiltinCall* builtin) {
         // OpDot only supports floating point operands, so we need to polyfill the integer case.
         // TODO(crbug.com/tint/1267): If SPV_KHR_integer_dot_product is supported, use that instead.
         if (builtin->Result()->Type()->is_integer_scalar()) {
@@ -125,7 +125,7 @@
     /// Handle a `select()` builtin.
     /// @param builtin the builtin call instruction
     /// @returns the replacement value
-    Value* Select(BuiltinCall* builtin) {
+    Value* Select(CoreBuiltinCall* builtin) {
         // Argument order is different in SPIR-V: (condition, true_operand, false_operand).
         utils::Vector<Value*, 4> args = {
             builtin->Args()[2],
diff --git a/src/tint/ir/transform/demote_to_helper.cc b/src/tint/ir/transform/demote_to_helper.cc
index a3ae82f..997d563 100644
--- a/src/tint/ir/transform/demote_to_helper.cc
+++ b/src/tint/ir/transform/demote_to_helper.cc
@@ -176,7 +176,7 @@
                         conditionalize(store);
                     }
                 },
-                [&](BuiltinCall* builtin) {
+                [&](CoreBuiltinCall* builtin) {
                     // Conditionalize calls to builtins that have side effects.
                     if (builtin::HasSideEffects(builtin->Func())) {
                         conditionalize(builtin);
diff --git a/src/tint/ir/validator.cc b/src/tint/ir/validator.cc
index 8d47f16..decc98f 100644
--- a/src/tint/ir/validator.cc
+++ b/src/tint/ir/validator.cc
@@ -22,10 +22,10 @@
 #include "src/tint/ir/binary.h"
 #include "src/tint/ir/bitcast.h"
 #include "src/tint/ir/break_if.h"
-#include "src/tint/ir/builtin_call.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"
@@ -312,14 +312,14 @@
 
     void CheckCall(Call* call) {
         tint::Switch(
-            call,                    //
-            [&](Bitcast*) {},        //
-            [&](BuiltinCall*) {},    //
-            [&](IntrinsicCall*) {},  //
-            [&](Construct*) {},      //
-            [&](Convert*) {},        //
-            [&](Discard*) {},        //
-            [&](UserCall*) {},       //
+            call,                      //
+            [&](Bitcast*) {},          //
+            [&](CoreBuiltinCall*) {},  //
+            [&](IntrinsicCall*) {},    //
+            [&](Construct*) {},        //
+            [&](Convert*) {},          //
+            [&](Discard*) {},          //
+            [&](UserCall*) {},         //
             [&](Default) { AddError(call, InstError(call, "missing validation")); });
     }
 
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir.cc b/src/tint/writer/spirv/ir/generator_impl_ir.cc
index c81ba68..63e7980 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir.cc
+++ b/src/tint/writer/spirv/ir/generator_impl_ir.cc
@@ -24,9 +24,9 @@
 #include "src/tint/ir/block.h"
 #include "src/tint/ir/block_param.h"
 #include "src/tint/ir/break_if.h"
-#include "src/tint/ir/builtin_call.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"
@@ -745,7 +745,7 @@
             [&](ir::Access* a) { EmitAccess(a); },                          //
             [&](ir::Binary* b) { EmitBinary(b); },                          //
             [&](ir::Bitcast* b) { EmitBitcast(b); },                        //
-            [&](ir::BuiltinCall* b) { EmitBuiltinCall(b); },                //
+            [&](ir::CoreBuiltinCall* b) { EmitCoreBuiltinCall(b); },        //
             [&](ir::Construct* c) { EmitConstruct(c); },                    //
             [&](ir::Convert* c) { EmitConvert(c); },                        //
             [&](ir::IntrinsicCall* i) { EmitIntrinsicCall(i); },            //
@@ -1091,7 +1091,7 @@
                                 {Type(ty), Value(bitcast), Value(bitcast->Val())});
 }
 
-void GeneratorImplIr::EmitBuiltinCall(ir::BuiltinCall* builtin) {
+void GeneratorImplIr::EmitCoreBuiltinCall(ir::CoreBuiltinCall* builtin) {
     auto* result_ty = builtin->Result()->Type();
 
     if (builtin->Func() == builtin::Function::kAbs &&
diff --git a/src/tint/writer/spirv/ir/generator_impl_ir.h b/src/tint/writer/spirv/ir/generator_impl_ir.h
index 0e33a70..cb90d04 100644
--- a/src/tint/writer/spirv/ir/generator_impl_ir.h
+++ b/src/tint/writer/spirv/ir/generator_impl_ir.h
@@ -34,10 +34,10 @@
 class Bitcast;
 class Block;
 class BlockParam;
-class BuiltinCall;
 class Construct;
 class ControlInstruction;
 class Convert;
+class CoreBuiltinCall;
 class ExitIf;
 class ExitLoop;
 class ExitSwitch;
@@ -200,7 +200,7 @@
 
     /// Emit a builtin function call instruction.
     /// @param call the builtin call instruction to emit
-    void EmitBuiltinCall(ir::BuiltinCall* call);
+    void EmitCoreBuiltinCall(ir::CoreBuiltinCall* call);
 
     /// Emit a construct instruction.
     /// @param construct the construct instruction to emit