Age | Commit message (Collapse) | Author |
|
The {list,List,Dst} instruction gives us as general way to
capture the building of something into a variable. That will make
inlining of intermediate code much easier.
It also allows us to eliminate the versions of the apply, call_gen,
and cond instructions that takes a target variable.
Also remove the optimization in the alignment optimization pass
that attempts to replace calls to complete/1 with calls to
iolist_to_binary/1. That optimization will not work anymore without
rewriting, so we will remove it in this commit and introcude a
more powerful optimization in a future commit.
|
|
Instead of generating:
{assign,Dst,"element(2, Val)"}
generate:
{call,erlang,element,[2,{var,"Val"}],Dst}
The latter expression is easier to understand since there is no
need to parse a string which may contain an arbitrary expression.
While at it, also discontinue the practice to treat "naked"
atoms as variables. A variable must always be given as {var,String}.
|
|
The {assign,Dst,Src} instruction is difficult to cope with when
doing advanced optimizations, since its source argument is a string
which may contain any expression.
Instead of changing how {assign,_,_} works, we will introduce new
instructions that can be used instead of {assign,_}, and remove
{assign,_,_} in a later commit when it is no longer used.
The first new instruction we will introduce is:
{set,{var,Src},{var,Dst}}
It is useful for common sub-expression elemination among other things.
For the moment, we will only allow a variable as a source argument,
but we could extend it in the future to allow constants as well.
|
|
To facilitate inlining of apply calls in the intermediate format.
|
|
It will greatly facilitate further optimizations if we include the
intermediate code (if available) in the call_gen tuple.
|
|
|
|
|
|
|
|
Make sure that we don't construct:
{cons,{integer,I},{cons,{binary,B},T}} - OR -
{cons,{binary,B},{cons,{integer,I},T}}
but:
{cons,{binary,[{put_bits,I,8,[1]}|B]},T} - OR -
{cons,{binary,B++[{put_bits,I,8,[1]}]},T}
|
|
The function name could contain hyphens or other characters not
allowed in non-quoted function names.
|
|
|
|
|
|
* bjorn/compiler/optimizations/OTP-11584:
Generalize optimizations of case statements
Ignore warnings when running sys_core_fold after inlining
|
|
* bjorn/fix-line-number-in-bs-exception/OTP-11572:
compiler: Correct line number in exception from binary construction
|
|
* bjorn/compiler/fix-lift-after/OTP-11580:
compiler: Silence false warning for unmatched return in 'after' clause
|
|
* egil/etp-commands/OTP-11582:
erts: Update etp-commands with heap-dump
|
|
* egil/fix-bs_get_integer/OTP-11581:
erts: Fix bs_get_integer instruction
|
|
Because 26940a8c0c lifted code in the 'after' clause of 'try' to
a new function, Dialyzer could produce false warnings for code such
as:
try
...
after
file:close(F)
end.
Mark the the call to the generated function as 'compiler_generated'
to silence the warning.
|
|
* fenollp/escript-doc-chmod:
Add a chmod call in the CLI example
OTP-11577
|
|
* RoadRunnr/ecdh_crypto:
crypto: selective support for GF2m curves
ssl: add brainpool elliptic curves to TLS (RFC-7027)
public_key: add brainpool elliptic curves (RFC-5639)
crypto: document ec_curves/0 and ec_curve/1
crypto: add brainpool (RFC 5639) curves
crypto: move elitic curve definitions from OpenSSL built-ins to Erlang
crypto: add ECDH test vectors for more curves
OTP-11578
|
|
* rickard/ts_install_mXX_build:
Teach ts_install --enable-mXX-build flag
|
|
Pick up --enable-m32-build and --enable-m64-build configure
flags from the CONFIG_FLAGS environment variable and pass
along to the ts configure script.
|
|
|
|
Case expressions such as:
case {Expr1,Expr} of
{V1,V2} -> ...
end
are already optimized to not actually build the tuple. Generalize
the optimization to avoid building any kind of composite term,
such as:
case {ok,[A,B]} of
{ok,[X,Y]} -> ...
end
We don't expect programmers to write such code directly, but
inlining can produce such code.
We need to be careful about the warnings we produce. If the case
expression is a literal, it is expected that no warnings should be
produced for clauses that don't match. We must make sure that we
continue to suppress those warnings.
|
|
Reported-by: Stanislav Seletskiy
|
|
* nox/odbcserver-tolower:
Include ctype.h in odbcserver.c for tolower()
OTP-11569
|
|
* puzza007/remove-query-reserved-word-from-emacs-mode:
remove support for query keyword from emacs mode
OTP-11568
|
|
|
|
* ad/ssh_expand_test:
fix calculation of variable thanks to Alexander Demidenko
OTP-11566
|
|
* weisslj/fix-epmd-names-win32:
epmd: Fix -names option on Windows
OTP-11565
|
|
Since 3aa60cc `epmd -names` does not produce any output on Windows
anymore. This patch uses fwrite() instead of write() which adds the
necessary carriage returns to the output so that it is suitable for the
Windows cmd.exe.
A test case is added (fails on Windows without the patch).
|
|
* weisslj/fix-hipe-no-remove-comments:
hipe: Fix compilation with 'no_remove_comments'
OTP-11564
|
|
* rickard/otp-17-vsn-fix:
Fix issues with new versioning
|
|
Newer OpenSSL versions allow to selectively disable GF2m elliptic curves.
Selectively enable GF2m curves is support for them is available.
|
|
|
|
|
|
|
|
RFC-5649, Section 1, documents the advantages that these curves
might have over others (ANSI, SEC1/2)
|
|
Decouple eliptic curve definition from OpenSSL and define them in
Erlang.
|
|
Vectors have been taken from NIST's CRYPTOGRAPHIC ALGORITHM VALIDATION
PROGRAM (CAVP) (http://csrc.nist.gov/groups/STM/cavp/)
|
|
* lukas/erts/win-icon/OTP-11560:
erts: Update windows erlang icon
|
|
* lukas/erts/fix_sp_usage_printout/OTP-11559:
erts: Replace tab with space for proper alignment
|
|
* lukas/erts/fd0_pipe_bug/OTP-11558:
erts: Make sure fds 0,1 and 2 are open
|
|
If they are not open a really nasty race where the io pipe in
erl_poll got fd 0 and the fd_driver setting fd 0 to blocking
could occur. This caused the emulator to hang during shutdown.
|
|
|
|
odbcserver.c:2772:12: warning: implicit declaration of function 'tolower' is invalid in C99
[-Wimplicit-function-declaration]
str[i] = tolower(str[i]);
^
|
|
|
|
thanks to Alexander Demidenko
|
|
To reproduce the error:
$ echo '-module(hello).' > hello.erl
$ erl
1> c(hello, [native,{hipe,[no_remove_comments]}]).
[...]
<HiPE (v 3.10.2.1)> Error: [hipe:834]: ERROR: {{case_clause,
{icode_comment,call_ext_only}},
[{hipe_icode,successors,1,
[{file,"hipe_icode.erl"},
{line,1444}]},
[...]
|
|
|