aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2016-04-08 20:38:35 +0200
committerBjörn Gustavsson <[email protected]>2016-04-14 12:00:22 +0200
commitf2d068bb92b49360e04c7150a643f1f9026c288d (patch)
treebc0e25738aad76b4afc619fa130520a156004878
parent93c476e258a20899cf6c20fb75e3ebe6f37d5d80 (diff)
downloadotp-f2d068bb92b49360e04c7150a643f1f9026c288d.tar.gz
otp-f2d068bb92b49360e04c7150a643f1f9026c288d.tar.bz2
otp-f2d068bb92b49360e04c7150a643f1f9026c288d.zip
Use the register map in %live in beam_utils:is_killed_block/2
In 1f0ae04d374, a complete register map was introduced in the %live instructions thar are added by beam_utils:live_opt/1. Use the register map to improve beam_utils:is_killed_block/2.
-rw-r--r--lib/compiler/src/beam_utils.erl4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index eed4caf93f..fdd0020261 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -581,9 +581,9 @@ check_killed_block(R, [{set,Ds,Ss,_Op}|Is]) ->
false -> check_killed_block(R, Is)
end
end;
-check_killed_block(R, [{'%live',Live,_}|Is]) ->
+check_killed_block(R, [{'%live',_,Regs}|Is]) ->
case R of
- {x,X} when X >= Live -> killed;
+ {x,X} when (Regs bsr X) band 1 =:= 0 -> killed;
_ -> check_killed_block(R, Is)
end;
check_killed_block(_, []) -> transparent.