aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2015-06-29 15:56:44 +0200
committerBjörn Gustavsson <[email protected]>2015-07-03 14:34:59 +0200
commita52bd8a9ebece53c67024e3ad17a899c22cea2ec (patch)
tree55775913d18ac2942a98b99c95a8369e6a4a9ff3 /erts
parent0a4750f91c837d6a68b5a9ad58ffb1fe52b67d71 (diff)
downloadotp-a52bd8a9ebece53c67024e3ad17a899c22cea2ec.tar.gz
otp-a52bd8a9ebece53c67024e3ad17a899c22cea2ec.tar.bz2
otp-a52bd8a9ebece53c67024e3ad17a899c22cea2ec.zip
Ensure that the move_call_ext_{last,only} instructions are used
Update transformations to ensure that the move_call_ext_last and move_call_ext_last are used.
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/beam/ops.tab23
1 files changed, 8 insertions, 15 deletions
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab
index 386de0a658..18202a4200 100644
--- a/erts/emulator/beam/ops.tab
+++ b/erts/emulator/beam/ops.tab
@@ -76,17 +76,6 @@ return
# with the following call instruction, we need to make sure that
# there is no line/1 instruction between the move and the call.
#
-
-move S X0=x==0 | line Loc | call_ext Ar Func => \
- line Loc | move S X0 | call_ext Ar Func
-move S X0=x==0 | line Loc | call_ext_last Ar Func=u$is_bif D => \
- line Loc | move S X0 | call_ext_last Ar Func D
-move S X0=x==0 | line Loc | call_ext_only Ar Func=u$is_bif => \
- line Loc | move S X0 | call_ext_only Ar Func
-move S X0=x==0 | line Loc | call Ar Func => \
- line Loc | move S X0 | call Ar Func
-
-#
# A tail-recursive call to an external function (non-BIF) will
# never be saved on the stack, so there is no reason to keep
# the line instruction. (The compiler did not remove the line
@@ -94,10 +83,14 @@ move S X0=x==0 | line Loc | call Ar Func => \
# BIFs and ordinary Erlang functions.)
#
-line Loc | call_ext_last Ar Func=u$is_not_bif D => \
- call_ext_last Ar Func D
-line Loc | call_ext_only Ar Func=u$is_not_bif => \
- call_ext_only Ar Func
+move S X0=x==0 | line Loc | call_ext Ar Func => \
+ line Loc | move S X0 | call_ext Ar Func
+move S X0=x==0 | line Loc | call_ext_last Ar Func=u$is_not_bif D => \
+ move S X0 | call_ext_last Ar Func D
+move S X0=x==0 | line Loc | call_ext_only Ar Func=u$is_not_bif => \
+ move S X0 | call_ext_only Ar Func
+move S X0=x==0 | line Loc | call Ar Func => \
+ line Loc | move S X0 | call Ar Func
line Loc | func_info M F A => func_info M F A | line Loc