[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