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 | |