[erlang-questions] compile:file

Björn Gustavsson bgustavsson@REDACTED
Wed Aug 3 16:08:39 CEST 2011

On Mon, Aug 1, 2011 at 3:41 PM, Andrew Kondratovich
<andrew.kondratovich@REDACTED> wrote:
> Hi.
> Docs says, that compile:file("m.erl", ['S']) produces a listing of the
> assembler code in the file m.S.
> Also, docs says, that compile:file("m.S", [asm]) compiles the code
> from input file, which is expected to be assembler code.
> So, these two steps identically to simple compile:file("m.erl").

Yes, except that optimizations are run twice, and that causes
problems in this case.

> But, why I can't to compile code from assembler, when it has
> operations with floating points. For example:

The floating point optimization pass introduces instructions
that the earlier live optimization pass does not handle. That
only becomes a problem if the optimizations are run twice.

Use the no_postopt option to prevent assembly language
optimizations from being run twice:

compile:file("m.S", [asm,no_postopt]).

Note that there are test cases (e.g. guard_SUITE:tuple_size/1)
that depend on optimizations being run even when the input
file is assembly code, so I cannot simply change the 'asm'
options not to run the optimizations passes.

Björn Gustavsson, Erlang/OTP, Ericsson AB

More information about the erlang-questions mailing list