[LLVMdev] question on instruction selection
Nuno Lopes
nunoplopes at sapo.pt
Mon Jan 25 14:18:23 PST 2010
Hi,
I was wondering how exactly instruction selection works in LLVM. As I'm not
aware of any document describing it, I'll ask here :)
So, the tablegen files that each backend implements describe the mapping
between selection DAG nodes and assembly instructions (and optionally? their
binary encoding). The selection DAG (one per basic block) is produced "by
hand" directly from the LLVM IR. This pass is independent of the target
architecture. Therefore, implementing a new backend is "just" about
specifying patterns that convert selection DAG nodes to the target's
assembly.
Is my understanding correct? Also, is there any document describing the
selection DAG nodes that one needs to match against? And what's the
algorithm behind this selection DAG?
I'm also wondering what would be the possible improvement of the approach
presented last Friday at POPL
(http://portal.acm.org/citation.cfm?doid=1706299.1706346 or
http://www.eecs.tufts.edu/~dias/gentileset.pdf) for LLVM. Any insight? The
approach seems similar to what gcc does or did at least (IR->RTL->ASM), so
I'm not entirely sure there would be something to gain here for LLVM. It
would be nice to generate the selection dag from LLVM IR automatically,
though.
Thanks,
Nuno
More information about the llvm-dev
mailing list