Re: Native Code Generation from Abstract Stack Machine

Peter Seibel <peter@javamonkey.com>
11 Mar 2004 12:45:31 -0500

          From comp.compilers

Related articles
Native Code Generation from Abstract Stack Machine kevin@albrecht.net (Kevin Albrecht) (2004-02-27)
Re: Native Code Generation from Abstract Stack Machine alex_mcd@btopenworld.com (Alex McDonald) (2004-03-02)
Re: Native Code Generation from Abstract Stack Machine m.dentico@no-spam.it (Massimo Dentico) (2004-03-02)
Re: Native Code Generation from Abstract Stack Machine bill@qswtools.com (Bill Cox) (2004-03-06)
Re: Native Code Generation from Abstract Stack Machine peter@javamonkey.com (Peter Seibel) (2004-03-06)
Re: Native Code Generation from Abstract Stack Machine peter@javamonkey.com (Peter Seibel) (2004-03-11)
Re: Native Code Generation from Abstract Stack Machine samiam@moorecad.com (Scott Moore) (2004-03-11)
Re: Native Code Generation from Abstract Stack Machine eliotm@pacbell.net (Eliot Miranda) (2004-03-11)
Re: Native Code Generation from Abstract Stack Machine bonzini@gnu.org (2004-03-19)
| List of all articles for this month |

From: Peter Seibel <peter@javamonkey.com>
Newsgroups: comp.compilers
Date: 11 Mar 2004 12:45:31 -0500
Organization: SBC http://yahoo.sbc.com
References: 04-02-179 04-03-031
Keywords: architecture, code
Posted-Date: 11 Mar 2004 12:45:31 EST

Peter Seibel <peter@javamonkey.com> writes:

> I assume there are standard techniques for turning stack machine
> code into abstract register code. Are there any good references
> where I can read about them?

> [The simplest way is to treat the registers as a stack and run
> through each basic block assigning values to registers. -John]

Okay. If I understand you and what you mean by abstract register code
this means I take each basic block and for each value pushed on the
stack create a new abstract register (i.e. temporary variable). So if
one of my basic blocks is

        push 1
        push 2
        goto C

That gets translated to:

        t1 = 1
        t2 = 2
        goto C

Assuming that's right, now suppose I have three basic blocks A, B, and
C. A is as above. B is similar in stack code and gets translated to:

        t3 = 10
        t4 = 20
        goto C

And C is simply an ADD instruction which pops two values. Presumably
we need to generate abstract registers to hold the "inputs" to a basic
block. So it gets translated to this:

      t5 = t6 + t7

Since both A and B are predecessors of C but they are storing those
values into different abstract registers I need to somehow arrange to
get the correct values in t6 and t7. So do I generate A and B like this:

A:
        t1 = 1
        t2 = 2
        t6 = t1
        t7 = t2
        goto C

B:

        t3 = 10
        t4 = 20
        t6 = t3
        t7 = t2
        goto C

and then count on copy propagation and dead-code elimination to get
rid of some of the temporaries? Or am I making this too complicated?

-Peter

--
Peter Seibel peter@javamonkey.com


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.