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

Side by Side Diff: src/compiler/instruction-selector-unittest.cc

Issue 533083002: [turbofan] Finish nodes are always marked as references. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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 | « src/compiler/instruction-selector.cc ('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 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 "src/compiler/instruction-selector-unittest.h" 5 #include "src/compiler/instruction-selector-unittest.h"
6 6
7 #include "src/flags.h" 7 #include "src/flags.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 m.Return(param); 171 m.Return(param);
172 Stream s = m.Build(kAllInstructions); 172 Stream s = m.Build(kAllInstructions);
173 EXPECT_TRUE(s.IsReference(param->id())); 173 EXPECT_TRUE(s.IsReference(param->id()));
174 } 174 }
175 175
176 176
177 // ----------------------------------------------------------------------------- 177 // -----------------------------------------------------------------------------
178 // Finish. 178 // Finish.
179 179
180 180
181 typedef InstructionSelectorTestWithParam<MachineType> 181 TARGET_TEST_F(InstructionSelectorTest, Parameter) {
182 InstructionSelectorFinishTest; 182 StreamBuilder m(this, kMachAnyTagged, kMachAnyTagged);
183
184
185 TARGET_TEST_P(InstructionSelectorFinishTest, Parameter) {
186 const MachineType type = GetParam();
187 StreamBuilder m(this, type, type);
188 Node* param = m.Parameter(0); 183 Node* param = m.Parameter(0);
189 Node* finish = m.NewNode(m.common()->Finish(1), param, m.graph()->start()); 184 Node* finish = m.NewNode(m.common()->Finish(1), param, m.graph()->start());
190 m.Return(finish); 185 m.Return(finish);
191 Stream s = m.Build(kAllInstructions); 186 Stream s = m.Build(kAllInstructions);
192 ASSERT_EQ(3U, s.size()); 187 ASSERT_EQ(3U, s.size());
193 EXPECT_EQ(kArchNop, s[0]->arch_opcode()); 188 EXPECT_EQ(kArchNop, s[0]->arch_opcode());
194 ASSERT_EQ(1U, s[0]->OutputCount()); 189 ASSERT_EQ(1U, s[0]->OutputCount());
195 ASSERT_TRUE(s[0]->Output()->IsUnallocated()); 190 ASSERT_TRUE(s[0]->Output()->IsUnallocated());
196 EXPECT_EQ(param->id(), s.ToVreg(s[0]->Output())); 191 EXPECT_EQ(param->id(), s.ToVreg(s[0]->Output()));
197 EXPECT_EQ(kArchNop, s[1]->arch_opcode()); 192 EXPECT_EQ(kArchNop, s[1]->arch_opcode());
198 ASSERT_EQ(1U, s[1]->InputCount()); 193 ASSERT_EQ(1U, s[1]->InputCount());
199 ASSERT_TRUE(s[1]->InputAt(0)->IsUnallocated()); 194 ASSERT_TRUE(s[1]->InputAt(0)->IsUnallocated());
200 EXPECT_EQ(param->id(), s.ToVreg(s[1]->InputAt(0))); 195 EXPECT_EQ(param->id(), s.ToVreg(s[1]->InputAt(0)));
201 ASSERT_EQ(1U, s[1]->OutputCount()); 196 ASSERT_EQ(1U, s[1]->OutputCount());
202 ASSERT_TRUE(s[1]->Output()->IsUnallocated()); 197 ASSERT_TRUE(s[1]->Output()->IsUnallocated());
203 EXPECT_TRUE(UnallocatedOperand::cast(s[1]->Output())->HasSameAsInputPolicy()); 198 EXPECT_TRUE(UnallocatedOperand::cast(s[1]->Output())->HasSameAsInputPolicy());
204 EXPECT_EQ(finish->id(), s.ToVreg(s[1]->Output())); 199 EXPECT_EQ(finish->id(), s.ToVreg(s[1]->Output()));
205 } 200 }
206 201
207 202
208 TARGET_TEST_P(InstructionSelectorFinishTest, PropagateDoubleness) {
209 const MachineType type = GetParam();
210 StreamBuilder m(this, type, type);
211 Node* param = m.Parameter(0);
212 Node* finish = m.NewNode(m.common()->Finish(1), param, m.graph()->start());
213 m.Return(finish);
214 Stream s = m.Build(kAllInstructions);
215 EXPECT_EQ(s.IsDouble(param->id()), s.IsDouble(finish->id()));
216 }
217
218
219 TARGET_TEST_P(InstructionSelectorFinishTest, PropagateReferenceness) {
220 const MachineType type = GetParam();
221 StreamBuilder m(this, type, type);
222 Node* param = m.Parameter(0);
223 Node* finish = m.NewNode(m.common()->Finish(1), param, m.graph()->start());
224 m.Return(finish);
225 Stream s = m.Build(kAllInstructions);
226 EXPECT_EQ(s.IsReference(param->id()), s.IsReference(finish->id()));
227 }
228
229
230 INSTANTIATE_TEST_CASE_P(InstructionSelectorTest, InstructionSelectorFinishTest,
231 ::testing::Values(kMachFloat64, kMachInt8, kMachUint8,
232 kMachInt16, kMachUint16, kMachInt32,
233 kMachUint32, kMachInt64, kMachUint64,
234 kMachPtr, kMachAnyTagged));
235
236
237 // ----------------------------------------------------------------------------- 203 // -----------------------------------------------------------------------------
238 // Finish. 204 // Phi.
239 205
240 206
241 typedef InstructionSelectorTestWithParam<MachineType> 207 typedef InstructionSelectorTestWithParam<MachineType>
242 InstructionSelectorPhiTest; 208 InstructionSelectorPhiTest;
243 209
244 210
245 TARGET_TEST_P(InstructionSelectorPhiTest, PropagateDoubleness) { 211 TARGET_TEST_P(InstructionSelectorPhiTest, PropagateDoubleness) {
246 const MachineType type = GetParam(); 212 const MachineType type = GetParam();
247 StreamBuilder m(this, type, type, type); 213 StreamBuilder m(this, type, type, type);
248 Node* param0 = m.Parameter(0); 214 Node* param0 = m.Parameter(0);
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 EXPECT_EQ(context->id(), s.ToVreg(call_instr->InputAt(7))); 388 EXPECT_EQ(context->id(), s.ToVreg(call_instr->InputAt(7)));
423 389
424 EXPECT_EQ(kArchRet, s[index++]->arch_opcode()); 390 EXPECT_EQ(kArchRet, s[index++]->arch_opcode());
425 391
426 EXPECT_EQ(index, s.size()); 392 EXPECT_EQ(index, s.size());
427 } 393 }
428 394
429 } // namespace compiler 395 } // namespace compiler
430 } // namespace internal 396 } // namespace internal
431 } // namespace v8 397 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/instruction-selector.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698