aboutsummaryrefslogtreecommitdiff
path: root/gcc/final.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2003-12-06 12:22:31 +0000
committerAlan Modra <amodra@gcc.gnu.org>2003-12-06 22:52:31 +1030
commitdf2ef49bbf1d8e81db688fb49ddaf7e614b71961 (patch)
tree806d63a055d1e8b44cd4e930d2d4c903a4cfaee2 /gcc/final.c
parent929a3294725cb55f539bde39b50672cf24055c07 (diff)
downloadgcc-df2ef49bbf1d8e81db688fb49ddaf7e614b71961.zip
gcc-df2ef49bbf1d8e81db688fb49ddaf7e614b71961.tar.gz
gcc-df2ef49bbf1d8e81db688fb49ddaf7e614b71961.tar.bz2
re PR rtl-optimization/13169 (asm using r30 or r31 confuses global_alloc)
PR 13169 * basic-block.h (PROP_ASM_SCAN): Define. * final.c (regs_asm_clobbered): New array. * regs.h (regs_asm_clobbered): Declare. * flow.c (life_analysis): Init it. (mark_set_regs): Set PROP_ASM_SCAN for asms. (mark_set_1): Set regs_asm_clobbered. * global.c (global_alloc): Don't set eliminable_regset when regs_asm_clobbered. From-SVN: r74363
Diffstat (limited to 'gcc/final.c')
-rw-r--r--gcc/final.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/final.c b/gcc/final.c
index 820cb68..53c9359 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -170,6 +170,12 @@ CC_STATUS cc_prev_status;
char regs_ever_live[FIRST_PSEUDO_REGISTER];
+/* Like regs_ever_live, but 1 if a reg is set or clobbered from an asm.
+ Unlike regs_ever_live, elements of this array corresponding to
+ eliminable regs like the frame pointer are set if an asm sets them. */
+
+char regs_asm_clobbered[FIRST_PSEUDO_REGISTER];
+
/* Nonzero means current function must be given a frame pointer.
Initialized in function.c to 0. Set only in reload1.c as per
the needs of the function. */