I was trying to compile a code with only integer type variables and
integer operations. Clang/llvm kept showing me llvm code with
floating-point instructions (fmul, fadd, fptosi, etc.). Is there a way
in Clang or llvm to stop the compiler from doing that? My experiment
does not allow floating-point operations...
Thanks,
Xiaochu
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
On 16 March 2016 at 11:49, Xiaochu Liu via llvm-dev
<llvm...@lists.llvm.org> wrote:
> I was trying to compile a code with only integer type variables and
> integer operations. Clang/llvm kept showing me llvm code with
> floating-point instructions (fmul, fadd, fptosi, etc.). Is there a way
> in Clang or llvm to stop the compiler from doing that? My experiment
> does not allow floating-point operations...
I think Clang's "-mno-implicit-float" is probably the option you want.
I'm very surprised you're getting real floating operations like fadd
if your source really contains no floats though (it's mostly only used
implicitly for things like memcpy). So if that doesn't work, you
should probably investigate where they're coming from more deeply.
Maybe it's some external header you've included?
Cheers.
Tim.
Thanks for your message! It turns out that the infrastructure (an
outdated one) that I am working on is using gcc+dragonegg to generate
llvm code:
gcc -m32 -S -c -O0 -fplugin=$(DRAGONEGG_SO)
-fplugin-arg-dragonegg-emit-ir $< -o $@.tmp
It directly generates llvm code with fadd, etc. I'm not familiar with
dragonegg plugin...
Thanks,
XIaochu
I'm afraid not. If libcalls do need to be used, LLVM expects to expand
them during the DAG phase. I don't *think* LLVM can do that for x86.
DragonEgg is mostly pretty unsupported these days, but you could try
giving it the "-msoft-float" option.
If GCC's frontend inserts the calls early enough, you might get away
with it. But I have no idea when that actually happens.