emit-rtl.c (gen_lowpart_common): Suppress last change if __complex__.

* emit-rtl.c (gen_lowpart_common): Suppress last change if __complex__.
        * emit-rtl.c (hard-reg-set.h): Include.
        (get_lowpart_common): Don't make new REG for hard reg in a
        class that cannot change size.
        * Makefile.in (emit-rtl.o): Depend on hard-reg-set.h.
        * combine.c: Revert previous patch.

Co-Authored-By: Richard Kenner <kenner@vlsi1.ultra.nyu.edu>

From-SVN: r18109
This commit is contained in:
Jeffrey A Law 1998-02-19 00:35:51 +00:00 committed by Jeff Law
parent 0a9bdce34d
commit aff48bcaae
4 changed files with 22 additions and 33 deletions

View File

@ -1,3 +1,15 @@
Thu Feb 19 01:32:37 1998 Jeffrey A Law (law@cygnus.com)
Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* emit-rtl.c (gen_lowpart_common): Suppress last change if __complex__.
* emit-rtl.c (hard-reg-set.h): Include.
(get_lowpart_common): Don't make new REG for hard reg in a
class that cannot change size.
* Makefile.in (emit-rtl.o): Depend on hard-reg-set.h.
* combine.c: Revert previous patch.
1998-02-19 Paul Eggert <eggert@twinsun.com>
* config/sparc/sol2-sld.h: New file.

View File

@ -1368,7 +1368,7 @@ dwarf2out.o : dwarf2out.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf2.h flags.h \
xcoffout.o : xcoffout.c $(CONFIG_H) $(TREE_H) $(RTL_H) xcoffout.h flags.h
emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h except.h \
function.h regs.h insn-config.h insn-codes.h $(RECOG_H) real.h expr.h \
obstack.h
obstack.h hard-reg-set.h
real.o : real.c $(CONFIG_H) $(TREE_H)
getpwd.o : getpwd.c $(CONFIG_H)

View File

@ -3483,13 +3483,6 @@ simplify_rtx (x, op0_mode, last, in_dest)
if (GET_CODE (SUBREG_REG (x)) == REG
&& REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
#ifdef CLASS_CANNOT_CHANGE_SIZE
&& (! (TEST_HARD_REG_BIT
(reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE],
REGNO (SUBREG_REG (x))))
|| (GET_MODE_SIZE (mode)
== GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))))
#endif
&& REGNO (SUBREG_REG (x)) != FRAME_POINTER_REGNUM
#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
&& REGNO (SUBREG_REG (x)) != HARD_FRAME_POINTER_REGNUM
@ -5113,20 +5106,6 @@ expand_compound_operation (x)
int modewidth;
rtx tem;
#ifdef CLASS_CANNOT_CHANGE_SIZE
/* When dealing with hard regs that cannot change size, don't even try
expanding to shifts, since we wind up violating the rule. */
if (GET_RTX_CLASS (GET_CODE (x)) == '1'
&& GET_CODE (XEXP (x, 0)) == REG
&& REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
&& (TEST_HARD_REG_BIT
(reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE],
REGNO (SUBREG_REG (x))))
&& (GET_MODE_SIZE (GET_MODE (x))
!= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))))
return x;
#endif
switch (GET_CODE (x))
{
case ZERO_EXTEND:
@ -6243,17 +6222,6 @@ force_to_mode (x, mode, mask, reg, just_select)
break;
case SUBREG:
#ifdef CLASS_CANNOT_CHANGE_SIZE
if (GET_CODE (SUBREG_REG (x)) == REG
&& REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
&& (TEST_HARD_REG_BIT
(reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE],
REGNO (SUBREG_REG (x))))
&& (GET_MODE_SIZE (GET_MODE (x))
!= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))))
return x;
#endif
if (subreg_lowpart_p (x)
/* We can ignore the effect of this SUBREG if it narrows the mode or
if the constant masks to zero all the bits the mode doesn't

View File

@ -48,6 +48,7 @@ Boston, MA 02111-1307, USA. */
#include "function.h"
#include "expr.h"
#include "regs.h"
#include "hard-reg-set.h"
#include "insn-config.h"
#include "recog.h"
#include "real.h"
@ -665,6 +666,14 @@ gen_lowpart_common (mode, x)
/* integrate.c can't handle parts of a return value register. */
&& (! REG_FUNCTION_VALUE_P (x)
|| ! rtx_equal_function_value_matters)
#ifdef CLASS_CANNOT_CHANGE_SIZE
&& ! (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (x))
&& GET_MODE_CLASS (GET_MODE (x)) != MODE_COMPLEX_INT
&& GET_MODE_CLASS (GET_MODE (x)) != MODE_COMPLEX_FLOAT
&& (TEST_HARD_REG_BIT
(reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE],
REGNO (x))))
#endif
/* We want to keep the stack, frame, and arg pointers
special. */
&& x != frame_pointer_rtx