diff options
author | Xavier Leroy <xavier.leroy@college-de-france.fr> | 2020-12-15 19:29:29 +0100 |
---|---|---|
committer | Xavier Leroy <xavierleroy@users.noreply.github.com> | 2021-01-13 14:45:05 +0100 |
commit | 7f152e2f27d82f0d502ee919e1576edefcd44cf5 (patch) | |
tree | 36cf28dd969faccc7635b8a259860ab62db1604d /test/regression | |
parent | e16f5d1de08bb0c3ac561c2ea6a98f49ed8f49d5 (diff) | |
download | compcert-7f152e2f27d82f0d502ee919e1576edefcd44cf5.tar.gz compcert-7f152e2f27d82f0d502ee919e1576edefcd44cf5.zip |
Improve branch tunneling
The previous branch tunneling was missing optimization opportunities
introduced by the optimization of conditional branches. For example:
L1: instr; branch L2
L2: if cond then branch L3 else branch L4
L3: branch L4
L4: ...
was transformed into
L1: instr; branch L2
L2: branch L4
L3: branch L4
L4: ...
missing a tunneling opportunity (branch L2 -> branch L4).
This commit improves branch tunneling so that the expected code is produced:
L1: instr; branch L4
L2: branch L4
L3: branch L4
L4: ...
To this end, additional equalities are introduced in the union-find
data structure corresponding to optimizable conditional branches.
In rare cases these additional equalities trigger new opportunities for
optimizing conditional branches. Hence we iterate the analysis
until no optimizable conditional branch remains.
Diffstat (limited to 'test/regression')
0 files changed, 0 insertions, 0 deletions