[LLVMdev] Unnecessary i16 -> i32 type promotion
Eli Friedman
eli.friedman at gmail.com
Sun Jul 19 14:06:34 PDT 2009
On Sun, Jul 19, 2009 at 1:42 PM, Marc de Kruijf<dekruijf at cs.wisc.edu> wrote:
> If I have an '&' operator inside an 'if' statement, LLVM seems to always
> promote a 16 bit integer type to a 32 bit integer type.
The front-end does the promotion because the semantics of C require
it. In some cases, LLVM is smart enough to eliminate the promotion,
but it doesn't happen to catch this case.
> I don't want this
> to happen because my back-end only supports 16 bit types. Why is this
> happening? Where might this be happening, so I can fix it? It doesn't seem
> to happen with the '|' operator, only '&'. Thanks!
In that case, you should be telling the front-end to compile code for
a target which defines "int" to a 16-bit type. "i386-pc-linux-gnu" is
not such a target. Note that you might want to look into using clang;
from what I know, it's relatively easier to add a new target to clang
compared to llvm-gcc.
Also,you might want to look into using the LLVM CodeGen
infrastructure, among other things, it provides a "legalization" pass
which transforms operations using types which the target doesn't
support into operations using types which the target supports.
-Eli
More information about the llvm-dev
mailing list