blob: 9f01541c90f8af6f0f6cdca730da9aaafd2a72e5 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// Copyright 2013 the V8 project authors. All rights reserved.
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8// * Redistributions in binary form must reproduce the above
9// copyright notice, this list of conditions and the following
10// disclaimer in the documentation and/or other materials provided
11// with the distribution.
12// * Neither the name of Google Inc. nor the names of its
13// contributors may be used to endorse or promote products derived
14// from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28// Flags: --allow-natives-syntax
29
30var S1 = "string1";
31var S2 = "@@string2";
32
33function dead1(a, b) {
34 var x = %_StringCharCodeAt(a, 4);
35 return a; // x is dead code
36}
37
38function dead2(a, b) {
39 var x = %_StringCharCodeAt(a, 3);
40 var y = %_StringCharCodeAt(b, 1);
41 return a; // x and y are both dead
42}
43
44function dead3(a, b) {
45 a = a ? "11" : "12";
46 b = b ? "13" : "14";
47 var x = %_StringCharCodeAt(a, 2);
48 var y = %_StringCharCodeAt(b, 0);
49 return a; // x and y are both dead
50}
51
52function test() {
53 var S3 = S1 + S2;
54
55 assertEquals(S1, dead1(S1, S2));
56 assertEquals(S1, dead2(S1, S2));
57 assertEquals("11", dead3(S1, S2));
58
59 assertEquals(S2, dead1(S2, 677));
60 assertEquals(S2, dead2(S2, S3));
61 assertEquals("11", dead3(S2, S3));
62
63 assertEquals(S3, dead1(S3, 399));
64 assertEquals(S3, dead2(S3, "false"));
65 assertEquals("12", dead3(0, 32));
66
67 assertEquals(S3, dead1(S3, 0));
68 assertEquals(S3, dead2(S3, S1));
69 assertEquals("11", dead3(S3, 0));
70
71 assertEquals("true", dead1("true", 0));
72 assertEquals("true", dead2("true", S3));
73 assertEquals("11", dead3("true", 0));
74}
75
76test();
77test();
78%OptimizeFunctionOnNextCall(dead1);
79%OptimizeFunctionOnNextCall(dead2);
80%OptimizeFunctionOnNextCall(dead3);
81test();