summaryrefslogtreecommitdiffhomepage
path: root/NEWS.md
blob: 7310b8fe51495dc758b1b7aa3cd05c926135868d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
libFirm 1.22.1 (2016-01-07)
---------------------------
* make: Fix cmake/make build
* ia32: New just in time compilation mode which compiles into a memory buffer
* amd64: Support PIC with PLT for ELF
* ia32: Add `ia32-get_ip={pop,thunk}`
* ia32: Generate `mov $~1, %r; rol x, %r` for `~(1 << x)`
* ia32: Generate `mov $~0x80000000, %r; ror x, %r` for `~(0x80000000 >> x)`
* be: Stub support for the asm constraint modifier `%`
* amd64, ia32: Support the asm constraint `e`
* be: Support the asm modifier `c` in all backends
* ia32: Support JIT compilation
* be: Improve permutation moving for copy coalescing
* ir: Improve handling of negative overflow in float to int tarval conversion
* amd64: Improve matching of immediates during instruction selection
* amd64: Add peephole optimization `mov $0, %r` -> `xorl %r, %r`
* amd64: Add peephole optimization `lea c(%r), %r` -> `add $c, %r`
* amd64: Add peephole optimization `lea (%r1, %r2), %r1` -> `add %r2, %r1` and the commutated case
* ia32: Add peephole optimization `lea c(, %i, 2), %d` -> `lea c(%i, %i), %d`
* ia32: Add peephole optimization `lea (%b), %d` -> `mov %b, %d`
* ia32: Add peephole optimization `testl $0x0000XX00, %eRx` -> `testb $0xXX, %Rh`
* ia32: Generate slightly better code to load the floating-point constants `-0.0` and `-1.0`
* amd64: Reduce number of stack adjustments
* api: Set the length of an array type solely when creating the array type
* api: Set whether a function type is variadic and its calling convention and additional properties solely when creating the function type
* api: Automatically infer the mode when creating Add, And, Div, Eor, Minus, Mod, Mul, Mulh, Mux, Not, Or, Shl, Shr, Shrs and Sub nodes
* api: Remove the notion of atomic entities, use the initializer access functions instead
* api: Remove visibility from types
* api: Remove the type flag `tf_variable_size`, test the array size for 0 instead
* api: Remove `plist`, use `pdeq` instead
* api: Remove `get_{class,segment,struct,union}_{ident,name}()`, use `get_compound_{ident,name}()` instead
* ir: Improve IR graph verifier
* arm: Improve address mode use in instruction selection
* be, ir: Improve preservation of debug info during transformations
* amd64: Improve use of `lea` in instruction selection
* sparc: Support the asm constaint `K`
* sparc: Support computed goto
* arm: Support computed goto
* opt: Simplify computed goto with known destination to unconditional branch
* opt: Handle constant folding for the builtins `clz`, `ctz`, `ffs`, `parity` and `popcount`
* arm: Avoid redundant sign/zero extension right after a load
* amd64, arm: Avoid redundant sign/zero extension right before a store
* amd64: Avoid redundant sign/zero extension for truncation
* amd64: Mark floating point constants as candidates for rematerialization
* amd64: Improve block schedule by removing empty basic blocks
* amd64: Use cltd/cqto for sign extension before a division
* amd64: Use store with immediate for call arguments
* opt: Add local optimization `a * b [-1 <= b <= 0] -> -(a & b)`
* sparc: More strict checking of modifiers of placeholders in asm templates
* arm: Support inline asm with with constraints `I`, `J`, `K`, `L`, `M`, `Q`, `g`, `i`, `l`, `m`, `n` and `r` as well as modifiers `B`, `C` and `c`
* mips: Add new backend
* be: By default permutation lowering now uses copy instead swap
* amd64: Improve code generation for `v & 0xFF/0xFFFF/0xFFFFFFFF`
* amd64, ia32: Always use potentially smaller address mode c(x,x,1) instead of c(,x,2)
* opt: Add local optimization `a >>s b >>u (n - 1) -> a >>u (n - 1)`
* ia32: Improve code generation for 64 bit multiplication if the lower half of a factor is 0 or 1
* amd64: Add peephole optimization `cmp $0, %r` -> `test %r, %r`
* amd64, ia32: Support the asm operand modifiers `A`, `P`, `X` and `p`
* be: Accept `#` and `%` as register name prefix for gcc compatibility
* arm, mips, sparc: Handle clobbers in asm
* riscv: Add new backend
* be: Improve modelling of register demand
* amd64, ia32: Support all address modes in inline asm
* ir, be: Support `asm goto`; even allow output constraints, which gcc and clang do not
* Bugfixes

