On 20/06/13 14:50, Kyrylo Tkachov wrote:
Hi all,

This patch adjusts the andsi3, iorsi3, xorsi3 patterns for -mrestrict-it. It
is done by adding 16-bit alternatives that are fit be cond_exec'd when
arm_restrict_it is on.

Tested arm-none-eabi on model and qemu with ARMv7 and ARMv8. Also tested as
part of the series with bootstrap on a Cortex-A15.

Ok for trunk?

Thanks,
Kyrill

2013-06-20  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

        * config/arm/arm.md (arm_andsi3_insn): Add alternatives for 16-bit
encoding.
        (iorsi3_insn): Likewise.
        (arm_xorsi3): Likewise.



 ; ??? Check split length for Thumb-2
 (define_insn_and_split "*arm_andsi3_insn"
-  [(set (match_operand:SI         0 "s_register_operand" "=r,r,r,r")
-       (and:SI (match_operand:SI 1 "s_register_operand" "r,r,r,r")
-               (match_operand:SI 2 "reg_or_int_operand" "I,K,r,?n")))]
+  [(set (match_operand:SI         0 "s_register_operand" "=r,l,l,r,r,r")
+       (and:SI (match_operand:SI 1 "s_register_operand" "r,0,l,r,r,r")
+               (match_operand:SI 2 "reg_or_int_operand" "I,l,0,K,r,?n")))]

This operanation is commutative. Rather than adding 0,l and l,0 alternatives, you should mark the entire operation as commutative (with '%' before the first constraint letter for operand 1) and omit the second new alternative.

 (define_insn_and_split "*iorsi3_insn"
-  [(set (match_operand:SI 0 "s_register_operand" "=r,r,r,r")
-       (ior:SI (match_operand:SI 1 "s_register_operand" "%r,r,r,r")
-               (match_operand:SI 2 "reg_or_int_operand" "I,K,r,?n")))]
+  [(set (match_operand:SI 0 "s_register_operand" "=r,l,l,r,r,r")
+       (ior:SI (match_operand:SI 1 "s_register_operand" "%r,0,l,r,r,r")
+               (match_operand:SI 2 "reg_or_int_operand" "I,l,0,K,r,?n")))]

This one is already marked commutative, so the second new alternative should be redundant.

 (define_insn_and_split "*arm_xorsi3"
-  [(set (match_operand:SI         0 "s_register_operand" "=r,r,r")
-       (xor:SI (match_operand:SI 1 "s_register_operand" "%r,r,r")
-               (match_operand:SI 2 "reg_or_int_operand" "I,r,?n")))]
+  [(set (match_operand:SI         0 "s_register_operand" "=r,l,l,r,r")
+       (xor:SI (match_operand:SI 1 "s_register_operand" "%r,0,l,r,r")
+               (match_operand:SI 2 "reg_or_int_operand" "I,l,0,r,?n")))]

Same here.

OK with that change.

R.

Reply via email to