aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hipe/x86/hipe_x86_cfg.erl
diff options
context:
space:
mode:
authorMagnus Lång <[email protected]>2016-03-17 21:37:26 +0100
committerMagnus Lång <[email protected]>2016-08-30 17:17:45 +0200
commitdc4e9384c6f2f733ab0d12727ab53238bda3fbca (patch)
tree55c4d84effc98ae0bffbd9b7bc185d2d0a602ba6 /lib/hipe/x86/hipe_x86_cfg.erl
parent4b8c17b0901dfa356792c36f01d78de827cb6645 (diff)
downloadotp-dc4e9384c6f2f733ab0d12727ab53238bda3fbca.tar.gz
otp-dc4e9384c6f2f733ab0d12727ab53238bda3fbca.tar.bz2
otp-dc4e9384c6f2f733ab0d12727ab53238bda3fbca.zip
hipe_x86: Minimise CFG<->linear conversions
Most x86 passes were either linearise(pass(to_cfg(Code))) or trivially rewritable to process a CFG. This saves a great deal of time and memory churn when compiling large programs. Now, there will only ever be a single Linear->CFG conversion, just after lowering from RTL, and only ever a single CFG->Linear conversion, just before the finalise pass. Both of these now happen in hipe_x86_main.
Diffstat (limited to 'lib/hipe/x86/hipe_x86_cfg.erl')
-rw-r--r--lib/hipe/x86/hipe_x86_cfg.erl5
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/hipe/x86/hipe_x86_cfg.erl b/lib/hipe/x86/hipe_x86_cfg.erl
index ab40b68580..b9f9c711f3 100644
--- a/lib/hipe/x86/hipe_x86_cfg.erl
+++ b/lib/hipe/x86/hipe_x86_cfg.erl
@@ -24,7 +24,7 @@
-export([init/1,
labels/1, start_label/1,
succ/2, pred/2,
- bb/2, bb_add/3]).
+ bb/2, bb_add/3, map_bbs/2, fold_bbs/3]).
-export([postorder/1, reverse_postorder/1]).
-export([linearise/1, params/1, arity/1, redirect_jmp/3]).
@@ -33,6 +33,7 @@
-define(BREADTH_ORDER,true).
-define(PARAMS_NEEDED,true).
-define(START_LABEL_UPDATE_NEEDED,true).
+-define(MAP_FOLD_NEEDED,true).
-include("hipe_x86.hrl").
-include("../flow/cfg.hrl").
@@ -107,7 +108,7 @@ mk_goto(Label) ->
hipe_x86:mk_jmp_label(Label).
is_label(I) ->
- hipe_x86:is_label(I).
+ case I of #label{} -> true; _ -> false end.
label_name(Label) ->
hipe_x86:label_label(Label).