Skip to content

Change Pr::Zip to avoid using SIMDWrapper types as class template arguments

Olli Lupton requested to merge olupton_vector_cling_fix into master

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

Edited by Marco Cattaneo

Merge request reports