From 0293d335d01b5367c80ac87435137a28287208dc Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Wed, 18 Mar 2020 00:02:36 +0900 Subject: [PATCH] [qfcc] Mark known source def live for movep This fixes ivar-struct-return (and qwaq). --- tools/qfcc/source/dags.c | 5 +++++ tools/qfcc/source/dot_sblock.c | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/qfcc/source/dags.c b/tools/qfcc/source/dags.c index 6b3e3ff44..8b352e1c1 100644 --- a/tools/qfcc/source/dags.c +++ b/tools/qfcc/source/dags.c @@ -744,6 +744,11 @@ dag_create (flownode_t *flownode) } } } + if (operands[4]) { + // a movep instruction knew what it was reading, so mark that + // as live + dag_make_var_live (live_vars, operands[4]); + } op = opcode_label (dag, s->opcode, s->expr); n = children[0]; if (s->type != st_assign) { diff --git a/tools/qfcc/source/dot_sblock.c b/tools/qfcc/source/dot_sblock.c index b0e975ef7..8e003aa6b 100644 --- a/tools/qfcc/source/dot_sblock.c +++ b/tools/qfcc/source/dot_sblock.c @@ -102,11 +102,10 @@ dot_sblock (dstring_t *dstr, sblock_t *sblock, int blockno) dasprintf (dstr, " \n"); dasprintf (dstr, " %p(%d)\n", sblock, blockno); - dasprintf (dstr, " \n"); + dasprintf (dstr, " \n"); for (l = sblock->labels; l; l = l->next) dasprintf (dstr, " %s(%d)\n", l->name, l->used); dasprintf (dstr, " \n"); - dasprintf (dstr, " \n"); dasprintf (dstr, " \n"); for (s = sblock->statements; s; s = s->next) flow_statement (dstr, s);