https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70751

--- Comment #2 from Jiong Wang <jiwang at gcc dot gnu.org> ---
Vlad,

 Do you have any comments on this regression?

 *arm_movsi_insn has the following operand constraints:

  operand 0: "=rk,r,r,r,rk,m"
  operand 1: "rk, I,K,j,mi,rk"

 As r235184 won't explicitly refuse an unmatch CT_MEMORY operand, alternative
(alt) 4 got a chance to compete with alt 0, and eventually be the winner as
it's with rld_nregs=0 while alt 0 is with rld_nregs=1.

 I am thinking it's OK to give alt 4 a chance here, but we should calculate the
cost correctly

 For alt 4, it should be treated as a "Spill pseudo into memory" then there
will be reject+=3, but unfortunately the check for spill to memory is:

  if (no_regs_p && REG_P (op) && hard_regno[nop] >= 0) 

While the op for this case is not REG_P after equiv substitution.

         (plus:SI (reg/f:SI 102 sfp)
            (const_int 4 [0x4]))


reloading check dump pasted:

before
===
Changing pseudo 110 in operand 1 of insn 6 on equiv sfp:SI+0x4
            1 Non-pseudo reload: reject+=2
            1 Non input pseudo reload: reject++
          alt=0,overall=9,losers=1,rld_nregs=1
            alt=1: Bad operand -- refuse
            alt=2: Bad operand -- refuse
            alt=3: Bad operand -- refuse
            alt=4: Bad operand -- refuse
            0 Non-pseudo reload: reject+=2
            0 Spill pseudo into memory: reject+=3
            0 Non input pseudo reload: reject++
            alt=5,overall=12,losers=1 -- refuse
         Choosing alt 0 in insn 6:  (0) =rk  (1) rk {*arm_movsi_insn}

after
===
Changing pseudo 110 in operand 1 of insn 6 on equiv sfp:SI+0x4
            1 Non-pseudo reload: reject+=2
            1 Non input pseudo reload: reject++
          alt=0,overall=9,losers=1,rld_nregs=1
            alt=1: Bad operand -- refuse
            alt=2: Bad operand -- refuse
            alt=3: Bad operand -- refuse
            1 Non-pseudo reload: reject+=2
            1 Non input pseudo reload: reject++
          alt=4,overall=9,losers=1,rld_nregs=0
            0 Non-pseudo reload: reject+=2
            0 Spill pseudo into memory: reject+=3
            0 Non input pseudo reload: reject++
            alt=5,overall=12,losers=1 -- refuse
         Choosing alt 4 in insn 6:  (0) rk  (1) mi {*arm_movsi_insn}

Reply via email to