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] Fix copy_to_reg ICE in expand_expr


Richard Henderson wrote:

>This is ok, but
>
>>        if (temp != original_target)
>>          temp = copy_to_reg (temp);
>
>we should nonetheless use copy_to_mode_reg here.

Hmm, the question is, which mode?  Is this one OK?
(It bootstrapped/regtested on s390-ibm-linux ...)

Bye,
Ulrich


Index: gcc/expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.c,v
retrieving revision 1.414
diff -c -p -r1.414 expr.c
*** expr.c     2002/01/24 01:16:23 1.414
--- expr.c     2002/01/25 19:18:38
*************** expand_expr (exp, target, tmode, modifie
*** 7922,7929 ****
       temp = expand_expr (TREE_OPERAND (exp, 0), original_target,
                     VOIDmode, 0);

       if (temp != original_target)
!        temp = copy_to_reg (temp);

       op1 = gen_label_rtx ();
       emit_cmp_and_jump_insns (temp, const0_rtx, EQ, NULL_RTX,
--- 7922,7946 ----
       temp = expand_expr (TREE_OPERAND (exp, 0), original_target,
                     VOIDmode, 0);

+      /* If temp is constant, we can just compute the result.  */
+      if (GET_CODE (temp) == CONST_INT)
+        {
+          if (INTVAL (temp) != 0)
+            emit_move_insn (target, const1_rtx);
+          else
+            emit_move_insn (target, const0_rtx);
+
+          return target;
+        }
+
       if (temp != original_target)
!        {
!          enum machine_mode mode1 = GET_MODE (temp);
!          if (mode1 == VOIDmode)
!         mode1 = tmode != VOIDmode ? tmode : mode;
!
!          temp = copy_to_mode_reg (mode1, temp);
!        }

       op1 = gen_label_rtx ();
       emit_cmp_and_jump_insns (temp, const0_rtx, EQ, NULL_RTX,





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