libFirm 1.22.0 (2015-12-31)
---------------------------
* Improved PIC support, linux/elf is now supported
* Many additional local optimization rules (instcombine)
* Inline assembly support for sparc/amd64
* Improved constant bit analysis
* Improved load/store optimization, featuring compound value optimizations
* Improved reassociation pass
* Improved amd64 (aka x86_64) backend, it is now able to bootstrap libfirm
* Improved arm backend (but still experimental)
* Improved inliner (can inline compound types)
* Compiletime performance improvements
* Cleanups and API simplifications
* Switch to C99 and corresponding code cleanup and simplification
* More details in dumped IR graphs
* Streamlined IR
* Improved IR graph verifiers
* Further unify backend infrastructure
* Support for arrays as parameter and return types
* Updated documentation
* Perform precise 80bit spilling for x87 floating point
* Improved permutation decomposition for copy coalescing
* Added bitwise 'don't care' analysis and use it for optimizing occult constants
* Support builtin 'saturating increment' (amd64, ia32, sparc)
* Improved generated code for division by constant
* Support builtin 'compare and swap' (amd64, ia32, sparc)
* Support alias entities
* Improved scalar conversion optimization
* Added store combine optimization
* Overhauled representation and handling of infinite loops
* Improved use of flag results generated as side effect of instructions (ia32)
* Improved calculation of execution frequency estimation for large graphs
* Improved instruction selection (amd64, arm, ia32, sparc)
* Improved x87 floating point code generation
* Support early clobbers in inline assembly
* Support x87 constraints in inline assembly (ia32)
* Support `__attribute__((visibility("hidden")))` and `__attribute__((visible("protected")))`
* Optionally use CMake as build system
* Support `make install` with the usual variables (INSTALLPREFIX, ...)
* Bugfixes

libFirm 1.21.0 (2012-11-16)
---------------------------
* Improvements of x86 backend (esp. x87 floatingpoint code)
* Improvements to sparc backend (better use of delay slots)
* Improved local optimization rules (esp. conversions)
* Make compiler more deterministic
* Bugfixes

libFirm 1.20.0 (2011-12-07)
---------------------------

* Further improvemens to sparc backend (SPEC2000 works with softfloat)
* Tuning of x86 backend
* Software floatingpoint lowerer
* Fixed firm profiling
* New pass management allowing to specify pre-/postconditions for passes
* Remove dependency on liblpp, add support for gurobi ILP solver
* Experimental dwarf debugging support
* Code cleanups, refactoring
* Restructured API documentation
* Bugfixes (we did a lot of csmith testing)

libFirm 1.19.1 (2011-05-17)
---------------------------

* Fix some set_XXX functions not being exported in the shared library

libFirm 1.19.0 (2011-03-15)
---------------------------

* Includes "SSA-Based Register Allocation with PBQP"
* Improved Sparc backend
* New (optimistic) fixpoint based value-range propagation/bit analysis
* Code cleanup and refactoring
* Bugfixes

libFirm 1.18.1 (2010-05-05)
---------------------------

* Fix bug where stackframe was not always setup for -fno-omit-frame-pointer
* bugfixes in Asm handling

libFirm 1.18.0 (2010-04-15)
---------------------------

* Includes "Preference Guided Register Assignment" algorithm
* Experimental Value Range Propagation
* Loop Inversion and experimental Loop Unrolling code
* Simplified construction interface. Most node constructors don't need graph/block arguments anymore.
* Reworked type interface. Type names are optional now. Support for additional linkage types that among others support C++ 'linkonce' semantics now.
* Small changes in constructors and node getters/setters (mostly adding 'const' to some getters)
* code cleanup, smaller improvements in API specification
* bugfixes

libFirm 1.17.0 (2009-05-15)
---------------------------

* bugfixes
* advanced load/store optimization which hoists loads out of loops
* Internal restruturing: Alot of node structures are automatically generated
   from a specification file now.
* Add support for multiple calling conventions
* New experimental support for reading and writing programgraphs to disk
* Support and optimizations for trampolines
* fix PIC support

libFirm 1.16.0 (2009-01-28)
---------------------------

* bugfixes
* support for builtin nodes

libFirm 1.15.0 (2008-12-01)
---------------------------
* bugfixes

libFirm 1.14.0 (2008-11-22)
---------------------------

* Implementation of Clicks Combined Analysis/Optimizations
* New switch lowering code
* support for global asm statements
* improved asm support
* PIC support for Mac OS X
* New register pressure minimizing scheduler
* Improvements to spill algorithm
* fix endless loop problems
* further improve inlining heuristics
* improve peephole optimizations for x86
* bugfixes

libFirm 1.13.0 (2008-07-31)
---------------------------

* VanDrunen's GVN-PRE fixed
* operator strength reduce fixed and improved
* fixed 64bit code generation for some rare compare cases
* better tailrecursion optimization: handles x * func() and x + func()
* improved inliner: better heuristics for inlining, can now inline recursive calls
* improved spiller
* lowering of CopyB nodes
* better memory disambiguator
* float->64bit conversion fixed for x87
* removed old verbosity level based debugging: all modules use the new debug facility
* Improved Confirm based optimization and conditional evaluation (using Confirm nodes)
* BugFixes: tail recursion, load/store optimization, lowering of structure return, conditional
  evaluation, removal of unused methods
* reduced numer of indirections for backend operation
* ia32 Backend: supports more CPU architectures
* ARM Backend: fixed frame access
* support for special segments (like constructors, destructors)

libFirm 1.12.1 (2008-02-18)
---------------------------

* bugfixes for new style initializers with bitfield types
* make lowerer look at constant initializers too

libFirm 1.12.0 (2008-02-14)
---------------------------

* dependency on libcore and libobstack dropped
* there's an alternative easier to use way to construct compound initializers
* bugfixes
* improved support for exceptions
* speed improvements
* optimization of known libc functions

libFirm 1.11.0 (2008-11-05)
---------------------------

* Lots of bugfixes
* Compilation speed improved
* Completely improved and rewritten handling of x86 address mode
* Optimized Mul -> Lea,Shift,Add transformation
* 64bit operations fixed and improved
* More local optimizations
* New backend peephole optimizations
* Explicit status flag modeling (only for x86 for now)
* Improvements of Load/Store optimization and alias analysis
* All C benchmarks from Spec CINT2000 work now (with our edg frontend)