[LLVMdev] static functions and optimization
reed kotler
rkotler at mips.com
Wed Jul 24 15:45:05 PDT 2013
I have some stub functions that are essentially static, but they cannot
be removed.
What linkage type should I use in that case. Internal linkage appears to
get the functions discarded if they are not referenced under certain
optimizations.
This is part of the gcc mips16 hack for floating point.
For example, a function like floor from the math library will be called
with an external reference to function floor.
At that time, the compiler does not know whether floor was compiled as
mips16 or mips32.
It generates the call to floor as if it is a mips16 compiled function.
It also generates a stub that the linker can use if during link time it
is discovered that "floor" is a mips32 function.
The stubs, which are mips32 code, will move the first argument register
into a floating point register, call floor, and upon return will move
the integer return value into a floating point register.
If I designate this function as having internal linkage, then in some
cases, the optimizer will throw it away.
In that case, at link time it will call floor, and if floor is compiled
as mips32, this will break a mips16 compiled program.
The linker does not know there is an issue because only functions with
certain kinds of signatures need a helper function for the call.
More information about the llvm-dev
mailing list