aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src/beam_validator.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2018-09-05 13:25:28 +0200
committerGitHub <[email protected]>2018-09-05 13:25:28 +0200
commit66b797b4aeca486f515d96c1677cc633ce12a5d3 (patch)
tree1d5d55a26a42a97b1f052fa87cfe772e212b6775 /lib/compiler/src/beam_validator.erl
parent092f4847f489cba0381676a6a389ddbfc2af4f1e (diff)
parent47a2ff39ac75c69b41f90f05a63fd9a2e6c0b36a (diff)
downloadotp-66b797b4aeca486f515d96c1677cc633ce12a5d3.tar.gz
otp-66b797b4aeca486f515d96c1677cc633ce12a5d3.tar.bz2
otp-66b797b4aeca486f515d96c1677cc633ce12a5d3.zip
Merge pull request #1947 from bjorng/bjorn/opt-put-tuple
Introduce a put_tuple2 instruction
Diffstat (limited to 'lib/compiler/src/beam_validator.erl')
-rw-r--r--lib/compiler/src/beam_validator.erl6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl
index b44771d8a9..953aced66e 100644
--- a/lib/compiler/src/beam_validator.erl
+++ b/lib/compiler/src/beam_validator.erl
@@ -349,6 +349,12 @@ valfun_1({put_list,A,B,Dst}, Vst0) ->
assert_term(B, Vst0),
Vst = eat_heap(2, Vst0),
set_type_reg(cons, Dst, Vst);
+valfun_1({put_tuple2,Dst,{list,Elements}}, Vst0) ->
+ _ = [assert_term(El, Vst0) || El <- Elements],
+ Size = length(Elements),
+ Vst = eat_heap(Size+1, Vst0),
+ Type = {tuple,Size},
+ set_type_reg(Type, Dst, Vst);
valfun_1({put_tuple,Sz,Dst}, Vst0) when is_integer(Sz) ->
Vst1 = eat_heap(1, Vst0),
Vst = set_type_reg(tuple_in_progress, Dst, Vst1),