This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: PR middle-end/47449: [x32] can’t find a register in class ‘DIREG’ while reloading ‘asm’


On 01/25/2011 04:50 AM, H.J. Lu wrote:
   /* If this is a paradoxical SUBREG...  */
   if (GET_MODE_SIZE (use_mode)
       >  GET_MODE_SIZE (GET_MODE (SUBREG_REG (use_reg))))
     {
       /* If this is a paradoxical SUBREG, we have no idea what value the
          extra bits would have.  However, if the operand is equivalent to
          a SUBREG whose operand is the same as our mode, and all the modes
          are within a word, we can just use the inner operand because
          these SUBREGs just say how to treat the register.  */
       use_insn = DF_REF_INSN (use);
       src = SET_SRC (def_set);
       if (GET_CODE (src) == SUBREG
           &&  REG_P (SUBREG_REG (src))
           &&  GET_MODE (SUBREG_REG (src)) == use_mode
           &&  subreg_lowpart_p (src)
           &&  all_uses_available_at (def_insn, use_insn))
         return try_fwprop_subst (use, DF_REF_LOC (use), SUBREG_REG (src),
                                  def_insn, false);
     }

Should it check hard registers?

Yes.


Paolo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]