31
31
<p>This document describes the changes made to HiPE.</p>
33
<section><title>Hipe 3.9</title>
35
<section><title>Fixed Bugs and Malfunctions</title>
39
<list> <item><p>No warnings for underspecs with remote
40
types</p></item> <item><p> Fix crash in Typer</p></item>
41
<item><p>Fix Dialyzer's warning for its own
42
code</p></item> <item><p>Fix Dialyzer's warnings in
43
HiPE</p></item> <item><p>Add file/line info in a
44
particular Dialyzer crash</p></item> <item><p>Update
45
inets test results</p></item> </list></p>
51
<list> <item><p>Correct callback spec in application
52
module</p></item> <item><p>Refine warning about callback
53
specs with extra ranges</p></item> <item><p>Cleanup
54
autoimport compiler directives</p></item> <item><p>Fix
55
Dialyzer's warnings in typer</p></item> <item><p>Fix
56
Dialyzer's warning for its own code</p></item>
57
<item><p>Fix bug in Dialyzer's behaviours
58
analysis</p></item> <item><p>Fix crash in
59
Dialyzer</p></item> <item><p>Variable substitution was
60
not generalizing any unknown variables.</p></item>
69
<section><title>Improvements and New Features</title>
73
Possible to run HiPE without floating point exceptions
74
(FPE). Useful on platforms that lack reliable FPE. Slower
75
float operations compared to HiPE with FPE.</p>
81
HiPE compiler: The possibility to compile and load
82
selected functions from a module has been removed.</p>
84
*** POTENTIAL INCOMPATIBILITY ***</p>
90
<c>filename:find_src/1,2</c> will now work on stripped
91
BEAM files (reported by Per Hedeland). The HiPE compiler
92
will also work on stripped BEAM files. The BEAM compiler
93
will no longer include compilation options given in the
94
source code itself in <c>M:module_info(compile)</c>
95
(because those options will be applied anyway if the
96
module is re-compiled).</p>
101
<p> Optimize <c>erl_types:t_unify()</c>. </p>
110
<section><title>Hipe 3.8.1</title>
112
<section><title>Fixed Bugs and Malfunctions</title>
116
Clean up hipe.hrl.src (Thanks to Tuncer Ayaz)</p>
122
Fix bug with binary pattern matching of floats of
125
Pattern matching of floats with variable size
126
(<<F:S/float>>) did always fail. Judging from
127
similar code for ints, this bug is simply a typo.(Thanks
134
Quote atoms if necessary in types</p>
136
Atoms in some occurrences were not correctly quoted when
137
formatted to strings, for instance by the typer program
138
(Thanks to Tomas Abrahamsson)</p>
140
Update Dialyzer's reference results</p>
146
Fix typer's crash for nonexisting files Remove unused
147
macro Fix bug in dataflow Decrease tuple arity limit This
148
fixes a memory related crash.</p>
156
<section><title>Improvements and New Features</title>
160
Types for several BIFs have been extended/corrected. Also
161
the types for types for <c>lists:keyfind/3</c>,
162
<c>lists:keysearch/3</c>, and <c>lists:keyemember/3</c>
163
have been corrected. The incorrect/incomplete types could
164
cause false dialyzer warnings.</p>
173
<section><title>Hipe 3.8</title>
175
<section><title>Fixed Bugs and Malfunctions</title>
179
Fix hipe bug causing minor heap corruption related to
180
binary matching. The bug has not been confirmed as the
181
cause of any actual fault symptom.</p>
187
Enable HiPE by default when compiling for PPC64</p>
193
Fix handling of <<_:N,_:_*M>> type
194
expressions Fix the argument of
195
erlang:list_to_bitstring/1 Remove unneeded function
196
'sequence/2' Same functionality provided by
206
<section><title>Hipe 3.7.9</title>
208
<section><title>Fixed Bugs and Malfunctions</title>
212
Fix erroneous fail info of a hipe_bs_primop</p>
218
The change fixes a bug in the translation of 'bs_add'
219
BEAM instruction to HiPE's Icode representation. When
220
these instructions appeared in a guard context the
221
previous translation was obviously buggy.</p>
227
Sanitize the specs of the code module</p>
229
After the addition of unicode_binary() to the
230
file:filename() type, dialyzer started complaining about
231
erroneous or incomplete specs in some functions of the
232
'code' module. The culprit was hard-coded information in
233
erl_bif_types for functions of this module, which were
234
not updated. Since these functions have proper specs
235
these days and code duplication (pun intended) is never a
236
good idea, their type information was removed from
239
While doing this, some erroneous comments were fixed in
240
the code module and also made sure that the code now runs
241
without dialyzer warnings even when the
242
-Wunmatched_returns option is used.</p>
244
Some cleanups were applied to erl_bif_types too.</p>
250
Fix bug in the simplification of inexact comparisons</p>
252
On 31/1/2011 Paul Guyot reported a bug in the native code
253
compilation of inexact equality/inequality tests between
254
floats and integers. The relevant test was:</p>
256
f(X) -> Y = X / 2, Y == 0.</p>
258
and hipe erroneously evaluated the calls f(0) and f(0.0)
261
The culprit was in the simplification code of the Icode
262
range analysis which used an erroneous test (lists:any/1
263
instead of lists:all/1).</p>
269
Document exiting and garbage_collecting process statuses</p>
275
Remove hipe constants pool</p>
277
Hipe constants used to be allocated within a single,
278
fixed-size pool for interaction with the garbage
279
collector. However, the garbage collector no longer
280
depends on constants being allocated within a single
281
pool, and the fixed size of the pool both meant
282
unnecessary allocations on most deployments and crashes
283
on deployments requiring more constants.</p>
285
The code was simplified to directly invoke erts_alloc.
286
Debugging and undocumented function
287
hipe_bifs:show_literals/0 was removed (it returned true
288
and output text to the console), and debugging and
289
undocumented function hipe_bifs:constants_size/0 was
290
rewritten with a global to count the size of allocated
300
<section><title>Hipe 3.7.8.1</title>
302
<section><title>Fixed Bugs and Malfunctions</title>
306
Several type specifications for standard libraries were
307
wrong in the R14B01 release. This is now corrected. The
308
corrections concern types in re,io,filename and the
309
module erlang itself.</p>
33
318
<section><title>Hipe 3.7.8</title>
35
320
<section><title>Improvements and New Features</title>