diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1992-12-27 06:53:32 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1992-12-27 06:53:32 -0500 |
commit | cf526dcc5c28c03eb46440208663802b4f4bc171 (patch) | |
tree | a5ac6a49933111a488ff27398fa497f89e7bcd6b /gcc/rtl.c | |
parent | b851ea098ed463f18e1534b8295ef666f6c7916d (diff) | |
download | gcc-cf526dcc5c28c03eb46440208663802b4f4bc171.zip gcc-cf526dcc5c28c03eb46440208663802b4f4bc171.tar.gz gcc-cf526dcc5c28c03eb46440208663802b4f4bc171.tar.bz2 |
(copy_rtx): A CONST can be shared if it contains a SYMBOL_REF.
A SCRATCH must be shared.
A MEM may be shared if it is at a constant address.
From-SVN: r2924
Diffstat (limited to 'gcc/rtl.c')
-rw-r--r-- | gcc/rtl.c | 16 |
1 files changed, 16 insertions, 0 deletions
@@ -264,7 +264,23 @@ copy_rtx (orig) case CODE_LABEL: case PC: case CC0: + case SCRATCH: + /* SCRATCH must be shared because they represent distinct values. */ return orig; + + case CONST: + /* CONST can be shared if it contains a SYMBOL_REF. If it contains + a LABEL_REF, it isn't sharable. */ + if (GET_CODE (XEXP (orig, 0)) == PLUS + && GET_CODE (XEXP (XEXP (orig, 0), 0)) == SYMBOL_REF + && GET_CODE (XEXP (XEXP (orig, 0), 1)) == CONST_INT) + return orig; + break; + + case MEM: + if (CONSTANT_ADDRESS_P (XEXP (orig, 0))) + return orig; + break; } copy = rtx_alloc (code); |