Hi,

On Thu, Dec 18, 2014 at 02:48:46PM -0600, Pat Haugen wrote:
>  ;; 128-bit ANDC/ORC
> +;;   In the case where rs6000_split_logical is called, the NOT'd operand
> +;;   must be opnd1 in order for the split insns to be recognized.

So fix rs6000_split_logical?

>  (define_insn_and_split "*boolc<mode>3_internal1"
>    [(set (match_operand:BOOL_128 0 "vlogical_operand" "=<BOOL_REGS_OUTPUT>")
>       (match_operator:BOOL_128 3 "boolean_operator"
>        [(not:BOOL_128
> -        (match_operand:BOOL_128 2 "vlogical_operand" "<BOOL_REGS_OP1>"))
> -       (match_operand:BOOL_128 1 "vlogical_operand" "<BOOL_REGS_OP2>")]))]
> +        (match_operand:BOOL_128 1 "vlogical_operand" "<BOOL_REGS_OP1>"))
> +       (match_operand:BOOL_128 2 "vlogical_operand" "<BOOL_REGS_OP2>")]))]

This fixes the previously wrong BOOL_REGS_OP[12], you should mention
that somewhere :-)

>    "TARGET_P8_VECTOR || (GET_CODE (operands[3]) == AND)"
>  {
>    if (TARGET_VSX && vsx_register_operand (operands[0], <MODE>mode))
> -    return "xxl%q3 %x0,%x1,%x2";
> +    return "xxl%q3 %x0,%x2,%x1";
>  
>    if (TARGET_ALTIVEC && altivec_register_operand (operands[0], <MODE>mode))
> -    return "v%q3 %0,%1,%2";
> +    return "v%q3 %0,%2,%1";

Please let's keep operands in assembler order if at all possible.


Segher

Reply via email to