We need to port the ia64 support for vectorization of multiple-datatypes from
autovect-branch. This is the patch missing from mainline (wasn't included in
http://gcc.gnu.org/ml/gcc-patches/2006-08/msg00166.html cause I cauldn't test
this):
2005-12-02 Richard Henderson <[EMAIL PROTECTED]>
* config/ia64/ia64.c (TARGET_VECTORIZE_BUILTIN_EXTRACT_EVEN): New.
(TARGET_VECTORIZE_BUILTIN_EXTRACT_ODD): New.
(TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN,
TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD, ia64_builtin_mul_widen_even,
ia64_builtin_mul_widen_odd, builtin_ia64_pmpy_r, builtin_ia64_pmpy_l,
IA64_BUILTIN_PMPY_R, IA64_BUILTIN_PMPY_L): New
(ia64_init_builtins): Initialize builtin_ia64_pmpy_[rl].
(ia64_expand_builtin): Expand them.
(ia64_expand_unpack): New.
* config/ia64/vect.md (smulv4hi3_highpart, umulv4hi3_highpart): New.
(vec_pack_ssat_v4hi): Rename from pack2_sss.
(vec_pack_usat_v4hi): Rename from pack2_uss.
(vec_pack_ssat_v2si): Rename from pack4_sss.
(vec_pack_mod_v4hi, vec_pack_mod_v2si): New.
(vec_interleave_lowv8qi): Rename from unpack1_l.
(vec_interleave_highv8qi): Rename from unpack1_h.
(vec_interleave_lowv4hi): Rename from unpack2_l.
(vec_interleave_highv4hi): Rename from unpack2_h.
(vec_interleave_lowv2si): Rename from unpack4_l.
(vec_interleave_highv2si): Rename from unpack4_h.
(vec_unpacku_hi_v8qi, vec_unpacks_hi_v8qi): New.
(vec_unpacku_lo_v8qi, vec_unpacks_lo_v8qi): New.
(vec_unpacku_hi_v4hi, vec_unpacks_hi_v4hi): New.
(vec_unpacku_lo_v4hi, vec_unpacks_lo_v4hi): New.
* config/ia64/ia64-protos.h (ia64_expand_unpack): Declare.
Once the above is merged, we can add ia64 to the lists of targets that support
the following functions in testsuite/lib/target-support.exp:
check_effective_target_vect_sdot_hi
check_effective_target_vect_udot_qi
check_effective_target_vect_sdot_qi
check_effective_target_vect_widen_sum_qi_to_hi
check_effective_target_vect_widen_sum_hi_to_si
--
Summary: missed optimization: model missing vec_pack/unpack
idioms for ia64
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: dorit at il dot ibm dot com
GCC build triplet: ia64-*-*
GCC host triplet: ia64-*-*
GCC target triplet: ia64-*-*
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29778