Hello, Could anyone explain to me what is difference between vec_shl_<vector_mode> and ashl<vector_mode>3 patterns? It seems to me that both shift a vector operand 1 with scalar operand 2. I tried to understand some targets' implemenation, e.g., ia64 as follows, and cannot grasp their difference. Does the "whole vector shift" of vec_shl means treating a vector as a long scalar? Thanks in advance.
(define_insn "lshr<mode>3" [(set (match_operand:VECINT24 0 "gr_register_operand" "=r") (lshiftrt:VECINT24 (match_operand:VECINT24 1 "gr_register_operand" "r") (match_operand:DI 2 "gr_reg_or_5bit_operand" "rn")))] "" "pshr<vecsize>.u %0 = %1, %2" [(set_attr "itanium_class" "mmshf")]) (define_expand "vec_shr_<mode>" [(set (match_operand:VECINT 0 "gr_register_operand" "") (lshiftrt:DI (match_operand:VECINT 1 "gr_register_operand" "") (match_operand:DI 2 "gr_reg_or_6bit_operand" "")))] "" { operands[0] = gen_lowpart (DImode, operands[0]); operands[1] = gen_lowpart (DImode, operands[1]); }) Cheers, Bingfeng Mei Broadcom UK