mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-18 10:08:34 +00:00
32 lines
1.5 KiB
Plaintext
32 lines
1.5 KiB
Plaintext
|
Date: Fri, 6 Jul 2001 16:56:56 -0500
|
||
|
From: Vikram S. Adve <vadve@cs.uiuc.edu>
|
||
|
To: Chris Lattner <lattner@cs.uiuc.edu>
|
||
|
Subject: lowering the IR
|
||
|
|
||
|
BTW, I do think that we should consider lowering the IR as you said. I
|
||
|
didn't get time to raise it today, but it comes up with the SPARC
|
||
|
move-conditional instruction. I don't think we want to put that in the core
|
||
|
VM -- it is a little too specialized. But without a corresponding
|
||
|
conditional move instruction in the VM, it is pretty difficult to maintain a
|
||
|
close mapping between VM and machine code. Other architectures may have
|
||
|
other such instructions.
|
||
|
|
||
|
What I was going to suggest was that for a particular processor, we define
|
||
|
additional VM instructions that match some of the unusual opcodes on the
|
||
|
processor but have VM semantics otherwise, i.e., all operands are in SSA
|
||
|
form and typed. This means that we can re-generate core VM code from the
|
||
|
more specialized code any time we want (so that portability is not lost).
|
||
|
|
||
|
Typically, a static compiler like gcc would generate just the core VM, which
|
||
|
is relatively portable. Anyone (an offline tool, the linker, etc., or even
|
||
|
the static compiler itself if it chooses) can transform that into more
|
||
|
specialized target-specific VM code for a particular architecture. If the
|
||
|
linker does it, it can do it after all machine-independent optimizations.
|
||
|
This would be the most convenient, but not necessary.
|
||
|
|
||
|
The main benefit of lowering will be that we will be able to retain a close
|
||
|
mapping between VM and machine code.
|
||
|
|
||
|
--Vikram
|
||
|
|