| Summary: | [JSC] Add basic DFG/FTL support for Math.round | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | WebKit | Reporter: | Benjamin Poulain <benjamin> | ||||||||
| Component: | New Bugs | Assignee: | Benjamin Poulain <benjamin> | ||||||||
| Status: | RESOLVED FIXED | ||||||||||
| Severity: | Normal | CC: | cdumez, fpizlo, ggaren | ||||||||
| Priority: | P2 | ||||||||||
| Version: | 528+ (Nightly build) | ||||||||||
| Hardware: | Unspecified | ||||||||||
| OS: | Unspecified | ||||||||||
| Attachments: |
|
||||||||||
|
Description
Benjamin Poulain
2015-05-06 20:53:21 PDT
Created attachment 252562 [details]
Patch
Comment on attachment 252562 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=252562&action=review > Source/JavaScriptCore/tests/stress/math-round-basics.js:21 > +for (var i = 1; i < 1e7; ++i) { Note to self: change all the 1e7 to 1e4 before landing. Comment on attachment 252562 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=252562&action=review > Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:771 > + if (node->result() == NodeResultInt32) Please use an OpInfo to convey this. We currently don't use NodeResult for this purpose. We probably could, but it's not how we do this elsewhere. Look at the ArithMode that a lot of other Arith* ops use. Maybe you can just adopt that? Created attachment 252575 [details]
Patch
Conf#1 Conf#2
SunSpider:
3d-cube 4.1408+-0.1538 4.0276+-0.1259 might be 1.0281x faster
3d-morph 4.8290+-0.2785 ? 5.0485+-0.8525 ? might be 1.0455x slower
3d-raytrace 4.7953+-0.0668 ? 5.0070+-0.1707 ? might be 1.0441x slower
access-binary-trees 1.8532+-0.0437 1.8175+-0.0575 might be 1.0196x faster
access-fannkuch 4.8389+-0.0320 ? 4.8873+-0.2649 ?
access-nbody 2.3209+-0.2143 2.2186+-0.0189 might be 1.0461x faster
access-nsieve 2.9828+-0.2532 2.9258+-0.0861 might be 1.0195x faster
bitops-3bit-bits-in-byte 1.3005+-0.0642 ? 1.3358+-0.0813 ? might be 1.0271x slower
bitops-bits-in-byte 3.2125+-0.2960 ? 3.3729+-0.2112 ? might be 1.0499x slower
bitops-bitwise-and 2.0087+-0.5399 1.7947+-0.0220 might be 1.1192x faster
bitops-nsieve-bits 2.8845+-0.8473 2.6803+-0.1700 might be 1.0762x faster
controlflow-recursive 1.9271+-0.3576 ? 1.9525+-0.1982 ? might be 1.0132x slower
crypto-aes 3.4355+-0.2600 3.4088+-0.1603
crypto-md5 2.3564+-0.4712 2.3140+-0.1180 might be 1.0184x faster
crypto-sha1 2.3710+-0.3813 2.1962+-0.2614 might be 1.0796x faster
date-format-tofte 6.3610+-0.2712 ? 6.9952+-0.8896 ? might be 1.0997x slower
date-format-xparb 4.5204+-0.4078 4.3065+-0.1562 might be 1.0497x faster
math-cordic 2.5794+-0.0978 ? 2.6075+-0.1006 ? might be 1.0109x slower
math-partial-sums 3.9824+-0.0925 ? 4.2279+-0.7474 ? might be 1.0616x slower
math-spectral-norm 1.6602+-0.0723 ? 1.7245+-0.2965 ? might be 1.0387x slower
regexp-dna 5.7232+-0.2834 ? 6.0850+-0.6615 ? might be 1.0632x slower
string-base64 3.8460+-0.4509 3.7258+-0.2409 might be 1.0323x faster
string-fasta 5.2444+-0.1163 ? 5.3200+-0.2242 ? might be 1.0144x slower
string-tagcloud 7.7955+-0.4066 7.5438+-0.1482 might be 1.0334x faster
string-unpack-code 18.3552+-2.2503 17.8423+-0.9125 might be 1.0287x faster
string-validate-input 4.0030+-0.1147 3.9822+-0.0517
<arithmetic> 4.2049+-0.0894 ? 4.2057+-0.0697 ? might be 1.0002x slower
Conf#1 Conf#2
LongSpider:
3d-cube 742.0926+-6.2050 ? 748.6735+-1.4699 ?
3d-morph 1441.7476+-1.2056 ? 1443.6202+-3.6666 ?
3d-raytrace 625.7559+-0.8364 ? 626.2554+-1.3328 ?
access-binary-trees 910.2609+-22.9322 ? 918.5071+-10.6800 ?
access-fannkuch 250.7925+-10.5322 247.9307+-6.3436 might be 1.0115x faster
access-nbody 519.2402+-2.5508 ? 521.3293+-1.9713 ?
access-nsieve 478.1918+-14.2554 473.7713+-4.5105
bitops-3bit-bits-in-byte 38.9532+-1.5190 38.1597+-0.4094 might be 1.0208x faster
bitops-bits-in-byte 68.2141+-3.5217 ? 69.2349+-3.0288 ? might be 1.0150x slower
bitops-nsieve-bits 372.9376+-2.1016 ? 373.1197+-0.8348 ?
controlflow-recursive 438.1106+-1.6255 429.1138+-15.3511 might be 1.0210x faster
crypto-aes 539.0515+-4.0504 ? 540.9770+-12.4616 ?
crypto-md5 464.2847+-6.1039 455.7278+-14.1588 might be 1.0188x faster
crypto-sha1 544.1443+-17.1713 ? 546.0656+-17.2581 ?
date-format-tofte 486.2997+-9.5814 ? 493.7668+-12.9947 ? might be 1.0154x slower
date-format-xparb 614.8380+-10.5116 604.2457+-5.0432 might be 1.0175x faster
hash-map 147.1874+-4.6784 ? 165.6903+-49.0994 ? might be 1.1257x slower
math-cordic 473.6155+-0.8228 ? 474.5190+-2.0292 ?
math-partial-sums 402.8023+-2.4723 ^ 398.3118+-0.5093 ^ definitely 1.0113x faster
math-spectral-norm 529.7989+-2.0975 529.5065+-0.5446
string-base64 321.1147+-1.9659 320.8398+-3.8377
string-fasta 356.5018+-3.1154 ? 358.2148+-5.3363 ?
string-tagcloud 169.4116+-2.0863 169.3607+-1.2258
<geometric> 378.1451+-2.0365 ? 379.2141+-4.9575 ? might be 1.0028x slower
Conf#1 Conf#2
V8Spider:
crypto 48.5956+-0.7492 47.2966+-2.3150 might be 1.0275x faster
deltablue 81.5040+-8.0517 78.2980+-9.4841 might be 1.0409x faster
earley-boyer 37.7719+-1.8089 37.5505+-0.9757
raytrace 29.8913+-2.3763 29.0375+-1.5596 might be 1.0294x faster
regexp 66.0854+-2.4834 ? 66.4735+-6.2305 ?
richards 74.1684+-4.6052 67.4373+-4.0951 might be 1.0998x faster
splay 36.6972+-3.1347 ? 36.7380+-2.6863 ?
<geometric> 50.1832+-1.6333 48.8375+-2.1782 might be 1.0276x faster
Conf#1 Conf#2
Octane:
encrypt 0.18806+-0.00181 ? 0.18836+-0.00155 ?
decrypt 3.24250+-0.02470 ? 3.27323+-0.05516 ?
deltablue x2 0.15486+-0.00602 0.15431+-0.00241
earley 0.44752+-0.00927 0.43919+-0.00905 might be 1.0190x faster
boyer 5.68789+-0.07786 5.62806+-0.06387 might be 1.0106x faster
navier-stokes x2 4.82803+-0.01536 ? 4.83638+-0.02194 ?
raytrace x2 1.10704+-0.02818 1.03943+-0.09239 might be 1.0651x faster
richards x2 0.08731+-0.00099 ? 0.08807+-0.00110 ?
splay x2 0.39588+-0.00676 ? 0.40022+-0.00880 ? might be 1.0110x slower
regexp x2 27.04717+-1.26738 26.96558+-0.57982
pdfjs x2 37.08901+-0.90512 36.51697+-0.78912 might be 1.0157x faster
mandreel x2 42.85548+-0.82111 42.30857+-0.50992 might be 1.0129x faster
gbemu x2 31.27731+-0.43313 30.98388+-0.40018
closure 0.45630+-0.00151 ? 0.45999+-0.00713 ?
jquery 5.64665+-0.04966 ? 5.65332+-0.01967 ?
box2d x2 9.80045+-0.22828 9.70455+-0.08865
zlib x2 365.98088+-7.60072 355.77212+-26.12710 might be 1.0287x faster
typescript x2 653.52350+-21.57603 ? 668.55707+-32.34518 ? might be 1.0230x slower
<geometric> 5.62825+-0.04750 5.58802+-0.02906 might be 1.0072x faster
Conf#1 Conf#2
Kraken:
ai-astar 394.653+-18.956 ^ 286.637+-9.304 ^ definitely 1.3768x faster
audio-beat-detection 93.189+-1.486 92.837+-0.733
audio-dft 99.570+-2.315 ? 101.089+-4.512 ? might be 1.0152x slower
audio-fft 77.202+-0.354 ? 77.341+-0.292 ?
audio-oscillator 171.940+-6.512 ^ 61.136+-1.465 ^ definitely 2.8124x faster
imaging-darkroom 89.956+-1.418 ? 90.223+-1.107 ?
imaging-desaturate 53.181+-4.543 52.268+-2.165 might be 1.0175x faster
imaging-gaussian-blur 82.337+-2.067 81.076+-1.237 might be 1.0155x faster
json-parse-financial 36.527+-1.276 35.209+-0.493 might be 1.0374x faster
json-stringify-tinderbox 41.711+-0.986 41.298+-1.239
stanford-crypto-aes 51.029+-1.578 50.444+-1.555 might be 1.0116x faster
stanford-crypto-ccm 46.250+-1.079 ? 47.291+-2.726 ? might be 1.0225x slower
stanford-crypto-pbkdf2 116.369+-1.113 ^ 114.677+-0.443 ^ definitely 1.0148x faster
stanford-crypto-sha256-iterative 43.652+-0.443 43.093+-1.236 might be 1.0130x faster
<arithmetic> 99.826+-1.340 ^ 83.901+-1.001 ^ definitely 1.1898x faster
Conf#1 Conf#2
JSRegress:
abs-boolean 2.1707+-0.0391 ? 2.2059+-0.0651 ? might be 1.0162x slower
adapt-to-double-divide 14.9608+-0.2445 ? 15.3970+-1.2129 ? might be 1.0292x slower
aliased-arguments-getbyval 0.9788+-0.0727 0.9706+-0.0899
allocate-big-object 2.3665+-0.1130 ? 2.4035+-0.0896 ? might be 1.0157x slower
arguments-named-and-reflective 9.9796+-0.2786 ? 10.1203+-0.2851 ? might be 1.0141x slower
arguments-out-of-bounds 9.3035+-0.2992 ? 9.5052+-0.7641 ? might be 1.0217x slower
arguments-strict-mode 8.7437+-0.7168 8.5001+-0.0935 might be 1.0287x faster
arguments 7.6077+-0.2753 7.4965+-0.2800 might be 1.0148x faster
arity-mismatch-inlining 0.7410+-0.0693 ? 0.7617+-0.1125 ? might be 1.0279x slower
array-access-polymorphic-structure 5.6805+-0.3525 ? 5.7295+-0.3969 ?
array-nonarray-polymorhpic-access 26.3643+-1.3444 26.2675+-2.1015
array-prototype-every 74.4895+-2.3182 72.1460+-1.6974 might be 1.0325x faster
array-prototype-forEach 71.5989+-1.0636 71.1128+-1.6782
array-prototype-map 81.1539+-4.6785 77.8512+-3.0128 might be 1.0424x faster
array-prototype-some 73.3917+-1.9823 ? 74.6633+-5.7543 ? might be 1.0173x slower
array-splice-contiguous 38.0793+-0.5818 ? 38.7025+-1.4564 ? might be 1.0164x slower
array-with-double-add 3.1910+-0.4039 ? 3.2274+-0.5017 ? might be 1.0114x slower
array-with-double-increment 2.7560+-0.1725 2.7161+-0.0231 might be 1.0147x faster
array-with-double-mul-add 3.7534+-0.0831 ? 3.8052+-0.2257 ? might be 1.0138x slower
array-with-double-sum 3.0185+-0.4226 2.8887+-0.0476 might be 1.0449x faster
array-with-int32-add-sub 5.3752+-0.0781 5.3067+-0.2354 might be 1.0129x faster
array-with-int32-or-double-sum 2.8518+-0.0311 ? 2.8998+-0.0419 ? might be 1.0168x slower
ArrayBuffer-DataView-alloc-large-long-lived
29.9050+-1.1446 ? 30.0977+-1.8736 ?
ArrayBuffer-DataView-alloc-long-lived 11.6537+-0.6909 ? 11.8667+-0.3449 ? might be 1.0183x slower
ArrayBuffer-Int32Array-byteOffset 3.3138+-0.0885 ? 3.4898+-0.3809 ? might be 1.0531x slower
ArrayBuffer-Int8Array-alloc-large-long-lived
30.2892+-2.1806 ? 45.4797+-33.9094 ? might be 1.5015x slower
ArrayBuffer-Int8Array-alloc-long-lived-buffer
19.8328+-1.0598 19.5480+-0.3432 might be 1.0146x faster
ArrayBuffer-Int8Array-alloc-long-lived 10.9482+-0.2063 ? 11.3303+-0.9217 ? might be 1.0349x slower
ArrayBuffer-Int8Array-alloc 9.4655+-0.3181 ? 9.7499+-0.5644 ? might be 1.0301x slower
asmjs_bool_bug 6.9682+-0.8248 6.7121+-0.2364 might be 1.0382x faster
assign-custom-setter-polymorphic 2.2917+-0.0479 2.2416+-0.0415 might be 1.0224x faster
assign-custom-setter 3.0968+-0.0925 ? 3.2080+-0.2058 ? might be 1.0359x slower
basic-set 7.8178+-1.3821 7.3928+-0.9171 might be 1.0575x faster
big-int-mul 3.2222+-0.1583 3.1298+-0.0234 might be 1.0295x faster
boolean-test 2.5367+-0.1253 2.5140+-0.0452
branch-fold 3.3301+-0.1599 3.2914+-0.0469 might be 1.0118x faster
branch-on-string-as-boolean 13.7684+-0.4069 ? 13.8007+-0.7698 ?
by-val-generic 6.9795+-0.8140 6.5595+-0.0893 might be 1.0640x faster
call-spread-apply 26.6556+-3.1630 25.5533+-0.9641 might be 1.0431x faster
call-spread-call 21.1185+-1.2235 20.4924+-0.6770 might be 1.0306x faster
captured-assignments 0.3192+-0.0156 ? 0.3246+-0.0201 ? might be 1.0172x slower
cast-int-to-double 4.3957+-0.0992 4.3669+-0.2977
cell-argument 5.6570+-0.0544 5.6190+-0.3151
cfg-simplify 2.4593+-0.0234 ? 2.5029+-0.1319 ? might be 1.0177x slower
chain-getter-access 7.5379+-0.1469 7.5150+-0.1175
cmpeq-obj-to-obj-other 9.6130+-1.9721 ? 12.0886+-3.4838 ? might be 1.2575x slower
constant-test 4.0902+-0.0727 ? 4.2035+-0.1620 ? might be 1.0277x slower
create-lots-of-functions 10.7288+-0.2483 10.7117+-0.2308
DataView-custom-properties 34.1357+-1.4443 ? 34.8354+-2.1948 ? might be 1.0205x slower
deconstructing-parameters-overridden-by-function
0.3622+-0.0299 ? 0.3767+-0.0554 ? might be 1.0399x slower
delay-tear-off-arguments-strictmode 11.7769+-0.3293 11.6714+-0.1642
deltablue-varargs 149.9948+-5.8519 148.8525+-1.5563
destructuring-arguments 14.7909+-0.2301 14.7690+-0.5764
destructuring-swap 4.4656+-0.3919 ? 4.4686+-0.5351 ?
direct-arguments-getbyval 0.9990+-0.0931 0.9937+-0.1043
div-boolean-double 5.1048+-0.3680 4.9713+-0.1325 might be 1.0269x faster
div-boolean 7.6152+-0.1349 ? 7.6910+-0.1582 ?
double-get-by-val-out-of-bounds 3.8902+-0.1048 ? 4.0157+-0.1354 ? might be 1.0323x slower
double-pollution-getbyval 8.6411+-1.3076 8.2016+-0.2874 might be 1.0536x faster
double-pollution-putbyoffset 3.4963+-0.0562 ? 3.7742+-0.8879 ? might be 1.0795x slower
double-to-int32-typed-array-no-inline 1.9650+-0.0984 ? 2.0133+-0.3036 ? might be 1.0246x slower
double-to-int32-typed-array 1.6549+-0.1376 1.5928+-0.0909 might be 1.0390x faster
double-to-uint32-typed-array-no-inline 2.0097+-0.0780 1.9711+-0.1486 might be 1.0196x faster
double-to-uint32-typed-array 1.6829+-0.2157 1.6038+-0.0827 might be 1.0493x faster
elidable-new-object-dag 37.1661+-0.7730 ? 37.3814+-1.1081 ?
elidable-new-object-roflcopter 39.4862+-1.3082 39.1473+-1.7006
elidable-new-object-then-call 31.8257+-4.7430 30.2048+-1.6187 might be 1.0537x faster
elidable-new-object-tree 40.7846+-1.0998 40.3422+-1.6529 might be 1.0110x faster
empty-string-plus-int 4.4610+-0.0841 ? 4.4715+-0.1468 ?
emscripten-cube2hash 24.1464+-2.3437 ? 25.1727+-2.4360 ? might be 1.0425x slower
exit-length-on-plain-object 11.5229+-0.0323 ? 11.5255+-0.2975 ?
external-arguments-getbyval 0.9725+-0.0575 ? 0.9900+-0.0734 ? might be 1.0180x slower
external-arguments-putbyval 1.9135+-0.1551 ? 1.9439+-0.1653 ? might be 1.0159x slower
fixed-typed-array-storage-var-index 0.9724+-0.0145 ? 1.0333+-0.0627 ? might be 1.0627x slower
fixed-typed-array-storage 0.7640+-0.0812 ? 0.7833+-0.1327 ? might be 1.0252x slower
Float32Array-matrix-mult 3.5615+-0.1680 3.4761+-0.0939 might be 1.0245x faster
Float32Array-to-Float64Array-set 44.3898+-0.8819 ? 44.8405+-0.5586 ? might be 1.0102x slower
Float64Array-alloc-long-lived 63.2968+-2.1876 61.4168+-0.7875 might be 1.0306x faster
Float64Array-to-Int16Array-set 53.2209+-1.4505 52.5873+-1.4437 might be 1.0120x faster
fold-double-to-int 11.2084+-0.1455 ? 11.2532+-0.2173 ?
fold-get-by-id-to-multi-get-by-offset-rare-int
9.7832+-0.7676 ? 10.0682+-0.5893 ? might be 1.0291x slower
fold-get-by-id-to-multi-get-by-offset 8.4203+-0.5027 8.0818+-0.2958 might be 1.0419x faster
fold-multi-get-by-offset-to-get-by-offset
8.2079+-1.2179 7.5118+-2.3483 might be 1.0927x faster
fold-multi-get-by-offset-to-poly-get-by-offset
8.2023+-0.5107 7.8900+-1.3132 might be 1.0396x faster
fold-multi-put-by-offset-to-poly-put-by-offset
6.6140+-2.2769 ? 7.1415+-1.4050 ? might be 1.0798x slower
fold-multi-put-by-offset-to-put-by-offset
3.5494+-0.4411 3.5005+-0.3918 might be 1.0140x faster
fold-multi-put-by-offset-to-replace-or-transition-put-by-offset
8.3168+-0.1272 8.1092+-0.3521 might be 1.0256x faster
fold-put-by-id-to-multi-put-by-offset 8.4591+-0.1240 8.1842+-0.4866 might be 1.0336x faster
fold-put-structure 4.3883+-0.8894 3.9022+-0.4871 might be 1.1246x faster
for-of-iterate-array-entries 4.1708+-0.8784 3.8546+-0.2674 might be 1.0820x faster
for-of-iterate-array-keys 2.9442+-0.1111 ? 3.0408+-0.2597 ? might be 1.0328x slower
for-of-iterate-array-values 2.9077+-0.1185 ? 3.0927+-0.5521 ? might be 1.0636x slower
fround 17.0254+-0.5693 16.8832+-0.8294
ftl-library-inlining-dataview 55.3542+-1.8304 54.8253+-1.2813
ftl-library-inlining 104.3007+-1.9121 104.0242+-0.6178
function-dot-apply 1.5593+-0.1843 1.4932+-0.0665 might be 1.0442x faster
function-test 2.6245+-0.5554 2.4208+-0.0417 might be 1.0842x faster
function-with-eval 89.4238+-1.5689 ? 90.6534+-9.3003 ? might be 1.0137x slower
gcse-poly-get-less-obvious 13.4318+-0.1460 ? 13.5419+-0.9975 ?
gcse-poly-get 15.2101+-0.4316 13.5820+-1.4045 might be 1.1199x faster
gcse 3.4615+-0.0867 ? 3.4977+-0.1152 ? might be 1.0105x slower
get-by-id-bimorphic-check-structure-elimination-simple
2.3269+-0.0175 ? 2.3625+-0.1076 ? might be 1.0153x slower
get-by-id-bimorphic-check-structure-elimination
5.4736+-0.2125 ? 5.5251+-1.0522 ?
get-by-id-chain-from-try-block 6.0765+-0.5667 ? 6.1981+-0.6636 ? might be 1.0200x slower
get-by-id-check-structure-elimination 4.0150+-0.2311 ? 4.0515+-0.2335 ?
get-by-id-proto-or-self 12.6577+-0.3821 ? 13.0318+-0.5290 ? might be 1.0296x slower
get-by-id-quadmorphic-check-structure-elimination-simple
2.7283+-0.2481 2.6121+-0.0292 might be 1.0445x faster
get-by-id-self-or-proto 13.4865+-0.5841 ? 13.6916+-0.4031 ? might be 1.0152x slower
get-by-val-out-of-bounds 3.7668+-0.0999 ? 3.8310+-0.0737 ? might be 1.0170x slower
get_callee_monomorphic 2.6112+-0.1780 ? 2.6520+-0.1272 ? might be 1.0156x slower
get_callee_polymorphic 3.1920+-0.3127 3.0980+-0.2279 might be 1.0303x faster
getter-no-activation 4.9032+-0.4013 ? 5.0738+-0.4276 ? might be 1.0348x slower
getter-richards 113.4353+-5.2670 112.8447+-4.8488
getter 5.7241+-0.8872 5.1642+-0.5850 might be 1.1084x faster
global-var-const-infer-fire-from-opt 0.8569+-0.1929 0.8132+-0.0774 might be 1.0538x faster
global-var-const-infer 0.6580+-0.0687 ? 0.7058+-0.0321 ? might be 1.0726x slower
HashMap-put-get-iterate-keys 25.5944+-1.7445 ? 26.8098+-3.5296 ? might be 1.0475x slower
HashMap-put-get-iterate 27.6923+-3.2380 26.1259+-1.3076 might be 1.0600x faster
HashMap-string-put-get-iterate 25.0150+-0.7988 ? 25.5265+-2.1316 ? might be 1.0204x slower
hoist-make-rope 8.3896+-1.0298 ? 9.3361+-0.7858 ? might be 1.1128x slower
hoist-poly-check-structure-effectful-loop
3.8001+-0.1741 3.7828+-0.2115
hoist-poly-check-structure 3.0587+-0.1156 2.9454+-0.0369 might be 1.0385x faster
imul-double-only 6.1921+-0.1695 ? 6.7007+-0.6829 ? might be 1.0821x slower
imul-int-only 7.3465+-0.6455 ? 7.3607+-0.3277 ?
imul-mixed 5.8228+-0.6710 5.8026+-0.3281
in-four-cases 14.3038+-0.4504 ? 14.6633+-1.0914 ? might be 1.0251x slower
in-one-case-false 8.0408+-0.4386 ? 8.0644+-0.7126 ?
in-one-case-true 8.2823+-1.1438 8.2745+-1.7483
in-two-cases 8.2083+-0.4324 ? 8.3016+-0.4569 ? might be 1.0114x slower
indexed-properties-in-objects 2.6780+-0.5483 2.5317+-0.0947 might be 1.0578x faster
infer-closure-const-then-mov-no-inline 2.9228+-0.0242 2.9077+-0.0437
infer-closure-const-then-mov 15.2515+-0.3419 ? 15.5440+-0.5407 ? might be 1.0192x slower
infer-closure-const-then-put-to-scope-no-inline
10.0257+-0.7936 9.7704+-0.2326 might be 1.0261x faster
infer-closure-const-then-put-to-scope 20.9005+-2.0851 20.0665+-0.6853 might be 1.0416x faster
infer-closure-const-then-reenter-no-inline
45.6380+-1.5487 ? 45.6658+-1.5421 ?
infer-closure-const-then-reenter 20.3535+-0.1657 20.1694+-0.3476
infer-constant-global-property 28.2578+-0.9717 28.1545+-0.6691
infer-constant-property 2.3542+-0.1386 2.3322+-0.0355
infer-one-time-closure-ten-vars 7.5142+-0.3343 ? 7.5958+-0.3031 ? might be 1.0109x slower
infer-one-time-closure-two-vars 7.1171+-0.0395 ? 7.3277+-0.5174 ? might be 1.0296x slower
infer-one-time-closure 7.2236+-0.2996 7.2191+-0.3326
infer-one-time-deep-closure 11.9421+-0.8327 ? 12.3832+-1.1461 ? might be 1.0369x slower
inline-arguments-access 3.8728+-0.2725 ? 4.0796+-0.4238 ? might be 1.0534x slower
inline-arguments-aliased-access 3.7840+-0.1797 3.7528+-0.0785
inline-arguments-local-escape 4.1345+-0.5682 3.9146+-0.2381 might be 1.0562x faster
inline-get-scoped-var 4.5453+-0.3100 ? 4.7855+-0.1326 ? might be 1.0529x slower
inlined-put-by-id-transition 10.8926+-0.5313 ? 10.9107+-0.4387 ?
int-or-other-abs-then-get-by-val 3.8561+-0.1046 ? 4.1108+-0.6229 ? might be 1.0661x slower
int-or-other-abs-zero-then-get-by-val 15.0338+-0.7155 14.7530+-0.2031 might be 1.0190x faster
int-or-other-add-then-get-by-val 3.6936+-0.0981 ? 3.8492+-0.2109 ? might be 1.0421x slower
int-or-other-add 4.5243+-0.0937 ? 4.5733+-0.0723 ? might be 1.0108x slower
int-or-other-div-then-get-by-val 3.4083+-0.1668 ? 3.5550+-0.2938 ? might be 1.0430x slower
int-or-other-max-then-get-by-val 3.5591+-0.0510 3.5114+-0.2419 might be 1.0136x faster
int-or-other-min-then-get-by-val 3.6993+-0.1471 ? 3.8854+-0.4623 ? might be 1.0503x slower
int-or-other-mod-then-get-by-val 3.4073+-0.3753 3.1743+-0.1261 might be 1.0734x faster
int-or-other-mul-then-get-by-val 3.3234+-0.2592 3.1547+-0.0675 might be 1.0535x faster
int-or-other-neg-then-get-by-val 3.6777+-0.2503 ? 3.7334+-0.2488 ? might be 1.0151x slower
int-or-other-neg-zero-then-get-by-val 14.7737+-0.3340 14.7569+-0.4032
int-or-other-sub-then-get-by-val 3.6284+-0.0425 ? 3.8123+-0.2697 ? might be 1.0507x slower
int-or-other-sub 3.0503+-0.0891 ? 3.1030+-0.5057 ? might be 1.0173x slower
int-overflow-local 3.5140+-0.1998 3.3987+-0.0697 might be 1.0339x faster
Int16Array-alloc-long-lived 44.7080+-1.0773 44.2729+-2.5796
Int16Array-bubble-sort-with-byteLength 16.5726+-0.8970 ? 16.5844+-1.5458 ?
Int16Array-bubble-sort 15.5959+-0.6807 ? 15.7161+-0.9000 ?
Int16Array-load-int-mul 1.2321+-0.0063 ? 1.2517+-0.0441 ? might be 1.0159x slower
Int16Array-to-Int32Array-set 41.2156+-3.5637 41.0414+-1.8321
Int32Array-alloc-large 11.1010+-0.4580 ? 11.2252+-1.0276 ? might be 1.0112x slower
Int32Array-alloc-long-lived 48.6909+-1.2204 ? 49.6205+-1.5392 ? might be 1.0191x slower
Int32Array-alloc 2.8950+-0.0689 ? 3.0235+-0.2435 ? might be 1.0444x slower
Int32Array-Int8Array-view-alloc 5.7628+-0.1169 ? 5.8920+-0.1278 ? might be 1.0224x slower
int52-spill 5.4438+-0.2175 ? 5.6097+-0.4728 ? might be 1.0305x slower
Int8Array-alloc-long-lived 38.7594+-1.5162 ? 39.1125+-2.1541 ?
Int8Array-load-with-byteLength 3.0244+-0.0729 ? 3.0392+-0.1216 ?
Int8Array-load 3.0805+-0.0764 3.0081+-0.0690 might be 1.0241x faster
integer-divide 9.2883+-0.7360 ? 9.3298+-0.0706 ?
integer-modulo 1.5623+-0.1488 ? 1.5735+-0.0722 ?
is-boolean-fold-tricky 3.4228+-0.1070 3.4085+-0.1086
is-boolean-fold 2.3828+-0.1037 ? 2.4297+-0.2425 ? might be 1.0197x slower
is-function-fold-tricky-internal-function
9.5034+-0.7941 9.0765+-0.2419 might be 1.0470x faster
is-function-fold-tricky 3.7399+-0.2312 ? 3.7572+-0.1078 ?
is-function-fold 2.4930+-0.2062 ? 2.6176+-0.6188 ? might be 1.0500x slower
is-number-fold-tricky 3.7845+-0.4448 3.6795+-0.1799 might be 1.0285x faster
is-number-fold 2.4998+-0.3696 2.3650+-0.0516 might be 1.0570x faster
is-object-or-null-fold-functions 2.5558+-0.5516 2.4266+-0.0672 might be 1.0532x faster
is-object-or-null-fold-less-tricky 3.6617+-0.0234 ? 3.9813+-0.4931 ? might be 1.0873x slower
is-object-or-null-fold-tricky 4.8658+-0.2274 ? 4.9384+-0.4873 ? might be 1.0149x slower
is-object-or-null-fold 2.3505+-0.0195 ? 2.3721+-0.0176 ?
is-object-or-null-trickier-function 3.7864+-0.1979 ? 3.9188+-0.5193 ? might be 1.0350x slower
is-object-or-null-trickier-internal-function
9.6810+-0.3789 ? 10.0200+-1.3901 ? might be 1.0350x slower
is-object-or-null-tricky-function 3.7424+-0.2150 ? 3.7600+-0.1263 ?
is-object-or-null-tricky-internal-function
7.2961+-0.7081 7.1132+-0.1167 might be 1.0257x faster
is-string-fold-tricky 3.6204+-0.0661 ? 3.6423+-0.0676 ?
is-string-fold 2.3476+-0.0220 ? 2.5370+-0.3832 ? might be 1.0807x slower
is-undefined-fold-tricky 2.9507+-0.0127 ? 2.9777+-0.0232 ?
is-undefined-fold 2.4963+-0.4662 ? 2.5267+-0.2914 ? might be 1.0122x slower
large-int-captured 4.0579+-0.2811 4.0442+-0.2365
large-int-neg 13.4100+-0.2363 13.3930+-0.2713
large-int 12.6317+-0.3122 ? 13.3435+-0.9117 ? might be 1.0563x slower
logical-not 3.6992+-0.0812 3.6312+-0.1752 might be 1.0187x faster
lots-of-fields 9.5557+-0.1845 9.3506+-0.2083 might be 1.0219x faster
make-indexed-storage 2.5885+-0.0849 ? 2.6447+-0.1465 ? might be 1.0217x slower
make-rope-cse 4.3372+-0.0793 ? 4.8917+-1.2945 ? might be 1.1278x slower
marsaglia-larger-ints 30.6463+-2.0049 ? 30.7347+-1.3156 ?
marsaglia-osr-entry 19.5237+-0.4422 ? 20.2422+-1.3112 ? might be 1.0368x slower
max-boolean 2.4637+-0.1338 2.4388+-0.0373 might be 1.0102x faster
method-on-number 14.7213+-0.5013 14.5630+-0.4039 might be 1.0109x faster
min-boolean 2.4130+-0.0537 ? 2.4326+-0.0939 ?
minus-boolean-double 2.7503+-0.0223 ? 2.7979+-0.0936 ? might be 1.0173x slower
minus-boolean 2.3549+-0.4863 2.0927+-0.0829 might be 1.1253x faster
misc-strict-eq 27.7948+-2.5275 26.6064+-1.1510 might be 1.0447x faster
mod-boolean-double 10.3531+-0.1636 ? 10.4375+-0.1610 ?
mod-boolean 7.6772+-0.0308 ? 7.6798+-0.0617 ?
mul-boolean-double 3.6855+-0.7669 3.2261+-0.0137 might be 1.1424x faster
mul-boolean 2.5177+-0.0747 ? 2.8488+-0.6124 ? might be 1.1315x slower
neg-boolean 2.8023+-0.1287 2.7727+-0.0392 might be 1.0107x faster
negative-zero-divide 0.2582+-0.0193 ? 0.2610+-0.0124 ? might be 1.0106x slower
negative-zero-modulo 0.2920+-0.1037 0.2905+-0.1217
negative-zero-negate 0.2401+-0.0035 ? 0.2416+-0.0129 ?
nested-function-parsing 33.0396+-0.2871 ? 33.1509+-0.6180 ?
new-array-buffer-dead 96.2360+-1.0873 ? 98.0498+-6.0321 ? might be 1.0188x slower
new-array-buffer-push 6.3149+-0.3794 6.1479+-0.2788 might be 1.0272x faster
new-array-dead 13.8781+-1.9851 13.2360+-1.1044 might be 1.0485x faster
new-array-push 3.6558+-0.1577 3.6023+-0.3399 might be 1.0149x faster
no-inline-constructor 110.4818+-4.5973 105.9281+-1.1793 might be 1.0430x faster
number-test 2.7247+-0.5615 2.5497+-0.0743 might be 1.0686x faster
object-closure-call 4.5638+-0.1317 ? 4.7870+-0.7263 ? might be 1.0489x slower
object-test 2.3453+-0.0442 ? 2.5340+-0.5049 ? might be 1.0805x slower
obvious-sink-pathology-taken 118.2666+-2.2391 ? 120.0546+-5.2881 ? might be 1.0151x slower
obvious-sink-pathology 113.5497+-0.8640 113.5235+-1.8269
obviously-elidable-new-object 29.2182+-2.6200 27.0430+-0.1487 might be 1.0804x faster
plus-boolean-arith 2.1182+-0.0169 ? 2.2325+-0.1988 ? might be 1.0540x slower
plus-boolean-double 2.8306+-0.2716 ? 2.8593+-0.1440 ? might be 1.0101x slower
plus-boolean 2.4205+-0.4506 2.3298+-0.0146 might be 1.0389x faster
poly-chain-access-different-prototypes-simple
2.4305+-0.0050 ? 2.5050+-0.2599 ? might be 1.0307x slower
poly-chain-access-different-prototypes 2.2637+-0.0431 ? 2.3345+-0.1515 ? might be 1.0312x slower
poly-chain-access-simpler 2.4450+-0.0817 ? 2.4713+-0.0792 ? might be 1.0107x slower
poly-chain-access 2.3954+-0.3330 2.2760+-0.0858 might be 1.0525x faster
poly-stricteq 42.0096+-1.4723 41.7791+-1.5912
polymorphic-array-call 0.9795+-0.0629 ? 1.0243+-0.0637 ? might be 1.0457x slower
polymorphic-get-by-id 2.5228+-0.0873 ? 2.5433+-0.0605 ?
polymorphic-put-by-id 23.1641+-1.7473 22.9447+-0.4531
polymorphic-structure 11.6145+-0.1370 11.5432+-0.1030
polyvariant-monomorphic-get-by-id 6.1240+-0.0724 ? 6.4543+-1.1397 ? might be 1.0539x slower
proto-getter-access 7.6945+-0.3600 ? 8.0447+-0.7053 ? might be 1.0455x slower
put-by-id-replace-and-transition 8.0762+-1.0025 ? 8.1398+-1.0559 ?
put-by-id-slightly-polymorphic 2.3002+-0.0329 ? 2.4075+-0.1524 ? might be 1.0466x slower
put-by-id 12.2438+-0.2799 ^ 11.8952+-0.0661 ^ definitely 1.0293x faster
put-by-val-direct 0.3331+-0.0148 0.3265+-0.0116 might be 1.0202x faster
put-by-val-large-index-blank-indexing-type
5.3245+-0.3421 ? 5.3817+-0.5417 ? might be 1.0107x slower
put-by-val-machine-int 2.1646+-0.0443 ? 2.3138+-0.1457 ? might be 1.0689x slower
rare-osr-exit-on-local 13.6348+-0.4297 ? 13.6457+-0.4007 ?
register-pressure-from-osr 15.2329+-0.4038 14.9760+-0.3111 might be 1.0172x faster
setter 5.3923+-0.2533 ? 5.5655+-0.3316 ? might be 1.0321x slower
simple-activation-demo 22.6383+-0.6282 ? 22.7936+-0.3713 ?
simple-getter-access 9.7494+-0.2171 9.6143+-0.1835 might be 1.0141x faster
simple-poly-call-nested 8.3760+-0.4468 ? 8.8411+-0.6401 ? might be 1.0555x slower
simple-poly-call 1.1470+-0.0510 ? 1.1710+-0.1467 ? might be 1.0209x slower
sin-boolean 16.6793+-1.6030 16.2102+-0.5963 might be 1.0289x faster
singleton-scope 58.1704+-1.6125 ? 58.4650+-1.2252 ?
sink-function 9.2067+-0.3572 9.1561+-0.3759
sink-huge-activation 15.3687+-1.2797 14.9748+-0.3616 might be 1.0263x faster
sinkable-new-object-dag 56.9877+-3.8169 55.4910+-2.3970 might be 1.0270x faster
sinkable-new-object-taken 46.1378+-1.7054 ? 46.5231+-2.0160 ?
sinkable-new-object 32.1895+-1.7768 ? 32.4302+-1.1209 ?
slow-array-profile-convergence 2.4015+-0.7592 2.1943+-0.0853 might be 1.0944x faster
slow-convergence 2.3362+-0.4279 2.1356+-0.0359 might be 1.0940x faster
sorting-benchmark 17.3640+-0.2545 17.1731+-0.3448 might be 1.0111x faster
sparse-conditional 0.9967+-0.0286 0.9579+-0.0316 might be 1.0405x faster
splice-to-remove 12.4217+-0.2645 12.4190+-0.2155
string-char-code-at 11.7400+-0.7929 ? 11.9744+-0.7138 ? might be 1.0200x slower
string-concat-object 2.2735+-0.2910 2.2472+-0.1128 might be 1.0117x faster
string-concat-pair-object 2.0671+-0.0470 ? 2.1863+-0.3453 ? might be 1.0577x slower
string-concat-pair-simple 10.4166+-0.2181 ? 10.8223+-0.2571 ? might be 1.0390x slower
string-concat-simple 10.6625+-0.2285 ? 10.7858+-0.8069 ? might be 1.0116x slower
string-cons-repeat 7.6285+-0.5966 7.3878+-0.2928 might be 1.0326x faster
string-cons-tower 7.7446+-0.3511 ? 7.7896+-0.3686 ?
string-equality 14.0413+-1.1127 ? 14.5976+-1.1919 ? might be 1.0396x slower
string-get-by-val-big-char 6.0761+-0.0668 ? 6.2242+-0.2175 ? might be 1.0244x slower
string-get-by-val-out-of-bounds-insane 3.2073+-0.3097 3.0142+-0.1232 might be 1.0640x faster
string-get-by-val-out-of-bounds 3.7384+-0.4442 3.7291+-0.2073
string-get-by-val 2.6218+-0.3024 ? 2.7733+-0.7391 ? might be 1.0578x slower
string-hash 1.6666+-0.0145 ? 1.6974+-0.1064 ? might be 1.0185x slower
string-long-ident-equality 11.0800+-0.1088 ? 11.1030+-0.1014 ?
string-out-of-bounds 9.3950+-0.1560 9.3912+-0.2349
string-repeat-arith 25.8444+-1.8103 24.7103+-0.2293 might be 1.0459x faster
string-sub 48.2728+-1.4096 47.2511+-0.8146 might be 1.0216x faster
string-test 2.3976+-0.0131 ? 2.4615+-0.1239 ? might be 1.0267x slower
string-var-equality 24.0847+-0.3989 ? 24.3770+-1.0953 ? might be 1.0121x slower
structure-hoist-over-transitions 2.1474+-0.1309 ? 2.1786+-0.0889 ? might be 1.0146x slower
substring-concat-weird 35.9947+-0.7102 35.4572+-1.7101 might be 1.0152x faster
substring-concat 36.5112+-1.2844 36.0167+-0.4761 might be 1.0137x faster
substring 41.2643+-0.8130 40.8342+-1.7899 might be 1.0105x faster
switch-char-constant 2.6982+-0.2274 ? 2.7703+-0.1284 ? might be 1.0267x slower
switch-char 5.6874+-0.8582 ? 5.9475+-1.0229 ? might be 1.0457x slower
switch-constant 8.1365+-0.1827 7.9464+-0.3308 might be 1.0239x faster
switch-string-basic-big-var 13.0591+-0.9093 12.4024+-0.1166 might be 1.0529x faster
switch-string-basic-big 13.0443+-0.1635 12.9399+-1.2147
switch-string-basic-var 12.2295+-0.2097 ? 12.5209+-1.4352 ? might be 1.0238x slower
switch-string-basic 11.6801+-0.7866 11.2132+-0.2156 might be 1.0416x faster
switch-string-big-length-tower-var 17.8444+-0.2779 ^ 16.4628+-0.7524 ^ definitely 1.0839x faster
switch-string-length-tower-var 12.1469+-0.2548 11.7234+-0.2283 might be 1.0361x faster
switch-string-length-tower 10.7536+-1.0482 10.2365+-0.1534 might be 1.0505x faster
switch-string-short 10.2935+-0.2334 10.2232+-0.0671
switch 12.3239+-1.2827 11.5049+-0.3304 might be 1.0712x faster
tear-off-arguments-simple 3.1315+-0.5644 2.8785+-0.0493 might be 1.0879x faster
tear-off-arguments 4.1161+-0.0596 4.0854+-0.3137
temporal-structure 10.8801+-0.2433 ? 10.8967+-0.1949 ?
to-int32-boolean 12.1490+-1.0787 12.0208+-0.4317 might be 1.0107x faster
try-catch-get-by-val-cloned-arguments 13.0632+-1.3594 12.4051+-0.0912 might be 1.0531x faster
try-catch-get-by-val-direct-arguments 5.4548+-0.2681 ? 5.5142+-0.2833 ? might be 1.0109x slower
try-catch-get-by-val-scoped-arguments 6.7856+-0.6834 6.6713+-0.3479 might be 1.0171x faster
typed-array-get-set-by-val-profiling 29.2254+-1.9634 28.8467+-2.3882 might be 1.0131x faster
undefined-property-access 201.9491+-0.3253 ? 202.2845+-0.5593 ?
undefined-test 2.5217+-0.0458 ? 2.5873+-0.0649 ? might be 1.0260x slower
unprofiled-licm 12.9734+-0.5255 12.8461+-0.7174
varargs-call 12.7744+-1.0065 11.8988+-0.0821 might be 1.0736x faster
varargs-construct-inline 18.9385+-0.3374 ? 18.9477+-0.7582 ?
varargs-construct 26.8636+-0.3642 ? 27.1548+-1.1879 ? might be 1.0108x slower
varargs-inline 7.6400+-0.4426 ? 7.8483+-1.0337 ? might be 1.0273x slower
varargs-strict-mode 8.3412+-0.3056 8.1160+-0.0829 might be 1.0277x faster
varargs 8.1857+-0.2864 8.1345+-0.1240
weird-inlining-const-prop 2.0535+-0.3187 1.9532+-0.3059 might be 1.0513x faster
<geometric> 6.9995+-0.0432 ? 7.0024+-0.0500 ? might be 1.0004x slower
Conf#1 Conf#2
AsmBench:
bigfib.cpp 430.0673+-5.3406 429.0679+-5.9068
cray.c 370.9434+-2.6266 370.7574+-3.4957
dry.c 391.3120+-28.1714 ? 400.3206+-28.4863 ? might be 1.0230x slower
FloatMM.c 660.6706+-0.6043 ? 660.8911+-3.3617 ?
gcc-loops.cpp 3379.4714+-42.2538 3365.6600+-24.2746
n-body.c 784.8190+-1.8584 ? 788.0121+-6.5370 ?
Quicksort.c 394.7753+-6.9276 393.2552+-1.7536
stepanov_container.cpp 3319.1298+-64.8832 3290.7164+-19.7912
Towers.c 224.2418+-0.3797 ? 224.3572+-1.1079 ?
<geometric> 682.4591+-4.0381 ? 683.0945+-4.3673 ? might be 1.0009x slower
Conf#1 Conf#2
CompressionBench:
huffman 283.3488+-4.0389 283.3203+-5.2277
arithmetic-simple 326.0441+-1.0772 ? 326.1645+-1.5984 ?
arithmetic-precise 254.1752+-3.0214 ? 254.5490+-1.1787 ?
arithmetic-complex-precise 256.6270+-3.7170 256.3231+-5.2345
arithmetic-precise-order-0 337.7275+-7.0976 ? 341.2655+-3.3992 ? might be 1.0105x slower
arithmetic-precise-order-1 284.0228+-2.2518 282.9955+-4.1211
arithmetic-precise-order-2 316.1408+-2.9216 ? 322.2546+-10.5952 ? might be 1.0193x slower
arithmetic-simple-order-1 316.1196+-1.5161 315.2775+-4.2455
arithmetic-simple-order-2 384.5463+-45.0267 363.9423+-10.0071 might be 1.0566x faster
lz-string 292.8047+-6.6800 ? 293.0391+-5.9172 ?
<geometric> 302.8536+-3.1452 301.9800+-1.3922 might be 1.0029x faster
Conf#1 Conf#2
Geomean of preferred means:
<scaled-result> 53.2699+-0.2365 ^ 51.9108+-0.3804 ^ definitely 1.0262x faster
Comment on attachment 252575 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=252575&action=review Looks good to me. Probably needs review from Phil too. > Source/JavaScriptCore/ChangeLog:14 > + Since ArithRound speculate it produces int32, the MacroAssembler assembler speculate => speculates > Source/JavaScriptCore/ChangeLog:20 > + but it is a good start known to be valid and inlining alone alread provides alread => already c:\cygwin\home\buildbot\webkit\webkitbuild\release\include\private\javascriptcore\X86Assembler.h(1811): error C2039: 'twoByteOp64' : is not a member of 'JSC::X86Assembler::X86InstructionFormatter' [C:\cygwin\home\buildbot\WebKit\Source\JavaScriptCore\JavaScriptCore.vcxproj\LLInt\LLIntOffsetsExtractor\LLIntOffsetsExtractor.vcxproj]
c:\cygwin\home\buildbot\webkit\webkitbuild\release\include\private\javascriptcore\X86Assembler.h(2332) : see declaration of 'JSC::X86Assembler::X86InstructionFormatter'
Comment on attachment 252575 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=252575&action=review > Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:770 > + if (operand && operand.isNumber()) { > + setConstant(node, jsNumber(jsRound(operand.asNumber()))); > + break; > + } This constant folding should correctly consider what happens under all of the rounding modes. - This is wrong for Int32, since it fails to convert -0 to 0. It also fails to always produce an int32. There is sort of another bug. It also will remove the Int32: check, which is pretty catastrophic: you could have previously had code that assumed that the incoming value was checked for Int32, but now the check will be gone and you'll have a double constant instead. That's not quite true since: (1) This code is reached only after the edge checks are executed. But the guiding principle of the abstract interpreter is that anytime it sets an abstract value to be V, it could instead set it to W if W is a superset of V. Therefore, it would be legal to change the Int32: check logic in the abstract interpreter to just do nothing for a double constant: the right result would be the clear value (i.e. the empty set of values), but you'd be setting it to some value instead, and some value is a superset of no values. Also: (2) the constant folder will try keep the edge checks intact after removing a node. But that all gets weird, because you'd then have an Int32: check on a double constant and a node that previously returned an int32 will now return a double. Soooooper weird. - This is wrong for Int32WithNegBlahBlah, since it will sort of remove the Int32:. This would be catastrophic if it weren't for other mitigations, but we still want to avoid it. Look at the pattern used for other arith nodes. Roughly, we do: - Don't constant fold if we know that some check that this does would have failed. Basically, this means that if you're in the Int32 modes, check that operand.isInt32(). - Make sure you correctly model the behavior of the node in the DFG and FTL backends. In the Int32 rounding mode, then will not return the same result as jsRound() for -0. - Make sure that when calling setConstant(), you set a constant that matches the type this would have otherwise returned. In the Int32 rounding mode, this node will always return Int32, but you might return a double (due to -0). A good idiom to follow is to make damn sure that when you construct a jsNumber() for an int32-returning node, you call the jsNumber() overload that takes an int32. Created attachment 252639 [details]
Patch
Comment on attachment 252639 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=252639&action=review > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:980 > + LValue convertDoubleToInt32(LValue value, bool shouldCheckNegativeZero) Something I try to do is put all of the helpers below the compileNodeType methods. Committed r183963: <http://trac.webkit.org/changeset/183963> Looks like a 9% progression on Kraken on the bots. |