Skip to content

Commit b29d9c4

Browse files
committed
Add class member function support for addSet
Add class member function support
1 parent 9ff519b commit b29d9c4

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

include/llvm-dialects/Dialect/Visitor.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,12 @@ class VisitorBuilder : private detail::VisitorBuilderBase {
414414
return *this;
415415
}
416416

417+
template <typename... OpTs>
418+
VisitorBuilder &addSet(void (PayloadT::*fn)(llvm::Instruction &)) {
419+
addSetMemberCase(detail::VisitorKey::opSet<OpTs...>(), fn);
420+
return *this;
421+
}
422+
417423
VisitorBuilder &addSet(const OpSet &opSet,
418424
VisitorResult (*fn)(PayloadT &,
419425
llvm::Instruction &I)) {
@@ -512,6 +518,15 @@ class VisitorBuilder : private detail::VisitorBuilderBase {
512518
VisitorBuilderBase::add(key, &VisitorBuilder::setForwarder<ReturnT>, data);
513519
}
514520

521+
template <typename ReturnT>
522+
void addSetMemberCase(detail::VisitorKey key,
523+
ReturnT (PayloadT::*fn)(llvm::Instruction &)) {
524+
detail::VisitorCallbackData data{};
525+
static_assert(sizeof(fn) <= sizeof(data.data));
526+
memcpy(&data.data, &fn, sizeof(fn));
527+
VisitorBuilderBase::add(key, &VisitorBuilder::setForwarder<ReturnT>, data);
528+
}
529+
515530
template <typename OpT, typename ReturnT>
516531
void addMemberFnCase(detail::VisitorKey key, ReturnT (PayloadT::*fn)(OpT &)) {
517532
detail::VisitorCallbackData data{};

0 commit comments

Comments
 (0)