I have the following example:
In a header somewhere:
namespace Kokkos {
using DefaultHostExecutionSpace = Serial;
}
In a different header somewhere
namespace Kokkos{
template<typename T>
class RangePolicy;
}
struct GoodClass {
int foo;
KOKKOS_INLINE_FUNCTION GoodClass(int f) : foo(f) {}
KOKKOS_INLINE_FUNCTION void method() {
Kokkos::parallel_for(
Kokkos::RangePolicy<Kokkos::DefaultHostExecutionSpace>(0, 42),
KOKKOS_LAMBDA(int i) { do_something(foo, i); });
}
};
Once I have the CallExpr to the parallel_for I use the following matcher on it:
auto FilterArgs = hasAnyArgument(
expr(hasType(cxxRecordDecl(isDerivedFrom(cxxRecordDecl(
matchesName("Impl::PolicyTraits")))) // This
will cause it to match the first argument
.bind("decl")))
.bind("expr"));
I am trying to detect that the template type on the RangePolicy is
Kokkos::DefaultHostExecutionSpace and not Serial.
My question is can I only see the typedef at the expression that constructs the
object or can I deduce that Serial was actually the result of the typedef from
the CXXRecordDecl? I can’t just find the typedefdecl because I only want to
detect when it was explicitly Kokkos::DefaultHostExecutionSpace, Serial could
come from some other context that I don’t want to match on.
When I dump the expr from the the above matcher I get:
`-CXXTemporaryObjectExpr 0x7007f50
'Kokkos::RangePolicy<Kokkos::DefaultHostExecutionSpace>':'class
Kokkos::RangePolicy<class Kokkos::Serial>' 'void (const
Kokkos::RangePolicy<class Kokkos::Serial>::member_type, const
Kokkos::RangePolicy<class Kokkos::Serial>::member_type)’
But if I dump the decl I can only see:
ClassTemplateSpecializationDecl 0x7e6eb70
</path/to/the/file/Kokkos_ExecPolicy.hpp:93:1, line:279:1> line:94:7 class
RangePolicy definition
|-DefinitionData pass_in_registers standard_layout trivially_copyable
has_user_declared_ctor can_const_default_init
| |-DefaultConstructor exists non_trivial user_provided
| |-CopyConstructor trivial user_declared has_const_param
needs_overload_resolution implicit_has_const_param
| |-MoveConstructor exists trivial user_declared
| |-CopyAssignment trivial has_const_param implicit_has_const_param
| |-MoveAssignment
| `-Destructor simple irrelevant trivial
|-public
'Impl::PolicyTraits<Serial>':'Kokkos::Impl::PolicyTraits<Kokkos::Serial>'
|-TemplateArgument pack
| `-TemplateArgument type 'Kokkos::Serial'
Thanks,
Drew
_______________________________________________
cfe-users mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users