diff --git a/include/luisa/xir/builder.h b/include/luisa/xir/builder.h index b3bce07a6..a5eec4b47 100644 --- a/include/luisa/xir/builder.h +++ b/include/luisa/xir/builder.h @@ -39,15 +39,8 @@ class LC_XIR_API Builder { Instruction *_insertion_point = nullptr; private: - void _check_valid_insertion_point() const noexcept; - template - [[nodiscard]] auto _create_and_append_instruction(Args &&...args) noexcept { - _check_valid_insertion_point(); - auto inst = _pool->create(std::forward(args)...); - append(inst); - return inst; - } + [[nodiscard]] auto _create_and_append_instruction(Args &&...args) noexcept -> T *; public: Builder() noexcept; diff --git a/src/xir/builder.cpp b/src/xir/builder.cpp index 5fecd805f..610aa08c1 100644 --- a/src/xir/builder.cpp +++ b/src/xir/builder.cpp @@ -4,13 +4,17 @@ namespace luisa::compute::xir { -void Builder::_check_valid_insertion_point() const noexcept { +Builder::Builder() noexcept = default; + +template +auto Builder::_create_and_append_instruction(Args &&...args) noexcept -> T * { LUISA_DEBUG_ASSERT(_insertion_point != nullptr, "Invalid insertion point."); LUISA_DEBUG_ASSERT(_pool != nullptr, "Invalid pool."); + auto inst = _pool->create(std::forward(args)...); + append(inst); + return inst; } -Builder::Builder() noexcept = default; - void Builder::append(Instruction *inst) noexcept { _insertion_point->insert_after_self(inst); set_insertion_point(inst);