This is the mail archive of the gcc-bugs@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]

[Bug rtl-optimization/69291] [6 Regression] wrong code at -O1 for ruby-2.3.0/regcomp.c:985:compile_length_quantifier_node()


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

--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
Ah, of course

      /* If we have x := test ? x + 3 : x + 4 then move the original
         x out of the way while we store flags.  */
      if (common && reg_mentioned_p (if_info->x, common))
        {
          common = gen_reg_rtx (mode);
          noce_emit_move_insn (common, if_info->x);
        }

can't work - we'll overwrite 'common' here.

      /* If we have x := test ? x + 3 : x + 4 then move the original
         x out of the way while we store flags.  */
      if (common && reg_mentioned_p (if_info->x, common))
        {
          rtx tem = gen_reg_rtx (mode);
          noce_emit_move_insn (tem, common);
          common = tem;
        }

does.  Of course that insn might not be recognizable.  The above fixes the ruby
failure for me.

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