aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src/genop.tab
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2018-01-25 10:09:59 +0100
committerBjörn Gustavsson <[email protected]>2018-01-26 15:57:57 +0100
commitfbcff5a137e37edd80aca9c5fe18ce6880648169 (patch)
treefb846d82599a3e52230f1b028b59f63cb0dd09ec /lib/compiler/src/genop.tab
parent5b58d9e2d3262160b7f10d8b6798f89f0618c5f6 (diff)
downloadotp-fbcff5a137e37edd80aca9c5fe18ce6880648169.tar.gz
otp-fbcff5a137e37edd80aca9c5fe18ce6880648169.tar.bz2
otp-fbcff5a137e37edd80aca9c5fe18ce6880648169.zip
Eliminate get_list/3 internally in the compiler
Instructions that produce more than one result complicate optimizations. get_list/3 is one of two instructions that produce multiple results (get_map_elements/3 is the other). Introduce the get_hd/2 and get_tl/2 instructions that return the head and tail of a cons cell, respectively, and use it internally in all optimization passes. For efficiency, we still want to use get_list/3 if both head and tail are used, so we will translate matching pairs of get_hd and get_tl back to get_list instructions.
Diffstat (limited to 'lib/compiler/src/genop.tab')
-rwxr-xr-xlib/compiler/src/genop.tab10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/compiler/src/genop.tab b/lib/compiler/src/genop.tab
index d59bb241a8..a47d4e8cf7 100755
--- a/lib/compiler/src/genop.tab
+++ b/lib/compiler/src/genop.tab
@@ -564,3 +564,13 @@ BEAM_FORMAT_NUMBER=0
## exception, but store the atom 'badarg' in x(0) and execute the
## next instruction.
161: raw_raise/0
+
+## @spec get_hd Source Head
+## @doc Get the head (or car) part of a list (a cons cell) from Source and
+## put it into the register Head.
+162: get_hd/2
+
+## @spec get_tl Source Tail
+## @doc Get the tail (or cdr) part of a list (a cons cell) from Source and
+## put it into the register Tail.
+163: get_tl/2