[LLVMdev] some questions about the best place to put some passes

reed kotler rkotler at mips.com
Mon Apr 1 15:15:38 PDT 2013

I have two sets of features I want to add to the mips16 port.

1) A module pass that scans the IR and makes a decision as to whether to 
compile the given function as mips16 or mips32. Now  I can specify this 
by adding attributes. Mips16 is just used for space optimization so the 
presumption is that I'm only worrying about space optimization for this 
pass. At a first approximation, this will make all functions compiled as 
mips 16 unless:
a) there are floating point parameters.
b) there are floating point operations in the function.
Mips16 has no floating point so it's better in most cases to compile 
those functions as mips32 otherwise we have to use a form of soft float.

I assume I would make this a module pass.
How do I attach a module pass? I think that this should probably be run 
as early as possible in llc. I'm not sure where this place to add this is.

2) For implementing the full current hard float mechanism for mips16 as 
gcc does it, I need to generate stubs for many mips16 functions that can 
be called by mips32 functions (certainly for anything with "extern"). 
There is a hack in "ld" for dealing with this. If "ld" realizes that a 
mips32 function is calling a mips16 function, it looks to resolve the 
external to one of these stubs that in turn sets up the right 
environment for the mips16 function to b called. This is only necessary 
when there are floating point parameters or return values that would be 
normally passed in floating point registers.

So I need to create stubs for all mips16 functions that have such 
floating point signatures that can be called from mips32 functions. 
There are some other cases which need this too.

So I assume this would also be a module pass that would be added as 
early as possible in llc.
I'm not sure where this place to add this is.



More information about the llvm-dev mailing list