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