summaryrefslogtreecommitdiff
path: root/lib/hipe/x86/hipe_x86_ra_ls.erl
diff options
context:
space:
mode:
authorMagnus Lång <margnus1@telia.com>2016-09-05 14:55:01 +0200
committerMagnus Lång <margnus1@telia.com>2016-09-05 19:17:50 +0200
commitea710644b198f7800f0daf2de0d152cf8e3e9bb3 (patch)
tree46842f5dab3fcdbb4055d11ee55c28506eeac7fc /lib/hipe/x86/hipe_x86_ra_ls.erl
parent1039c0196a7e643c63ce71b2c6daa2b78b3aa832 (diff)
downloaderlang-ea710644b198f7800f0daf2de0d152cf8e3e9bb3.tar.gz
hipe: Refactor ra callbacks to accept context arg
This allows us to pass around the context data that hipe_regalloc_prepass needs cleanly, without using process dictionary or parameterised modules (like it was previous to this change).
Diffstat (limited to 'lib/hipe/x86/hipe_x86_ra_ls.erl')
-rw-r--r--lib/hipe/x86/hipe_x86_ra_ls.erl28
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/hipe/x86/hipe_x86_ra_ls.erl b/lib/hipe/x86/hipe_x86_ra_ls.erl
index be69ebd009..34ce50d494 100644
--- a/lib/hipe/x86/hipe_x86_ra_ls.erl
+++ b/lib/hipe/x86/hipe_x86_ra_ls.erl
@@ -35,21 +35,21 @@
-endif.
-module(?HIPE_X86_RA_LS).
--export([ra/4,ra_fp/4]).
+-export([ra/4,ra_fp/5]).
-define(HIPE_INSTRUMENT_COMPILER, true). %% Turn on instrumentation.
-include("../main/hipe.hrl").
ra(CFG, Liveness, SpillIndex, Options) ->
SpillLimit = ?HIPE_X86_SPECIFIC:number_of_temporaries(
- CFG),
+ CFG, no_context),
?inc_counter(bbs_counter, length(hipe_x86_cfg:labels(CFG))),
alloc(CFG, Liveness, SpillIndex, SpillLimit, Options).
-ra_fp(CFG, Liveness, Options, TargetMod) ->
+ra_fp(CFG, Liveness, Options, TargetMod, TargetCtx) ->
?inc_counter(ra_calls_counter,1),
%% ?inc_counter(ra_caller_saves_counter,count_caller_saves(CFG)),
SpillIndex = 0,
- SpillLimit = TargetMod:number_of_temporaries(CFG),
+ SpillLimit = TargetMod:number_of_temporaries(CFG, TargetCtx),
?inc_counter(bbs_counter, length(hipe_x86_cfg:labels(CFG))),
?inc_counter(ra_iteration_counter,1),
@@ -57,17 +57,17 @@ ra_fp(CFG, Liveness, Options, TargetMod) ->
{Coloring,NewSpillIndex} =
regalloc(CFG, Liveness,
- TargetMod:allocatable('linearscan'),
+ TargetMod:allocatable('linearscan', TargetCtx),
[hipe_x86_cfg:start_label(CFG)],
SpillIndex, SpillLimit, Options,
- TargetMod),
+ TargetMod, TargetCtx),
{NewCFG, _DidSpill} =
- TargetMod:check_and_rewrite(CFG, Coloring, 'linearscan'),
- TempMap = hipe_temp_map:cols2tuple(Coloring, TargetMod),
+ TargetMod:check_and_rewrite(CFG, Coloring, 'linearscan', TargetCtx),
+ TempMap = hipe_temp_map:cols2tuple(Coloring, TargetMod, TargetCtx),
{TempMap2, NewSpillIndex2} =
hipe_spillmin:stackalloc(CFG, Liveness, [], SpillIndex, Options,
- TargetMod, TempMap),
+ TargetMod, TargetCtx, TempMap),
Coloring2 =
hipe_spillmin:mapmerge(hipe_temp_map:to_substlist(TempMap), TempMap2),
?add_spills(Options, NewSpillIndex),
@@ -84,15 +84,15 @@ alloc(CFG, Liveness, SpillIndex, SpillLimit, Options) ->
?HIPE_X86_REGISTERS:temp0()],
[hipe_x86_cfg:start_label(CFG)],
SpillIndex, SpillLimit, Options,
- ?HIPE_X86_SPECIFIC),
+ ?HIPE_X86_SPECIFIC, no_context),
{NewCFG, _DidSpill} =
?HIPE_X86_RA_POSTCONDITIONS:check_and_rewrite(
CFG, Coloring, 'linearscan'),
%% ?HIPE_X86_PP:pp(NewDefun),
- TempMap = hipe_temp_map:cols2tuple(Coloring, ?HIPE_X86_SPECIFIC),
+ TempMap = hipe_temp_map:cols2tuple(Coloring, ?HIPE_X86_SPECIFIC, no_context),
{TempMap2,NewSpillIndex2} =
hipe_spillmin:stackalloc(CFG, Liveness, [], SpillIndex, Options,
- ?HIPE_X86_SPECIFIC, TempMap),
+ ?HIPE_X86_SPECIFIC, no_context, TempMap),
Coloring2 =
hipe_spillmin:mapmerge(hipe_temp_map:to_substlist(TempMap), TempMap2),
case proplists:get_bool(verbose_spills, Options) of
@@ -105,6 +105,6 @@ alloc(CFG, Liveness, SpillIndex, SpillLimit, Options) ->
{NewCFG, Liveness, Coloring2}.
regalloc(CFG, Liveness, PhysRegs, Entrypoints, SpillIndex, DontSpill, Options,
- Target) ->
+ TgtMod, TgtCtx) ->
hipe_ls_regalloc:regalloc(CFG, Liveness, PhysRegs, Entrypoints, SpillIndex,
- DontSpill, Options, Target).
+ DontSpill, Options, TgtMod, TgtCtx).