diff options
| author | 2025-10-07 20:24:13 +0200 | |
|---|---|---|
| committer | 2025-10-07 20:24:13 +0200 | |
| commit | 8d3273a5664e660fa18620a4857d85226632db9a (patch) | |
| tree | b66924b90d8c16cd787b3b218ea1d97a944c3a7d | |
| parent | 960f79fa50009fd1e95a294547e3e46494d49484 (diff) | |
rega: don't make fixed intervals for globally live regs
| -rw-r--r-- | regalloc.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -528,7 +528,9 @@ priliveset(struct bitset *s, size_t siz) static void usereg(struct rega *ra, int reg, struct block *blk, int pos) { - struct fixinterval *fxit = alloc(ra->arena, sizeof *fxit, 0); + struct fixinterval *fxit; + if (rstest(mctarg->rglob, reg)) return; /* regalloc never allocates globally live regs, so don't need intervals for those */ + fxit = alloc(ra->arena, sizeof *fxit, 0); fxit->next = ra->intervals.fixed; fxit->range = (struct range) {blk->inumstart, pos}; fxit->rs = 1<<reg; @@ -537,6 +539,7 @@ usereg(struct rega *ra, int reg, struct block *blk, int pos) static void defreg(struct rega *ra, int reg, int pos) { + if (rstest(mctarg->rglob, reg)) return; for (struct fixinterval *fxit = ra->intervals.fixed; fxit; fxit = fxit->next) { if (fxit->rs == 1<<reg) { assert(fxit->range.from <= pos); |