Last active
August 29, 2015 14:18
-
-
Save mraleph/88ef8e9f7d8b17090777 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Clash(x) { | |
// Each instance of Clash gets a different getter for the property | |
// xx. This for the second instance makes it impossible to have this | |
// accessor promoted to the hidden class because it does not match expected | |
// accessor (the same as the first instance had) which in turn prevents its | |
// inlining later. | |
Object.defineProperty(this, "xx", { | |
get: function () { return x * x } | |
}); | |
} | |
function NoClash(x) { | |
this.x = x; | |
} | |
Object.defineProperty(NoClash.prototype, "xx", { | |
get: function () { return this.x * this.x } | |
}); | |
var a0 = new Clash(-1), | |
a1 = new Clash(1); | |
var b0 = new NoClash(-1), | |
b1 = new NoClash(1); | |
function clash(o0, o1) { | |
return a0.xx + a1.xx; // first one will be inlined | |
} | |
function noclash(o0, o1) { | |
return b0.xx + b1.xx; // both accessors will be inlined | |
} | |
function test(f) { | |
f(); | |
f(); | |
%OptimizeFunctionOnNextCall(f); | |
f(); | |
} | |
test(clash); | |
test(noclash); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- FUNCTION SOURCE (clash) id{0,0} --- | |
(o0, o1) { | |
return a0.xx + a1.xx; // first one will be inlined | |
} | |
--- END --- | |
--- FUNCTION SOURCE (Clash.Object.defineProperty.get) id{0,1} --- | |
() { return x * x } | |
--- END --- | |
INLINE (Clash.Object.defineProperty.get) id{0,1} AS 1 AT <0:22> | |
--- Raw source --- | |
(o0, o1) { | |
return a0.xx + a1.xx; // first one will be inlined | |
} | |
--- Optimized code --- | |
optimization_id = 0 | |
source_position = 569 | |
kind = OPTIMIZED_FUNCTION | |
name = clash | |
stack_slots = 3 | |
Instructions (size = 188) | |
0x44e37360 0 55 push ebp | |
0x44e37361 1 89e5 mov ebp,esp | |
0x44e37363 3 56 push esi | |
0x44e37364 4 57 push edi | |
0x44e37365 5 83ec0c sub esp,0xc | |
;;; Store dynamic frame alignment tag for spilled doubles | |
0x44e37368 8 c745f400000000 mov [ebp-0xc],0x0 | |
;;; <@0,#0> -------------------- B0 -------------------- | |
;;; <@2,#1> context | |
0x44e3736f 15 8b45fc mov eax,[ebp-0x4] ;; debug: position 569 | |
;;; <@3,#1> gap | |
0x44e37372 18 8945f0 mov [ebp-0x10],eax | |
;;; <@12,#9> -------------------- B1 -------------------- | |
;;; <@13,#9> gap | |
0x44e37375 21 89c6 mov esi,eax | |
;;; <@14,#11> stack-check | |
0x44e37377 23 3b2540382f01 cmp esp,[0x12f3840] | |
0x44e3737d 29 7305 jnc 36 (0x44e37384) | |
0x44e3737f 31 e85c7affff call StackCheck (0x44e2ede0) ;; code: BUILTIN | |
;;; <@16,#11> lazy-bailout | |
;;; <@18,#13> check-maps | |
;;; <@20,#14> constant-t | |
0x44e37384 36 8b058c814033 mov eax,[0x3340818c] ;; debug: position 591 | |
;; debug: position 285 | |
;; property cell | |
;;; <@22,#18> load-context-slot | |
0x44e3738a 42 8b4017 mov eax,[eax+0x17] ;; debug: position 297 | |
;;; <@24,#34> check-smi | |
0x44e3738d 45 a801 test al,0x1 | |
0x44e3738f 47 0f854d000000 jnz 130 (0x44e373e2) | |
;;; <@25,#34> gap | |
0x44e37395 53 89c1 mov ecx,eax | |
;;; <@26,#20> mul-i | |
0x44e37397 55 89ca mov edx,ecx ;; debug: position 299 | |
0x44e37399 57 d1f9 sar ecx,1 | |
0x44e3739b 59 0fafc8 imul ecx,eax | |
0x44e3739e 62 0f8043000000 jo 135 (0x44e373e7) | |
0x44e373a4 68 85c9 test ecx,ecx | |
0x44e373a6 70 7508 jnz 80 (0x44e373b0) | |
0x44e373a8 72 0bd0 or edx,eax | |
0x44e373aa 74 0f883c000000 js 140 (0x44e373ec) | |
;;; <@27,#20> gap | |
0x44e373b0 80 894dec mov [ebp-0x14],ecx | |
;;; <@30,#25> -------------------- B2 -------------------- | |
;;; <@32,#26> constant-t | |
0x44e373b3 83 8b1594814033 mov edx,[0x33408194] ;; debug: position 597 | |
;; property cell | |
;;; <@33,#26> gap | |
0x44e373b9 89 8b75f0 mov esi,[ebp-0x10] | |
;;; <@34,#27> load-named-generic | |
0x44e373bc 92 b94523d257 mov ecx,0x57d22345 ;; debug: position 599 | |
;; object: 0x57d22345 <String[2]: xx> | |
0x44e373c1 97 e87a43ffff call 0x44e2b740 ;; code: LOAD_IC, PREMONOMORPHIC | |
;;; <@36,#28> lazy-bailout | |
;;; <@37,#28> gap | |
0x44e373c6 102 89c1 mov ecx,eax | |
;;; <@38,#36> check-smi | |
0x44e373c8 104 f6c101 test_b cl,0x1 | |
0x44e373cb 107 0f8520000000 jnz 145 (0x44e373f1) | |
;;; <@40,#29> add-i | |
0x44e373d1 113 034dec add ecx,[ebp-0x14] ;; debug: position 595 | |
0x44e373d4 116 0f801c000000 jo 150 (0x44e373f6) | |
;;; <@42,#37> dummy-use | |
;;; <@43,#37> gap | |
0x44e373da 122 89c8 mov eax,ecx ;; debug: position 582 | |
;;; <@44,#32> return | |
0x44e373dc 124 89ec mov esp,ebp | |
0x44e373de 126 5d pop ebp | |
0x44e373df 127 c20c00 ret 0xc | |
;;; -------------------- Jump table -------------------- | |
0x44e373e2 130 e8232ccd0c call 0x51b0a00a ;; debug: position 6145 | |
;; debug: deopt reason 'not a Smi' | |
;; deoptimization bailout 1 | |
0x44e373e7 135 e8282ccd0c call 0x51b0a014 ;; debug: position 7169 | |
;; debug: deopt reason 'overflow' | |
;; deoptimization bailout 2 | |
0x44e373ec 140 e8232ccd0c call 0x51b0a014 ;; debug: position 7169 | |
;; debug: deopt reason 'minus zero' | |
;; deoptimization bailout 2 | |
0x44e373f1 145 e8322ccd0c call 0x51b0a028 ;; debug: position 15360 | |
;; debug: deopt reason 'not a Smi' | |
;; deoptimization bailout 4 | |
0x44e373f6 150 e8372ccd0c call 0x51b0a032 ;; debug: position 13312 | |
;; debug: deopt reason 'overflow' | |
;; deoptimization bailout 5 | |
0x44e373fb 155 90 nop | |
0x44e373fc 156 90 nop | |
0x44e373fd 157 90 nop | |
0x44e373fe 158 90 nop | |
0x44e373ff 159 90 nop | |
;;; Safepoint table. | |
Deoptimization Input Data (deopt points = 6) | |
index ast id argc pc | |
0 3 0 36 | |
1 2 0 -1 | |
2 2 0 -1 | |
3 17 0 102 | |
4 17 0 -1 | |
5 17 0 -1 | |
Safepoints (size = 28) | |
0x44e37384 36 010 (sp -> fp) 0 | |
0x44e373c6 102 010 (sp -> fp) 3 | |
RelocInfo (size = 286) | |
0x44e37368 comment (;;; Store dynamic frame alignment tag for spilled doubles) | |
0x44e3736f position (569) | |
0x44e3736f comment (;;; <@0,#0> -------------------- B0 --------------------) | |
0x44e3736f comment (;;; <@2,#1> context) | |
0x44e37372 comment (;;; <@3,#1> gap) | |
0x44e37375 comment (;;; <@12,#9> -------------------- B1 --------------------) | |
0x44e37375 comment (;;; <@13,#9> gap) | |
0x44e37377 comment (;;; <@14,#11> stack-check) | |
0x44e37380 code target (BUILTIN) (0x44e2ede0) | |
0x44e37384 comment (;;; <@16,#11> lazy-bailout) | |
0x44e37384 comment (;;; <@18,#13> check-maps) | |
0x44e37384 position (591) | |
0x44e37384 comment (;;; <@20,#14> constant-t) | |
0x44e37384 position (285) | |
0x44e37386 property cell | |
0x44e3738a comment (;;; <@22,#18> load-context-slot) | |
0x44e3738a position (297) | |
0x44e3738d comment (;;; <@24,#34> check-smi) | |
0x44e37395 comment (;;; <@25,#34> gap) | |
0x44e37397 comment (;;; <@26,#20> mul-i) | |
0x44e37397 position (299) | |
0x44e373b0 comment (;;; <@27,#20> gap) | |
0x44e373b3 position (597) | |
0x44e373b3 comment (;;; <@30,#25> -------------------- B2 --------------------) | |
0x44e373b3 comment (;;; <@32,#26> constant-t) | |
0x44e373b5 property cell | |
0x44e373b9 comment (;;; <@33,#26> gap) | |
0x44e373bc comment (;;; <@34,#27> load-named-generic) | |
0x44e373bc position (599) | |
0x44e373bd embedded object (0x57d22345 <String[2]: xx>) | |
0x44e373c2 code target (LOAD_IC) (0x44e2b740) | |
0x44e373c6 comment (;;; <@36,#28> lazy-bailout) | |
0x44e373c6 comment (;;; <@37,#28> gap) | |
0x44e373c8 comment (;;; <@38,#36> check-smi) | |
0x44e373d1 comment (;;; <@40,#29> add-i) | |
0x44e373d1 position (595) | |
0x44e373da comment (;;; <@42,#37> dummy-use) | |
0x44e373da position (582) | |
0x44e373da comment (;;; <@43,#37> gap) | |
0x44e373dc comment (;;; <@44,#32> return) | |
0x44e373e2 comment (;;; -------------------- Jump table --------------------) | |
0x44e373e2 position (6145) | |
0x44e373e2 deopt reason (not a Smi) | |
0x44e373e3 runtime entry (deoptimization bailout 1) | |
0x44e373e7 position (7169) | |
0x44e373e7 deopt reason (overflow) | |
0x44e373e8 runtime entry (deoptimization bailout 2) | |
0x44e373ec position (7169) | |
0x44e373ec deopt reason (minus zero) | |
0x44e373ed runtime entry (deoptimization bailout 2) | |
0x44e373f1 position (15360) | |
0x44e373f1 deopt reason (not a Smi) | |
0x44e373f2 runtime entry (deoptimization bailout 4) | |
0x44e373f6 position (13312) | |
0x44e373f6 deopt reason (overflow) | |
0x44e373f7 runtime entry (deoptimization bailout 5) | |
0x44e37400 comment (;;; Safepoint table.) | |
--- End code --- | |
--- FUNCTION SOURCE (noclash) id{1,0} --- | |
(o0, o1) { | |
return b0.xx + b1.xx; // both accessors will be inlined | |
} | |
--- END --- | |
--- FUNCTION SOURCE (Object.defineProperty.get) id{1,1} --- | |
() { return this.x * this.x } | |
--- END --- | |
INLINE (Object.defineProperty.get) id{1,1} AS 1 AT <0:22> | |
--- FUNCTION SOURCE (Object.defineProperty.get) id{1,2} --- | |
() { return this.x * this.x } | |
--- END --- | |
INLINE (Object.defineProperty.get) id{1,2} AS 2 AT <0:30> | |
--- Raw source --- | |
(o0, o1) { | |
return b0.xx + b1.xx; // both accessors will be inlined | |
} | |
--- Optimized code --- | |
optimization_id = 1 | |
source_position = 653 | |
kind = OPTIMIZED_FUNCTION | |
name = noclash | |
stack_slots = 2 | |
Instructions (size = 178) | |
0x44e37b40 0 8b4c240c mov ecx,[esp+0xc] | |
0x44e37b44 4 81f99180103e cmp ecx,0x3e108091 ;; object: 0x3e108091 <undefined> | |
0x44e37b4a 10 750a jnz 22 (0x44e37b56) | |
0x44e37b4c 12 8b4e13 mov ecx,[esi+0x13] | |
0x44e37b4f 15 8b4913 mov ecx,[ecx+0x13] | |
0x44e37b52 18 894c240c mov [esp+0xc],ecx | |
0x44e37b56 22 55 push ebp | |
0x44e37b57 23 89e5 mov ebp,esp | |
0x44e37b59 25 56 push esi | |
0x44e37b5a 26 57 push edi | |
0x44e37b5b 27 83ec08 sub esp,0x8 | |
;;; Store dynamic frame alignment tag for spilled doubles | |
0x44e37b5e 30 c745f400000000 mov [ebp-0xc],0x0 | |
;;; <@0,#0> -------------------- B0 -------------------- | |
;;; <@2,#1> context | |
0x44e37b65 37 8b45fc mov eax,[ebp-0x4] ;; debug: position 653 | |
;;; <@3,#1> gap | |
0x44e37b68 40 8945f0 mov [ebp-0x10],eax | |
;;; <@12,#9> -------------------- B1 -------------------- | |
;;; <@13,#9> gap | |
0x44e37b6b 43 89c6 mov esi,eax | |
;;; <@14,#11> stack-check | |
0x44e37b6d 45 3b2540382f01 cmp esp,[0x12f3840] | |
0x44e37b73 51 7305 jnc 58 (0x44e37b7a) | |
0x44e37b75 53 e86672ffff call StackCheck (0x44e2ede0) ;; code: BUILTIN | |
;;; <@16,#11> lazy-bailout | |
;;; <@18,#13> check-maps | |
;;; <@20,#15> check-maps | |
;;; <@22,#12> constant-t | |
0x44e37b7a 58 8b05bc814033 mov eax,[0x334081bc] ;; debug: position 675 | |
;; debug: position 673 | |
;; property cell | |
;;; <@24,#22> load-named-field | |
0x44e37b80 64 8b400b mov eax,[eax+0xb] ;; debug: position 434 | |
;;; <@25,#22> gap | |
0x44e37b83 67 89c1 mov ecx,eax | |
;;; <@26,#25> mul-i | |
0x44e37b85 69 89ca mov edx,ecx ;; debug: position 437 | |
0x44e37b87 71 d1f9 sar ecx,1 | |
0x44e37b89 73 0fafc8 imul ecx,eax | |
0x44e37b8c 76 0f8032000000 jo 132 (0x44e37bc4) | |
0x44e37b92 82 85c9 test ecx,ecx | |
0x44e37b94 84 7508 jnz 94 (0x44e37b9e) | |
0x44e37b96 86 0bd0 or edx,eax | |
0x44e37b98 88 0f882b000000 js 137 (0x44e37bc9) | |
;;; <@30,#30> -------------------- B2 -------------------- | |
;;; <@32,#32> check-maps | |
;;; <@34,#31> constant-t | |
0x44e37b9e 94 8b05c4814033 mov eax,[0x334081c4] ;; debug: position 681 | |
;; debug: position 683 | |
;; debug: position 681 | |
;; property cell | |
;;; <@36,#40> load-named-field | |
0x44e37ba4 100 8b400b mov eax,[eax+0xb] ;; debug: position 434 | |
;;; <@37,#40> gap | |
0x44e37ba7 103 89c2 mov edx,eax | |
;;; <@38,#43> mul-i | |
0x44e37ba9 105 d1fa sar edx,1 ;; debug: position 437 | |
0x44e37bab 107 0fafd0 imul edx,eax | |
0x44e37bae 110 0f801a000000 jo 142 (0x44e37bce) | |
;;; <@42,#48> -------------------- B3 -------------------- | |
;;; <@43,#48> gap | |
0x44e37bb4 116 89c8 mov eax,ecx ;; debug: position 679 | |
;;; <@44,#49> add-i | |
0x44e37bb6 118 03c2 add eax,edx | |
0x44e37bb8 120 0f8015000000 jo 147 (0x44e37bd3) | |
;;; <@46,#54> dummy-use | |
;;; <@48,#52> return | |
0x44e37bbe 126 89ec mov esp,ebp ;; debug: position 666 | |
0x44e37bc0 128 5d pop ebp | |
0x44e37bc1 129 c20c00 ret 0xc | |
;;; -------------------- Jump table -------------------- | |
0x44e37bc4 132 e84124cd0c call 0x51b0a00a ;; debug: position 9729 | |
;; debug: deopt reason 'overflow' | |
;; deoptimization bailout 1 | |
0x44e37bc9 137 e83c24cd0c call 0x51b0a00a ;; debug: position 9729 | |
;; debug: deopt reason 'minus zero' | |
;; deoptimization bailout 1 | |
0x44e37bce 142 e84124cd0c call 0x51b0a014 ;; debug: position 9730 | |
;; debug: deopt reason 'overflow' | |
;; deoptimization bailout 2 | |
0x44e37bd3 147 e84624cd0c call 0x51b0a01e ;; debug: position 13312 | |
;; debug: deopt reason 'overflow' | |
;; deoptimization bailout 3 | |
0x44e37bd8 152 90 nop | |
0x44e37bd9 153 90 nop | |
0x44e37bda 154 90 nop | |
0x44e37bdb 155 90 nop | |
0x44e37bdc 156 90 nop | |
0x44e37bdd 157 0f1f00 nop | |
;;; Safepoint table. | |
Deoptimization Input Data (deopt points = 4) | |
index ast id argc pc | |
0 3 0 58 | |
1 2 0 -1 | |
2 2 0 -1 | |
3 17 0 -1 | |
Safepoints (size = 18) | |
0x44e37b7a 58 10 (sp -> fp) 0 | |
RelocInfo (size = 278) | |
0x44e37b46 embedded object (0x3e108091 <undefined>) | |
0x44e37b5e comment (;;; Store dynamic frame alignment tag for spilled doubles) | |
0x44e37b65 position (653) | |
0x44e37b65 comment (;;; <@0,#0> -------------------- B0 --------------------) | |
0x44e37b65 comment (;;; <@2,#1> context) | |
0x44e37b68 comment (;;; <@3,#1> gap) | |
0x44e37b6b comment (;;; <@12,#9> -------------------- B1 --------------------) | |
0x44e37b6b comment (;;; <@13,#9> gap) | |
0x44e37b6d comment (;;; <@14,#11> stack-check) | |
0x44e37b76 code target (BUILTIN) (0x44e2ede0) | |
0x44e37b7a comment (;;; <@16,#11> lazy-bailout) | |
0x44e37b7a comment (;;; <@18,#13> check-maps) | |
0x44e37b7a position (675) | |
0x44e37b7a comment (;;; <@20,#15> check-maps) | |
0x44e37b7a comment (;;; <@22,#12> constant-t) | |
0x44e37b7a position (673) | |
0x44e37b7c property cell | |
0x44e37b80 comment (;;; <@24,#22> load-named-field) | |
0x44e37b80 position (434) | |
0x44e37b83 comment (;;; <@25,#22> gap) | |
0x44e37b85 comment (;;; <@26,#25> mul-i) | |
0x44e37b85 position (437) | |
0x44e37b9e position (681) | |
0x44e37b9e comment (;;; <@30,#30> -------------------- B2 --------------------) | |
0x44e37b9e comment (;;; <@32,#32> check-maps) | |
0x44e37b9e position (683) | |
0x44e37b9e comment (;;; <@34,#31> constant-t) | |
0x44e37b9e position (681) | |
0x44e37ba0 property cell | |
0x44e37ba4 comment (;;; <@36,#40> load-named-field) | |
0x44e37ba4 position (434) | |
0x44e37ba7 comment (;;; <@37,#40> gap) | |
0x44e37ba9 comment (;;; <@38,#43> mul-i) | |
0x44e37ba9 position (437) | |
0x44e37bb4 position (679) | |
0x44e37bb4 comment (;;; <@42,#48> -------------------- B3 --------------------) | |
0x44e37bb4 comment (;;; <@43,#48> gap) | |
0x44e37bb6 comment (;;; <@44,#49> add-i) | |
0x44e37bbe comment (;;; <@46,#54> dummy-use) | |
0x44e37bbe position (666) | |
0x44e37bbe comment (;;; <@48,#52> return) | |
0x44e37bc4 comment (;;; -------------------- Jump table --------------------) | |
0x44e37bc4 position (9729) | |
0x44e37bc4 deopt reason (overflow) | |
0x44e37bc5 runtime entry (deoptimization bailout 1) | |
0x44e37bc9 position (9729) | |
0x44e37bc9 deopt reason (minus zero) | |
0x44e37bca runtime entry (deoptimization bailout 1) | |
0x44e37bce position (9730) | |
0x44e37bce deopt reason (overflow) | |
0x44e37bcf runtime entry (deoptimization bailout 2) | |
0x44e37bd3 position (13312) | |
0x44e37bd3 deopt reason (overflow) | |
0x44e37bd4 runtime entry (deoptimization bailout 3) | |
0x44e37be0 comment (;;; Safepoint table.) | |
--- End code --- |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin_compilation | |
name "clash" | |
method "clash:0" | |
date 1428330302000 | |
end_compilation | |
begin_cfg | |
name "Z_Code generation" | |
begin_block | |
name "B0" | |
from_bci -1 | |
to_bci -1 | |
predecessors | |
successors "B1" | |
xhandlers | |
flags | |
loop_depth 0 | |
first_lir_id 0 | |
last_lir_id 22 | |
begin_states | |
begin_locals | |
size 0 | |
method "None" | |
end_locals | |
end_states | |
begin_HIR | |
0 0 v0 BlockEntry type:Tagged <|@ | |
0 0 t6 Constant 0x3e108091 <undefined> [map 0x237081e1] <|@ | |
0 5 t1 Context type:Tagged <|@ | |
0 2 t2 Parameter 0 type:Tagged <|@ | |
0 2 t3 Parameter 1 type:Tagged <|@ | |
0 2 t4 Parameter 2 type:Tagged <|@ | |
0 0 t5 ArgumentsObject t2 t3 t4 type:Tagged <|@ | |
0 0 v7 Simulate id=2 var[3] = t1, var[2] = t4, var[1] = t3, var[0] = t2 type:Tagged <|@ | |
0 0 v8 Goto B1 type:Tagged <|@ | |
end_HIR | |
begin_LIR | |
0 label () () () () [hir:v0] <|@ | |
2 gap () () () () [hir:v0] <|@ | |
4 context [eax|R]= [hir:t1] <|@ | |
6 gap ([stack:1] = [eax|R];) () () () [hir:t1] <|@ | |
8 parameter [stack:-3]= [hir:t2] <|@ | |
10 gap () ([stack:-3];) () () [hir:t2] <|@ | |
12 parameter [stack:-2]= [hir:t3] <|@ | |
14 gap () ([stack:-2];) () () [hir:t3] <|@ | |
16 parameter [stack:-1]= [hir:t4] <|@ | |
18 gap () ([stack:-1];) () () [hir:t4] <|@ | |
20 gap () () () () [hir:v8] <|@ | |
22 goto B1 [hir:v8] <|@ | |
end_LIR | |
end_block | |
begin_block | |
name "B1" | |
from_bci -1 | |
to_bci -1 | |
predecessors "B0" | |
successors "B2" | |
xhandlers | |
flags | |
dominator "B0" | |
loop_depth 0 | |
first_lir_id 24 | |
last_lir_id 58 | |
begin_states | |
begin_locals | |
size 0 | |
method "None" | |
end_locals | |
end_states | |
begin_HIR | |
0 0 v9 BlockEntry type:Tagged <|@ | |
0 0 v10 Simulate id=3 type:Tagged <|@ | |
0 0 v11 StackCheck t1 changes[NewSpacePromotion] type:Tagged <|@ | |
0 4 t12 Constant 0x2e013379 <a Clash with map 0x2370f821> [map 0x2370f821] [new space] pos:20 <|@ | |
0 0 t13 CheckMaps t12 [0x2370f821](stability-check) pos:22 <|@ | |
0 2 t14 Constant 0x2e0133ad <FixedArray[5]> [map 0x237084cd] [new space] pos:1_0 <|@ | |
0 0 t15 ArgumentsObject t12 type:Tagged pos:1_0 <|@ | |
0 0 v16 Simulate id=-1 push t12 type:Tagged pos:1_0 <|@ | |
0 0 v17 EnterInlined Clash.Object.defineProperty.get type:Tagged pos:1_0 <|@ | |
0 1 t18 LoadContextSlot t14[4] type:Tagged pos:1_12 <|@ | |
0 2 s34 Change t18 t to s -0? allow-undefined-as-nan type:TaggedNumber pos:1_12 <|@ | |
0 2 s20 Mul s34 s34 ! -0? type:TaggedNumber pos:1_14 <|@ | |
0 0 v22 LeaveInlined type:Tagged pos:1_5 <|@ | |
0 0 v23 Simulate id=8 push s20 type:Tagged pos:1_5 <|@ | |
0 0 v24 Goto B2 type:Tagged pos:1_5 <|@ | |
end_HIR | |
begin_LIR | |
24 label () () () () [hir:v9] <|@ | |
26 gap () ([esi|R] = [eax|R];) () () [hir:v9] <|@ | |
28 stack-check = [esi|R] [id=3|parameters=3|arguments_stack_height=0|[stack:-3];[stack:-2];[stack:-1];[stack:1]] {[esi|R];[stack:1]} [hir:v11] <|@ | |
30 gap () () () () [hir:v11] <|@ | |
32 lazy-bailout = [id=3|deopt_id=0|parameters=3|arguments_stack_height=0|[stack:-3];[stack:-2];[stack:-1];[stack:1]] [hir:v11] <|@ | |
34 gap () () () () [hir:v11] <|@ | |
36 check-maps = NULL [hir:t13] <|@ | |
38 gap () () () () [hir:t13] <|@ | |
40 constant-t [eax|R]= [hir:t14] <|@ | |
42 gap ((0) = [eax|R];) () () () [hir:t14] <|@ | |
44 load-context-slot [eax|R][eax|R][4] [hir:t18] <|@ | |
46 gap ((0) = [eax|R];) ([eax|R];) () () [hir:t18] <|@ | |
48 check-smi [eax|R]= [eax|R] [id=2|deopt_id=1|parameters=1|arguments_stack_height=0|[constant:12];[constant:14]] [hir:s34] <|@ | |
50 gap ((0) = [eax|R];) ([ecx|R] = [eax|R];) () () [hir:s34] <|@ | |
52 mul-i [ecx|R]= [ecx|R] [eax|R] [id=2|deopt_id=2|parameters=1|arguments_stack_height=0|[constant:12];[constant:14]] [hir:s20] <|@ | |
54 gap ([stack:2] = [ecx|R];) () () () [hir:s20] <|@ | |
56 gap () () () () [hir:v24] <|@ | |
58 goto B2 [hir:v24] <|@ | |
end_LIR | |
end_block | |
begin_block | |
name "B2" | |
from_bci -1 | |
to_bci -1 | |
predecessors "B1" | |
successors | |
xhandlers | |
flags | |
dominator "B1" | |
loop_depth 0 | |
first_lir_id 60 | |
last_lir_id 90 | |
begin_states | |
begin_locals | |
size 0 | |
method "None" | |
end_locals | |
end_states | |
begin_HIR | |
0 0 v25 BlockEntry type:Tagged pos:28 <|@ | |
0 1 t26 Constant 0x2e013771 <a Clash with map 0x2370f84d> [new space] pos:28 <|@ | |
0 2 t27 LoadNamedGeneric t26.xx changes[*] type:Tagged pos:30 <|@ | |
0 0 v28 Simulate id=17 push t27 type:Tagged pos:30 <|@ | |
0 1 s36 Change t27 t to s allow-undefined-as-nan type:TaggedNumber pos:30 <|@ | |
0 1 s29 Add s20 s36 ! type:TaggedNumber pos:26 <|@ | |
0 1 s31 Constant 2 type:Smi pos:13 <|@ | |
0 1 t37 Change s29 s to t pos:13 <|@ | |
0 0 v32 Return t37 (pop s31 values) type:Tagged pos:13 <|@ | |
end_HIR | |
begin_LIR | |
60 label () () () () [hir:v25] <|@ | |
62 gap () () () () [hir:v25] <|@ | |
64 constant-t [edx|R]= [hir:t26] <|@ | |
66 gap ((0) = [edx|R];) ([esi|R] = [stack:1]; [edx|R];) () () [hir:t26] <|@ | |
68 load-named-generic [eax|R]= [esi|R] [edx|R] {[esi|R];[edx|R];[stack:1]} [hir:t27] <|@ | |
70 gap ((0) = [eax|R];) ([eax|R];) () () [hir:t27] <|@ | |
72 lazy-bailout = [id=17|deopt_id=3|parameters=3|arguments_stack_height=0|[stack:-3];[stack:-2];[stack:-1];[stack:1];[stack:2];[eax|R]] [hir:v28] <|@ | |
74 gap () ([ecx|R] = [eax|R];) () () [hir:v28] <|@ | |
76 check-smi [ecx|R]= [ecx|R] [id=17|deopt_id=4|parameters=3|arguments_stack_height=0|[stack:-3];[stack:-2];[stack:-1];[stack:1];[stack:2];[eax|R]] [hir:s36] <|@ | |
78 gap ((0) = [ecx|R];) ([ecx|R];) () () [hir:s36] <|@ | |
80 add-i [ecx|R]= [ecx|R] [stack:2] [id=17|deopt_id=5|parameters=3|arguments_stack_height=0|[stack:-3];[stack:-2];[stack:-1];[stack:1];[stack:2];[eax|R]] [hir:s29] <|@ | |
82 gap ((0) = [ecx|R];) ([ecx|R];) () () [hir:s29] <|@ | |
84 dummy-use [ecx|R]= [ecx|R] [hir:t37] <|@ | |
86 gap ((0) = [ecx|R];) ([eax|R] = [ecx|R];) () () [hir:t37] <|@ | |
88 return = [eax|R] NULL [constant:31] [hir:v32] <|@ | |
90 gap () () () () [hir:v32] <|@ | |
end_LIR | |
end_block | |
end_cfg | |
begin_compilation | |
name "noclash" | |
method "noclash:1" | |
date 1428330302000 | |
end_compilation | |
begin_cfg | |
name "Z_Code generation" | |
begin_block | |
name "B0" | |
from_bci -1 | |
to_bci -1 | |
predecessors | |
successors "B1" | |
xhandlers | |
flags | |
loop_depth 0 | |
first_lir_id 0 | |
last_lir_id 22 | |
begin_states | |
begin_locals | |
size 0 | |
method "None" | |
end_locals | |
end_states | |
begin_HIR | |
0 0 v0 BlockEntry type:Tagged <|@ | |
0 0 t6 Constant 0x3e108091 <undefined> [map 0x237081e1] <|@ | |
0 4 t1 Context type:Tagged <|@ | |
0 2 t2 Parameter 0 type:Tagged <|@ | |
0 2 t3 Parameter 1 type:Tagged <|@ | |
0 2 t4 Parameter 2 type:Tagged <|@ | |
0 0 t5 ArgumentsObject t2 t3 t4 type:Tagged <|@ | |
0 0 v7 Simulate id=2 var[3] = t1, var[2] = t4, var[1] = t3, var[0] = t2 type:Tagged <|@ | |
0 0 v8 Goto B1 type:Tagged <|@ | |
end_HIR | |
begin_LIR | |
0 label () () () () [hir:v0] <|@ | |
2 gap () () () () [hir:v0] <|@ | |
4 context [eax|R]= [hir:t1] <|@ | |
6 gap ([stack:1] = [eax|R];) () () () [hir:t1] <|@ | |
8 parameter [stack:-3]= [hir:t2] <|@ | |
10 gap () ([stack:-3];) () () [hir:t2] <|@ | |
12 parameter [stack:-2]= [hir:t3] <|@ | |
14 gap () ([stack:-2];) () () [hir:t3] <|@ | |
16 parameter [stack:-1]= [hir:t4] <|@ | |
18 gap () ([stack:-1];) () () [hir:t4] <|@ | |
20 gap () () () () [hir:v8] <|@ | |
22 goto B1 [hir:v8] <|@ | |
end_LIR | |
end_block | |
begin_block | |
name "B1" | |
from_bci -1 | |
to_bci -1 | |
predecessors "B0" | |
successors "B2" | |
xhandlers | |
flags | |
dominator "B0" | |
loop_depth 0 | |
first_lir_id 24 | |
last_lir_id 58 | |
begin_states | |
begin_locals | |
size 0 | |
method "None" | |
end_locals | |
end_states | |
begin_HIR | |
0 0 v9 BlockEntry type:Tagged <|@ | |
0 0 v10 Simulate id=3 type:Tagged <|@ | |
0 0 v11 StackCheck t1 changes[NewSpacePromotion] type:Tagged <|@ | |
0 6 t12 Constant 0x2e013a2d <a NoClash with map 0x2370f8a5> [map 0x2370f8a5] [new space] pos:20 <|@ | |
0 0 t13 CheckMaps t12 [0x2370f8a5](stability-check) pos:22 <|@ | |
0 2 t14 Constant 0x2e011fd9 <an Object with map 0x2370f745> [map 0x2370f745] [new space] pos:22 <|@ | |
0 0 t15 CheckMaps t14 [0x2370f745](stability-check) pos:22 <|@ | |
0 2 t16 Constant 0x3e15b149 <FixedArray[115]> pos:1_0 <|@ | |
0 0 t17 ArgumentsObject t12 type:Tagged pos:1_0 <|@ | |
0 0 v18 Simulate id=-1 push t12 type:Tagged pos:1_0 <|@ | |
0 0 v19 EnterInlined Object.defineProperty.get type:Tagged pos:1_0 <|@ | |
0 2 s22 LoadNamedField t12.x[in-object]@12 type:Smi pos:1_16 <|@ | |
0 2 s25 Mul s22 s22 ! -0? type:TaggedNumber pos:1_19 <|@ | |
0 0 v27 LeaveInlined type:Tagged pos:1_5 <|@ | |
0 0 v28 Simulate id=8 push s25 type:Tagged pos:1_5 <|@ | |
0 0 v29 Goto B2 type:Tagged pos:1_5 <|@ | |
end_HIR | |
begin_LIR | |
24 label () () () () [hir:v9] <|@ | |
26 gap () ([esi|R] = [eax|R];) () () [hir:v9] <|@ | |
28 stack-check = [esi|R] [id=3|parameters=3|arguments_stack_height=0|[stack:-3];[stack:-2];[stack:-1];[stack:1]] {[esi|R];[stack:1]} [hir:v11] <|@ | |
30 gap () () () () [hir:v11] <|@ | |
32 lazy-bailout = [id=3|deopt_id=0|parameters=3|arguments_stack_height=0|[stack:-3];[stack:-2];[stack:-1];[stack:1]] [hir:v11] <|@ | |
34 gap () () () () [hir:v11] <|@ | |
36 check-maps = NULL [hir:t13] <|@ | |
38 gap () () () () [hir:t13] <|@ | |
40 check-maps = NULL [hir:t15] <|@ | |
42 gap () () () () [hir:t15] <|@ | |
44 constant-t [eax|R]= [hir:t12] <|@ | |
46 gap ((0) = [eax|R];) () () () [hir:t12] <|@ | |
48 load-named-field [eax|R]= [eax|R] [hir:s22] <|@ | |
50 gap ((0) = [eax|R];) ([ecx|R] = [eax|R];) () () [hir:s22] <|@ | |
52 mul-i [ecx|R]= [ecx|R] [eax|R] [id=2|deopt_id=1|parameters=1|arguments_stack_height=0|[constant:12];[constant:16]] [hir:s25] <|@ | |
54 gap ((0) = [ecx|R];) () () () [hir:s25] <|@ | |
56 gap () () () () [hir:v29] <|@ | |
58 goto B2 [hir:v29] <|@ | |
end_LIR | |
end_block | |
begin_block | |
name "B2" | |
from_bci -1 | |
to_bci -1 | |
predecessors "B1" | |
successors "B3" | |
xhandlers | |
flags | |
dominator "B1" | |
loop_depth 0 | |
first_lir_id 60 | |
last_lir_id 82 | |
begin_states | |
begin_locals | |
size 0 | |
method "None" | |
end_locals | |
end_states | |
begin_HIR | |
0 0 v30 BlockEntry type:Tagged pos:28 <|@ | |
0 6 t31 Constant 0x2e013a79 <a NoClash with map 0x2370f8a5> [map 0x2370f8a5] [new space] pos:28 <|@ | |
0 0 t32 CheckMaps t31 [0x2370f8a5](stability-check) pos:30 <|@ | |
0 0 t36 ArgumentsObject t31 type:Tagged pos:2_0 <|@ | |
0 0 v37 Simulate id=-1 push t31 type:Tagged pos:2_0 <|@ | |
0 0 v38 EnterInlined Object.defineProperty.get type:Tagged pos:2_0 <|@ | |
0 2 s40 LoadNamedField t31.x[in-object]@12 type:Smi pos:2_16 <|@ | |
0 2 s43 Mul s40 s40 ! type:TaggedNumber pos:2_19 <|@ | |
0 0 v45 LeaveInlined type:Tagged pos:2_5 <|@ | |
0 0 v46 Simulate id=17 push s43 type:Tagged pos:2_5 <|@ | |
0 0 v47 Goto B3 type:Tagged pos:2_5 <|@ | |
end_HIR | |
begin_LIR | |
60 label () () () () [hir:v30] <|@ | |
62 gap () () () () [hir:v30] <|@ | |
64 check-maps = NULL [hir:t32] <|@ | |
66 gap () () () () [hir:t32] <|@ | |
68 constant-t [eax|R]= [hir:t31] <|@ | |
70 gap ((0) = [eax|R];) () () () [hir:t31] <|@ | |
72 load-named-field [eax|R]= [eax|R] [hir:s40] <|@ | |
74 gap ((0) = [eax|R];) ([edx|R] = [eax|R];) () () [hir:s40] <|@ | |
76 mul-i [edx|R]= [edx|R] [eax|R] [id=2|deopt_id=2|parameters=1|arguments_stack_height=0|[constant:31];[constant:35]] [hir:s43] <|@ | |
78 gap ((0) = [edx|R];) () () () [hir:s43] <|@ | |
80 gap () () () () [hir:v47] <|@ | |
82 goto B3 [hir:v47] <|@ | |
end_LIR | |
end_block | |
begin_block | |
name "B3" | |
from_bci -1 | |
to_bci -1 | |
predecessors "B2" | |
successors | |
xhandlers | |
flags | |
dominator "B2" | |
loop_depth 0 | |
first_lir_id 84 | |
last_lir_id 98 | |
begin_states | |
begin_locals | |
size 0 | |
method "None" | |
end_locals | |
end_states | |
begin_HIR | |
0 0 v48 BlockEntry type:Tagged pos:26 <|@ | |
0 2 s49 Add s25 s43 ! type:TaggedNumber pos:26 <|@ | |
0 0 v50 Simulate id=4 pop 2 / push s49 type:Tagged pos:26 <|@ | |
0 1 s51 Constant 2 type:Smi pos:13 <|@ | |
0 1 t54 Change s49 s to t pos:13 <|@ | |
0 0 v52 Return t54 (pop s51 values) type:Tagged pos:13 <|@ | |
end_HIR | |
begin_LIR | |
84 label () () () () [hir:v48] <|@ | |
86 gap () ([eax|R] = [ecx|R];) () () [hir:v48] <|@ | |
88 add-i [eax|R]= [eax|R] [edx|R] [id=17|deopt_id=3|parameters=3|arguments_stack_height=0|[stack:-3];[stack:-2];[stack:-1];[stack:1];[ecx|R];[edx|R]] [hir:s49] <|@ | |
90 gap ((0) = [eax|R];) ([eax|R];) () () [hir:s49] <|@ | |
92 dummy-use [eax|R]= [eax|R] [hir:t54] <|@ | |
94 gap ((0) = [eax|R];) ([eax|R];) () () [hir:t54] <|@ | |
96 return = [eax|R] NULL [constant:51] [hir:v52] <|@ | |
98 gap () () () () [hir:v52] <|@ | |
end_LIR | |
end_block | |
end_cfg |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment