summaryrefslogtreecommitdiffstats
path: root/RELEASES.md
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2016-06-11 10:20:38 -0400
committerTavian Barnes <tavianator@tavianator.com>2016-06-11 10:20:38 -0400
commitb0d923ffd5feb4a1d432082718857ead67c9b49d (patch)
tree3ade306881cd55421b4882b668f4b16a97468be8 /RELEASES.md
parent88cc26afec80dae40d8e08de0e6db6c308e64f79 (diff)
downloadbfs-b0d923ffd5feb4a1d432082718857ead67c9b49d.tar.xz
RELEASES.md: Be less verbose about optimization levels.
Diffstat (limited to 'RELEASES.md')
-rw-r--r--RELEASES.md41
1 files changed, 7 insertions, 34 deletions
diff --git a/RELEASES.md b/RELEASES.md
index 3d75210..cdfd778 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -10,41 +10,14 @@
62/76 GNU find features supported.
- Rework optimization levels
- - `-O1` (logical simplification):
- - Constant propagation (`! -false <==> -true`, `! -true <==> -false`)
- - Double negation (`! ! X <==> X`)
- - Conjunction elimination:
- - `-true -a X <==> X`
- - `X -a -true <==> X`
- - Disjunctive syllogism:
- - `-false -o X <==> X`
- - `X -o -false <==> X`
- - Short-circuiting:
- - `-false -a X <==> -false`
- - `-true -o X <==> -true`
- - De Morgan's laws (**new**):
- - `( ! X -a ! Y ) <==> ! ( X -o Y )`
- - `( ! X -o ! Y ) <==> ! ( X -a Y )`
- - `! ( X -a ! Y ) <==> ( ! X -o Y )`
- - `! ( X -o ! Y ) <==> ( ! X -a Y )`
- - `! ( ! X -a Y ) <==> ( X -o ! Y )`
- - `! ( ! X -o Y ) <==> ( X -a ! Y )`
- - Unused result (**new**): `! X , Y <==> X , Y`
- - `-O2` (purity):
- - (These optimizations take the purity of predicates into account, allowing side-effect-free tests like `-name` or `-type` to be moved or removed)
- - `PURE -a -false <==> -false`
- - `PURE -o -true <==> -true`
- - `PURE , X <==> X`
- - Top-level unused result (**new**): `X (-a|-o|,) PURE <==> X`
- - `-O3` (cost-based, **default**):
+ - `-O1`
+ - Simple boolean simplification
+ - `-O2`
+ - Purity-based optimizations, allowing side-effect-free tests like `-name` or `-type` to be moved or removed
+ - `-O3` (**default**):
- Re-order tests to reduce the expected cost (TODO)
- - `-O4` (aggressive):
- - (These are very aggressive optimizations that may have surprising effects on warning/error messages and runtime, but still should not affect the resulting output)
- - Change top-level expressions with no actions to `-false` (**new**):
- - For example, `bfs -O4 -true -o -print` becomes `-false`, because `-print` is unreachable
- - Skip the entire traversal if the top-level expression is `-false`
- - `bfs -O4 -false` (or anything that optimizes to `-false`) will exit immediately
- - This may cause messages about non-existent files, symbolic link cycles, etc. to be skipped
+ - `-O4`
+ - Aggressive optimizations that may have surprising effects on warning/error messages and runtime, but should not otherwise affect the results
- `-Ofast`:
- Always the highest level, currently the same as `-O4`
- Color files with multiple hard links correctly