13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved.
23ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Redistribution and use in source and binary forms, with or without
33ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// modification, are permitted provided that the following conditions are
43ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// met:
53ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//
63ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//     * Redistributions of source code must retain the above copyright
73ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       notice, this list of conditions and the following disclaimer.
83ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//     * Redistributions in binary form must reproduce the above
93ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       copyright notice, this list of conditions and the following
103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       disclaimer in the documentation and/or other materials provided
113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       with the distribution.
123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//     * Neither the name of Google Inc. nor the names of its
133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       contributors may be used to endorse or promote products derived
143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       from this software without specific prior written permission.
153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//
163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Flags: --allow-natives-syntax
293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test_helper_for_ics(func, b1, b2, b3, b4) {
313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  assertEquals(b1, func(.5, .5));
323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  assertEquals(b2, func(.5, undefined));
333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  assertEquals(b3, func(undefined, .5));
343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  assertEquals(b4, func(undefined, undefined));
353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test_helper_for_crankshaft(func, b1, b2, b3, b4) {
383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  assertEquals(b1, func(.5, .5));
393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  %OptimizeFunctionOnNextCall(func);
403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  assertEquals(b1, func(.5, .5));
413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  assertEquals(b2, func(.5, undefined));
423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  assertEquals(b3, func(undefined, .5));
433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  assertEquals(b4, func(undefined, undefined));
443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction less_1(a, b) {
473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a < b;
483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_ics(less_1, false, false, false, false);
513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction less_2(a, b) {
533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a < b;
543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_crankshaft(less_1, false, false, false, false);
573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction greater_1(a, b) {
593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a > b;
603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_ics(greater_1, false, false, false, false);
633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction greater_2(a, b) {
653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a > b;
663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_crankshaft(greater_1, false, false, false, false);
693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction less_equal_1(a, b) {
713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a <= b;
723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_ics(less_equal_1, true, false, false, false);
753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction less_equal_2(a, b) {
773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a <= b;
783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_crankshaft(less_equal_1, true, false, false, false);
813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction greater_equal_1(a, b) {
833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a >= b;
843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_ics(greater_equal_1, true, false, false, false);
873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction greater_equal_2(a, b) {
893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a >= b;
903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_crankshaft(greater_equal_1, true, false, false, false);
933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction equal_1(a, b) {
953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a == b;
963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_ics(equal_1, true, false, false, true);
993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction equal_2(a, b) {
1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a == b;
1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_crankshaft(equal_2, true, false, false, true);
1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction strict_equal_1(a, b) {
1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a === b;
1083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_ics(strict_equal_1, true, false, false, true);
1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction strict_equal_2(a, b) {
1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a === b;
1143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_crankshaft(strict_equal_2, true, false, false, true);
1173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction not_equal_1(a, b) {
1193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a != b;
1203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_ics(not_equal_1, false, true, true, false);
1233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction not_equal_2(a, b) {
1253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return a != b;
1263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_helper_for_crankshaft(not_equal_2, false, true, true, false);
129