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

Side by Side Diff: test/cctest/compiler/test-run-machops.cc

Issue 697663003: [turbofan] Also optimize unsigned division by constant. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Slight improvement Created 6 years, 1 month 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 | « src/x64/assembler-x64.cc ('k') | test/cctest/test-disasm-x64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <cmath> 5 #include <cmath>
6 #include <functional> 6 #include <functional>
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 default: 54 default:
55 return NULL; 55 return NULL;
56 } 56 }
57 } 57 }
58 58
59 59
60 TEST(CodeGenInt32Binop) { 60 TEST(CodeGenInt32Binop) {
61 RawMachineAssemblerTester<void> m; 61 RawMachineAssemblerTester<void> m;
62 62
63 const Operator* kOps[] = { 63 const Operator* kOps[] = {
64 m.machine()->Word32And(), m.machine()->Word32Or(), 64 m.machine()->Word32And(), m.machine()->Word32Or(),
65 m.machine()->Word32Xor(), m.machine()->Word32Shl(), 65 m.machine()->Word32Xor(), m.machine()->Word32Shl(),
66 m.machine()->Word32Shr(), m.machine()->Word32Sar(), 66 m.machine()->Word32Shr(), m.machine()->Word32Sar(),
67 m.machine()->Word32Equal(), m.machine()->Int32Add(), 67 m.machine()->Word32Equal(), m.machine()->Int32Add(),
68 m.machine()->Int32Sub(), m.machine()->Int32Mul(), 68 m.machine()->Int32Sub(), m.machine()->Int32Mul(),
69 m.machine()->Int32MulHigh(), m.machine()->Int32Div(), 69 m.machine()->Int32MulHigh(), m.machine()->Int32Div(),
70 m.machine()->Uint32Div(), m.machine()->Int32Mod(), 70 m.machine()->Uint32Div(), m.machine()->Int32Mod(),
71 m.machine()->Uint32Mod(), m.machine()->Int32LessThan(), 71 m.machine()->Uint32Mod(), m.machine()->Uint32MulHigh(),
72 m.machine()->Int32LessThanOrEqual(), m.machine()->Uint32LessThan(), 72 m.machine()->Int32LessThan(), m.machine()->Int32LessThanOrEqual(),
73 m.machine()->Uint32LessThanOrEqual()}; 73 m.machine()->Uint32LessThan(), m.machine()->Uint32LessThanOrEqual()};
74 74
75 for (size_t i = 0; i < arraysize(kOps); ++i) { 75 for (size_t i = 0; i < arraysize(kOps); ++i) {
76 for (int j = 0; j < 8; j++) { 76 for (int j = 0; j < 8; j++) {
77 for (int k = 0; k < 8; k++) { 77 for (int k = 0; k < 8; k++) {
78 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); 78 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
79 Node* a = Int32Input(&m, j); 79 Node* a = Int32Input(&m, j);
80 Node* b = Int32Input(&m, k); 80 Node* b = Int32Input(&m, k);
81 m.Return(m.NewNode(kOps[i], a, b)); 81 m.Return(m.NewNode(kOps[i], a, b));
82 m.GenerateCode(); 82 m.GenerateCode();
83 } 83 }
(...skipping 1409 matching lines...) Expand 10 before | Expand all | Expand 10 after
1493 // Use uint32_t because signed overflow is UB in C. 1493 // Use uint32_t because signed overflow is UB in C.
1494 int expected = *i - static_cast<uint32_t>(p0 * p1); 1494 int expected = *i - static_cast<uint32_t>(p0 * p1);
1495 CHECK_EQ(expected, bt.call(p0, p1)); 1495 CHECK_EQ(expected, bt.call(p0, p1));
1496 } 1496 }
1497 } 1497 }
1498 } 1498 }
1499 } 1499 }
1500 } 1500 }
1501 1501
1502 1502
1503 TEST(RunUint32MulHighP) {
1504 RawMachineAssemblerTester<int32_t> m;
1505 Int32BinopTester bt(&m);
1506 bt.AddReturn(m.Uint32MulHigh(bt.param0, bt.param1));
1507 FOR_UINT32_INPUTS(i) {
1508 FOR_UINT32_INPUTS(j) {
1509 int32_t expected = bit_cast<int32_t>(static_cast<uint32_t>(
1510 (static_cast<uint64_t>(*i) * static_cast<uint64_t>(*j)) >> 32));
1511 CHECK_EQ(expected, bt.call(bit_cast<int32_t>(*i), bit_cast<int32_t>(*j)));
1512 }
1513 }
1514 }
1515
1516
1503 TEST(RunInt32DivP) { 1517 TEST(RunInt32DivP) {
1504 { 1518 {
1505 RawMachineAssemblerTester<int32_t> m; 1519 RawMachineAssemblerTester<int32_t> m;
1506 Int32BinopTester bt(&m); 1520 Int32BinopTester bt(&m);
1507 bt.AddReturn(m.Int32Div(bt.param0, bt.param1)); 1521 bt.AddReturn(m.Int32Div(bt.param0, bt.param1));
1508 FOR_INT32_INPUTS(i) { 1522 FOR_INT32_INPUTS(i) {
1509 FOR_INT32_INPUTS(j) { 1523 FOR_INT32_INPUTS(j) {
1510 int p0 = *i; 1524 int p0 = *i;
1511 int p1 = *j; 1525 int p1 = *j;
1512 if (p1 != 0 && (static_cast<uint32_t>(p0) != 0x80000000 || p1 != -1)) { 1526 if (p1 != 0 && (static_cast<uint32_t>(p0) != 0x80000000 || p1 != -1)) {
(...skipping 1292 matching lines...) Expand 10 before | Expand all | Expand 10 after
2805 CHECK_EQ(constant, m.Call(0)); 2819 CHECK_EQ(constant, m.Call(0));
2806 } 2820 }
2807 } 2821 }
2808 } 2822 }
2809 2823
2810 2824
2811 TEST(RunDeadInt32Binops) { 2825 TEST(RunDeadInt32Binops) {
2812 RawMachineAssemblerTester<int32_t> m; 2826 RawMachineAssemblerTester<int32_t> m;
2813 2827
2814 const Operator* kOps[] = { 2828 const Operator* kOps[] = {
2815 m.machine()->Word32And(), m.machine()->Word32Or(), 2829 m.machine()->Word32And(), m.machine()->Word32Or(),
2816 m.machine()->Word32Xor(), m.machine()->Word32Shl(), 2830 m.machine()->Word32Xor(), m.machine()->Word32Shl(),
2817 m.machine()->Word32Shr(), m.machine()->Word32Sar(), 2831 m.machine()->Word32Shr(), m.machine()->Word32Sar(),
2818 m.machine()->Word32Ror(), m.machine()->Word32Equal(), 2832 m.machine()->Word32Ror(), m.machine()->Word32Equal(),
2819 m.machine()->Int32Add(), m.machine()->Int32Sub(), 2833 m.machine()->Int32Add(), m.machine()->Int32Sub(),
2820 m.machine()->Int32Mul(), m.machine()->Int32MulHigh(), 2834 m.machine()->Int32Mul(), m.machine()->Int32MulHigh(),
2821 m.machine()->Int32Div(), m.machine()->Uint32Div(), 2835 m.machine()->Int32Div(), m.machine()->Uint32Div(),
2822 m.machine()->Int32Mod(), m.machine()->Uint32Mod(), 2836 m.machine()->Int32Mod(), m.machine()->Uint32Mod(),
2823 m.machine()->Int32LessThan(), m.machine()->Int32LessThanOrEqual(), 2837 m.machine()->Uint32MulHigh(), m.machine()->Int32LessThan(),
2824 m.machine()->Uint32LessThan(), m.machine()->Uint32LessThanOrEqual()}; 2838 m.machine()->Int32LessThanOrEqual(), m.machine()->Uint32LessThan(),
2839 m.machine()->Uint32LessThanOrEqual()};
2825 2840
2826 for (size_t i = 0; i < arraysize(kOps); ++i) { 2841 for (size_t i = 0; i < arraysize(kOps); ++i) {
2827 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); 2842 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
2828 int32_t constant = static_cast<int32_t>(0x55555 + i); 2843 int32_t constant = static_cast<int32_t>(0x55555 + i);
2829 m.NewNode(kOps[i], m.Parameter(0), m.Parameter(1)); 2844 m.NewNode(kOps[i], m.Parameter(0), m.Parameter(1));
2830 m.Return(m.Int32Constant(constant)); 2845 m.Return(m.Int32Constant(constant));
2831 2846
2832 CHECK_EQ(constant, m.Call(1, 1)); 2847 CHECK_EQ(constant, m.Call(1, 1));
2833 } 2848 }
2834 } 2849 }
(...skipping 1863 matching lines...) Expand 10 before | Expand all | Expand 10 after
4698 m.Float64RoundTiesAway(m.LoadFromPointer(&input, kMachFloat64))); 4713 m.Float64RoundTiesAway(m.LoadFromPointer(&input, kMachFloat64)));
4699 m.Return(m.Int32Constant(0)); 4714 m.Return(m.Int32Constant(0));
4700 for (size_t i = 0; i < arraysize(kValues); ++i) { 4715 for (size_t i = 0; i < arraysize(kValues); ++i) {
4701 input = kValues[i]; 4716 input = kValues[i];
4702 CHECK_EQ(0, m.Call()); 4717 CHECK_EQ(0, m.Call());
4703 double expected = round(kValues[i]); 4718 double expected = round(kValues[i]);
4704 CHECK_EQ(expected, result); 4719 CHECK_EQ(expected, result);
4705 } 4720 }
4706 } 4721 }
4707 #endif // V8_TURBOFAN_TARGET 4722 #endif // V8_TURBOFAN_TARGET
OLDNEW
« no previous file with comments | « src/x64/assembler-x64.cc ('k') | test/cctest/test-disasm-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698