On Sun, Jun 19, 2005 at 07:36:15PM +0300, Dorit Naishlos wrote: > ... because at least for the vector-shift case I need to > check that the shift operand is constant, and only then return > optab_shri/shli.
This isn't true. Just because the altivec patterns don't accept anything other than a constant doesn't mean that the pattern can't be valid for other operands. The operation is completely specified by its code. Adding the operations to optab_for_tree_code is the right approach. Ideally we'd also update tree-vect-generic to handle this new operation; its behaviour with this code at present is actively wrong. For the moment we should add an assert --- compute_type = TREE_TYPE (type); } + gcc_assert (code != VEC_LSHIFT_EXPR && code != VEC_RSHIFT_EXPR); rhs = expand_vector_operation (bsi, type, compute_type, rhs, code); if (lang_hooks.types_compatible_p (TREE_TYPE (lhs), TREE_TYPE (rhs))) --- which should verify that we only generate this operation when we have the expectation that the backend will handle it. r~