Gen doesn't have a tailing zero detection function. Use bit field reverse to reverse the interger first and leading zero detection to get the number of tailing zeros. Also add some workaroud for unsupport short and char type to get expected result.
V2: Add missing file ocl_ctz.ll
V3: Add utests
V4: Update SPIR target
d785fe1 Backend: Add built-in ctz function
backend/src/backend/gen/gen_mesa_disasm.c | 1 +
backend/src/backend/gen_context.cpp | 1 +
backend/src/backend/gen_defs.hpp | 1 +
backend/src/backend/gen_encoder.cpp | 1 +
backend/src/backend/gen_encoder.hpp | 1 +
backend/src/backend/gen_insn_selection.cpp | 2 +
backend/src/backend/gen_insn_selection.hxx | 1 +
backend/src/ir/instruction.cpp | 1 +
backend/src/ir/instruction.hpp | 2 +
backend/src/ir/instruction.hxx | 1 +
backend/src/libocl/CMakeLists.txt | 17 ++++++-
backend/src/libocl/script/ocl_integer.def | 1 +
backend/src/libocl/src/ocl_ctz.ll | 65 +++++++++++++++++++++++++++
backend/src/libocl/src/ocl_ctz_20.ll | 65 +++++++++++++++++++++++++++
backend/src/libocl/tmpl/ocl_integer.tmpl.cl | 12 +++++
backend/src/libocl/tmpl/ocl_integer.tmpl.h | 18 ++++++++
backend/src/llvm/llvm_gen_backend.cpp | 51 +++++++++++++++++++++
17 files changed, 240 insertions(+), 1 deletion(-)
Upstream: cgit.freedesktop.org