diff options
author | Alan Modra <amodra@bigpond.net.au> | 2003-12-06 12:22:31 +0000 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2003-12-06 22:52:31 +1030 |
commit | df2ef49bbf1d8e81db688fb49ddaf7e614b71961 (patch) | |
tree | 806d63a055d1e8b44cd4e930d2d4c903a4cfaee2 /gcc/final.c | |
parent | 929a3294725cb55f539bde39b50672cf24055c07 (diff) | |
download | gcc-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.c | 6 |
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. */ |