Change Pr::Zip to avoid using SIMDWrapper types as class template arguments
This changes Pr::Zip
to avoid using SIMDWrapper
types as class template arguments of types that are passed between code compiled in the stack and functors JIT-compiled with Cling. It fixes the problem noted in Moore!233 (comment 2871528) that showed up when using a stack built with AVX enabled and not using a functor cache.
Because LCG and ROOT are not built with AVX enabled, Cling always JIT-compiles functors in scalar mode. Because of the #ifdef
usage in SIMDWrapper
this can mean that SIMDWrapper::avx2
means AVX2 in the stack but SIMDWrapper::scalar
inside Cling. With the zipping introduced in !2095 (merged) types such as SIMDWrapper::avx2::types
were used as class template arguments to the zipped types, which apparently caused problems when passing these objects to JIT-compiled functors.
This MR (and its counterpart Rec!1713 (merged)) avoid this problem by using the SIMDWrapper::InstructionSet
enum as the class template argument instead. This always means the same thing, inside or outside Cling, so we don't have the same problem.
Ideally these MRs would be tagged for one of the slots with an avx2
build so Moore!233 (merged) picks them up.
cc: @rmatev