Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(234)

Side by Side Diff: test/mjsunit/array-literal-feedback.js

Issue 22868004: Transitions from DOUBLE to FAST were not checking for allocation site info. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Comment update Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/mjsunit/allocation-site-info.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 26 matching lines...) Expand all
37 37
38 // support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8)); 38 // support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
39 support_smi_only_arrays = true; 39 support_smi_only_arrays = true;
40 40
41 if (support_smi_only_arrays) { 41 if (support_smi_only_arrays) {
42 print("Tests include smi-only arrays."); 42 print("Tests include smi-only arrays.");
43 } else { 43 } else {
44 print("Tests do NOT include smi-only arrays."); 44 print("Tests do NOT include smi-only arrays.");
45 } 45 }
46 46
47 var elements_kind = {
48 fast_smi_only : 'fast smi only elements',
49 fast : 'fast elements',
50 fast_double : 'fast double elements',
51 dictionary : 'dictionary elements',
52 external_byte : 'external byte elements',
53 external_unsigned_byte : 'external unsigned byte elements',
54 external_short : 'external short elements',
55 external_unsigned_short : 'external unsigned short elements',
56 external_int : 'external int elements',
57 external_unsigned_int : 'external unsigned int elements',
58 external_float : 'external float elements',
59 external_double : 'external double elements',
60 external_pixel : 'external pixel elements'
61 }
62
63 function getKind(obj) {
64 if (%HasFastSmiElements(obj)) return elements_kind.fast_smi_only;
65 if (%HasFastObjectElements(obj)) return elements_kind.fast;
66 if (%HasFastDoubleElements(obj)) return elements_kind.fast_double;
67 if (%HasDictionaryElements(obj)) return elements_kind.dictionary;
68 }
69
70 function isHoley(obj) {
71 if (%HasFastHoleyElements(obj)) return true;
72 return false;
73 }
74
75 function assertKind(expected, obj, name_opt) {
76 if (!support_smi_only_arrays &&
77 expected == elements_kind.fast_smi_only) {
78 expected = elements_kind.fast;
79 }
80 assertEquals(expected, getKind(obj), name_opt);
81 }
82
47 if (support_smi_only_arrays) { 83 if (support_smi_only_arrays) {
48 84
49 function get_literal(x) { 85 function get_literal(x) {
50 var literal = [1, 2, x]; 86 var literal = [1, 2, x];
51 return literal; 87 return literal;
52 } 88 }
53 89
54 get_literal(3); 90 get_literal(3);
55 get_literal(3); 91 get_literal(3);
56 %OptimizeFunctionOnNextCall(get_literal); 92 %OptimizeFunctionOnNextCall(get_literal);
57 a = get_literal(3); 93 a = get_literal(3);
58 assertOptimized(get_literal); 94 assertOptimized(get_literal);
59 assertTrue(%HasFastSmiElements(a)); 95 assertTrue(%HasFastSmiElements(a));
60 a[0] = 3.5; 96 a[0] = 3.5;
61 97
62 // We should have transitioned the boilerplate array to double, and 98 // We should have transitioned the boilerplate array to double, and
63 // crankshafted code should de-opt on the unexpected elements kind 99 // crankshafted code should de-opt on the unexpected elements kind
64 b = get_literal(3); 100 b = get_literal(3);
65 assertTrue(%HasFastDoubleElements(b)); 101 assertTrue(%HasFastDoubleElements(b));
66 assertEquals([1, 2, 3], b); 102 assertEquals([1, 2, 3], b);
67 assertUnoptimized(get_literal); 103 assertUnoptimized(get_literal);
68 104
69 // Optimize again 105 // Optimize again
70 get_literal(3); 106 get_literal(3);
71 %OptimizeFunctionOnNextCall(get_literal); 107 %OptimizeFunctionOnNextCall(get_literal);
72 b = get_literal(3); 108 b = get_literal(3);
73 assertTrue(%HasFastDoubleElements(b)); 109 assertTrue(%HasFastDoubleElements(b));
74 assertOptimized(get_literal); 110 assertOptimized(get_literal);
111
112
113 // Test: make sure allocation site information is updated through a
114 // transition from SMI->DOUBLE->FAST
115 (function() {
116 function bar(a, b, c) {
117 return [a, b, c];
118 }
119
120 a = bar(1, 2, 3);
121 a[0] = 3.5;
122 a[1] = 'hi';
123 b = bar(1, 2, 3);
124 assertKind(elements_kind.fast, b);
125 })();
75 } 126 }
OLDNEW
« no previous file with comments | « test/mjsunit/allocation-site-info.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698