summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1998-02-19 00:33:40 +0000
committerJeff Law <law@gcc.gnu.org>1998-02-18 17:33:40 -0700
commit200e1cad10139463591cef69e375029ccdc0e525 (patch)
treea5fcaab4addfaca8da4b159d2bd777e97227f3d8
parentc0bc8f6d6bd8e64576111f08edc3831ce72ec4bd (diff)
downloadgcc-200e1cad10139463591cef69e375029ccdc0e525.tar.gz
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: r18108
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/Makefile.in3
-rw-r--r--gcc/combine.c32
-rw-r--r--gcc/emit-rtl.c9
4 files changed, 23 insertions, 33 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 06517bcff9a..bfba9658074 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
+
Tue Feb 17 23:34:29 1998 David Edelsohn <edelsohn@mhpcc.edu>
* rs6000.h (MY_ISCOFF): Add numeric value of U803XTOCMAGIC.
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index f15748f8e1c..e85ed555b0c 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1304,7 +1304,8 @@ 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 \
function.h regs.h insn-config.h insn-codes.h real.h expr.h bytecode.h \
- bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h bc-opname.h
+ bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h bc-opname.h \
+ hard-reg-set.h
real.o : real.c $(CONFIG_H) $(TREE_H)
getpwd.o : getpwd.c $(CONFIG_H)
diff --git a/gcc/combine.c b/gcc/combine.c
index bc37d61c7a2..2fd6246e2ef 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -3367,13 +3367,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
@@ -4986,20 +4979,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:
@@ -6106,17 +6085,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
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 50c65972819..394c14a0580 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -47,6 +47,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 "real.h"
#include "obstack.h"
@@ -681,6 +682,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