[llvm-dev] How to prevent clang/llvm from generating floating-point instructions?

976 views
Skip to first unread message

Xiaochu Liu via llvm-dev

unread,
Mar 16, 2016, 2:49:54 PM3/16/16
to LLVM Developers Mailing List
Dear there,

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

Tim Northover via llvm-dev

unread,
Mar 16, 2016, 3:00:35 PM3/16/16
to Xiaochu Liu, LLVM Developers Mailing List
Hi Xiaochu,

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.

Xiaochu Liu via llvm-dev

unread,
Mar 16, 2016, 6:19:06 PM3/16/16
to Tim Northover, LLVM Developers Mailing List
Hi 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

Xiaochu Liu via llvm-dev

unread,
Mar 16, 2016, 10:10:43 PM3/16/16
to Tim Northover, LLVM Developers Mailing List
I was wondering if there exists an LLVM pass that emulate floating
point operations with integers? Or simply just convert fp ops to int
ons in an approximate way... I found certain backend has software
float-point emulation support but not on IR-level.

Tim Northover via llvm-dev

unread,
Mar 16, 2016, 10:37:06 PM3/16/16
to Xiaochu Liu, LLVM Developers Mailing List
On 16 March 2016 at 19:10, Xiaochu Liu <xiaoc...@gmail.com> wrote:
> I was wondering if there exists an LLVM pass that emulate floating
> point operations with integers? Or simply just convert fp ops to int
> ons in an approximate way... I found certain backend has software
> float-point emulation support but not on IR-level.

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.

Reply all
Reply to author
Forward
0 new messages