aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hipe/regalloc/hipe_x86_specific.erl
diff options
context:
space:
mode:
authorMagnus Lång <[email protected]>2016-05-28 20:22:34 +0200
committerMagnus Lång <[email protected]>2016-09-02 15:04:45 +0200
commit85bd166647e7f260fd665eb44da9151c0d88f208 (patch)
tree84878ab624fcc22246bae89b75a6857415508539 /lib/hipe/regalloc/hipe_x86_specific.erl
parentc2f8b61ca3682281752fa0984699214dfcbf7ccd (diff)
downloadotp-85bd166647e7f260fd665eb44da9151c0d88f208.tar.gz
otp-85bd166647e7f260fd665eb44da9151c0d88f208.tar.bz2
otp-85bd166647e7f260fd665eb44da9151c0d88f208.zip
hipe: Add hipe_regalloc_prepass
hipe_regalloc_prepass speeds up register allocation by spilling any temp that is live over a call (which clobbers all register). In order to detect these, a new function was added to the target interface; defines_all_alloc/1, that takes an instruction and returns a boolean.
Diffstat (limited to 'lib/hipe/regalloc/hipe_x86_specific.erl')
-rw-r--r--lib/hipe/regalloc/hipe_x86_specific.erl3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/hipe/regalloc/hipe_x86_specific.erl b/lib/hipe/regalloc/hipe_x86_specific.erl
index f1007c95ed..2720af92c1 100644
--- a/lib/hipe/regalloc/hipe_x86_specific.erl
+++ b/lib/hipe/regalloc/hipe_x86_specific.erl
@@ -47,6 +47,7 @@
liveout/2,
uses/1,
defines/1,
+ defines_all_alloc/1,
def_use/1,
is_arg/1, % used by hipe_ls_regalloc
is_move/1,
@@ -176,6 +177,8 @@ defines(I) ->
hipe_x86:temp_is_allocatable(X),
hipe_x86:temp_type(X) =/= 'double'].
+defines_all_alloc(I) -> ?HIPE_X86_DEFUSE:insn_defs_all(I).
+
is_move(Instruction) ->
case hipe_x86:is_move(Instruction) of
true ->