Re: [Patch] [arm] Fix 88714, Arm LDRD/STRD peepholes - remove q constraint
On 2/20/19 9:12 PM, Jakub Jelinek wrote: On Mon, Feb 18, 2019 at 12:47:04PM +, Kyrill Tkachov wrote: Ok. Thanks for working on this. Sorry for the endless story here, but I've realized that the *arm_ldrd and *arm_strd instructions are the only remaining uses of the undocumented internal constraint q and that it isn't really needed even for these instructions, we can just use rk instead of q. Bootstrapped/regtested on armv7hl-linux-gnueabi, ok for trunk? Ok. Thanks, Kyrill 2019-02-20 Jakub Jelinek PR bootstrap/88714 * constraints.md (q): Remove. * config/arm/ldrdstrd.md (*arm_ldrd, *arm_strd): Use rk constraint instead of q. --- gcc/config/arm/constraints.md.jj2019-01-01 12:37:27.032812929 +0100 +++ gcc/config/arm/constraints.md 2019-02-18 20:18:51.816941795 +0100 @@ -90,9 +90,6 @@ (define_constraint "PJ" (define_register_constraint "k" "STACK_REG" "@internal The stack register.") -(define_register_constraint "q" "(TARGET_ARM && TARGET_LDRD) ? CORE_REGS : GENERAL_REGS" - "@internal In ARM state with LDRD support, core registers, otherwise general registers.") - (define_register_constraint "b" "TARGET_THUMB ? BASE_REGS : NO_REGS" "@internal Thumb only. The union of the low registers and the stack register.") --- gcc/config/arm/ldrdstrd.md.jj 2019-02-18 20:19:34.976233961 +0100 +++ gcc/config/arm/ldrdstrd.md 2019-02-18 20:19:54.555912842 +0100 @@ -159,7 +159,7 @@ (define_peephole2 ; swap the destination (define_insn "*arm_ldrd" [(parallel [(set (match_operand:SI 0 "s_register_operand" "=r") (match_operand:SI 2 "memory_operand" "m")) - (set (match_operand:SI 1 "s_register_operand" "=q") + (set (match_operand:SI 1 "s_register_operand" "=rk") (match_operand:SI 3 "memory_operand" "m"))])] "TARGET_LDRD && TARGET_ARM && reload_completed && valid_operands_ldrd_strd (operands, true)" @@ -180,7 +180,7 @@ (define_insn "*arm_strd" [(parallel [(set (match_operand:SI 2 "memory_operand" "=m") (match_operand:SI 0 "s_register_operand" "r")) (set (match_operand:SI 3 "memory_operand" "=m") - (match_operand:SI 1 "s_register_operand" "q"))])] + (match_operand:SI 1 "s_register_operand" "rk"))])] "TARGET_LDRD && TARGET_ARM && reload_completed && valid_operands_ldrd_strd (operands, false)" { Jakub
[Patch] [arm] Fix 88714, Arm LDRD/STRD peepholes - remove q constraint
On Mon, Feb 18, 2019 at 12:47:04PM +, Kyrill Tkachov wrote: > Ok. > > Thanks for working on this. Sorry for the endless story here, but I've realized that the *arm_ldrd and *arm_strd instructions are the only remaining uses of the undocumented internal constraint q and that it isn't really needed even for these instructions, we can just use rk instead of q. Bootstrapped/regtested on armv7hl-linux-gnueabi, ok for trunk? 2019-02-20 Jakub Jelinek PR bootstrap/88714 * constraints.md (q): Remove. * config/arm/ldrdstrd.md (*arm_ldrd, *arm_strd): Use rk constraint instead of q. --- gcc/config/arm/constraints.md.jj2019-01-01 12:37:27.032812929 +0100 +++ gcc/config/arm/constraints.md 2019-02-18 20:18:51.816941795 +0100 @@ -90,9 +90,6 @@ (define_constraint "PJ" (define_register_constraint "k" "STACK_REG" "@internal The stack register.") -(define_register_constraint "q" "(TARGET_ARM && TARGET_LDRD) ? CORE_REGS : GENERAL_REGS" - "@internal In ARM state with LDRD support, core registers, otherwise general registers.") - (define_register_constraint "b" "TARGET_THUMB ? BASE_REGS : NO_REGS" "@internal Thumb only. The union of the low registers and the stack register.") --- gcc/config/arm/ldrdstrd.md.jj 2019-02-18 20:19:34.976233961 +0100 +++ gcc/config/arm/ldrdstrd.md 2019-02-18 20:19:54.555912842 +0100 @@ -159,7 +159,7 @@ (define_peephole2 ; swap the destination (define_insn "*arm_ldrd" [(parallel [(set (match_operand:SI 0 "s_register_operand" "=r") (match_operand:SI 2 "memory_operand" "m")) - (set (match_operand:SI 1 "s_register_operand" "=q") + (set (match_operand:SI 1 "s_register_operand" "=rk") (match_operand:SI 3 "memory_operand" "m"))])] "TARGET_LDRD && TARGET_ARM && reload_completed && valid_operands_ldrd_strd (operands, true)" @@ -180,7 +180,7 @@ (define_insn "*arm_strd" [(parallel [(set (match_operand:SI 2 "memory_operand" "=m") (match_operand:SI 0 "s_register_operand" "r")) (set (match_operand:SI 3 "memory_operand" "=m") - (match_operand:SI 1 "s_register_operand" "q"))])] + (match_operand:SI 1 "s_register_operand" "rk"))])] "TARGET_LDRD && TARGET_ARM && reload_completed && valid_operands_ldrd_strd (operands, false)" { Jakub