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:
parent
0a9bdce34d
commit
aff48bcaae
@ -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.
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user