summaryrefslogtreecommitdiff
blob: c98c8eb9f04b7e327b19a99eb3268d6ae5b6addb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--- lib/compiler/src/beam_bsm.erl.orig	2007-12-10 21:37:43.000000000 +0100
+++ lib/compiler/src/beam_bsm.erl	2007-12-10 21:38:20.000000000 +0100
@@ -269,9 +269,11 @@
     btb_reaches_match_1(Is, btb_kill([Dst], Regs), D);
 btb_reaches_match_2([{bs_init_bits,{f,0},_,_,_,_,Dst}|Is], Regs, D) ->
     btb_reaches_match_1(Is, btb_kill([Dst], Regs), D);
-btb_reaches_match_2([{bs_append,{f,0},_,_,_,_,_,_,Dst}|Is], Regs, D) ->
+btb_reaches_match_2([{bs_append,{f,0},_,_,_,_,Src,_,Dst}=I|Is], Regs, D) ->
+    btb_ensure_not_used([Src], I, Regs),
     btb_reaches_match_1(Is, btb_kill([Dst], Regs), D);
-btb_reaches_match_2([{bs_private_append,{f,0},_,_,_,_,Dst}|Is], Regs, D) ->
+btb_reaches_match_2([{bs_private_append,{f,0},_,_,Src,_,Dst}=I|Is], Regs, D) ->
+    btb_ensure_not_used([Src], I, Regs),
     btb_reaches_match_1(Is, btb_kill([Dst], Regs), D);
 btb_reaches_match_2([{bs_put_integer,{f,0},_,_,_,_}|Is], Regs, D) ->
     btb_reaches_match_1(Is, Regs, D);