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

Side by Side Diff: src/IceOperand.cpp

Issue 2313293002: [SubZero] Implement address optimization for MIPS (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 4 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
OLDNEW
1 //===- subzero/src/IceOperand.cpp - High-level operand implementation -----===// 1 //===- subzero/src/IceOperand.cpp - High-level operand implementation -----===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 /// 9 ///
10 /// \file 10 /// \file
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 Definitions.empty() ? FirstOrSingleDefinition : Definitions.back(); 292 Definitions.empty() ? FirstOrSingleDefinition : Definitions.back();
293 (void)LastInstruction; 293 (void)LastInstruction;
294 assert(LastInstruction == nullptr || 294 assert(LastInstruction == nullptr ||
295 Instr->getNumber() >= LastInstruction->getNumber()); 295 Instr->getNumber() >= LastInstruction->getNumber());
296 } 296 }
297 } 297 }
298 constexpr bool IsImplicit = false; 298 constexpr bool IsImplicit = false;
299 markUse(TrackingKind, Instr, Node, IsImplicit); 299 markUse(TrackingKind, Instr, Node, IsImplicit);
300 if (TrackingKind == VMK_Uses) 300 if (TrackingKind == VMK_Uses)
301 return; 301 return;
302 if (FirstOrSingleDefinition == nullptr) 302 if (FirstOrSingleDefinition == nullptr) {
303 FirstOrSingleDefinition = Instr; 303 FirstOrSingleDefinition = Instr;
304 else if (TrackingKind == VMK_All) 304 FirstOrSingleDefinitionNode = Node;
305 } else if (TrackingKind == VMK_All)
305 Definitions.push_back(Instr); 306 Definitions.push_back(Instr);
306 switch (MultiDef) { 307 switch (MultiDef) {
307 case MDS_Unknown: 308 case MDS_Unknown:
308 assert(SingleDefNode == nullptr); 309 assert(SingleDefNode == nullptr);
309 MultiDef = MDS_SingleDef; 310 MultiDef = MDS_SingleDef;
310 SingleDefNode = Node; 311 SingleDefNode = Node;
311 break; 312 break;
312 case MDS_SingleDef: 313 case MDS_SingleDef:
313 assert(SingleDefNode); 314 assert(SingleDefNode);
314 if (Node == SingleDefNode) { 315 if (Node == SingleDefNode) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 case MDS_MultiDefMultiBlock: 351 case MDS_MultiDefMultiBlock:
351 case MDS_MultiDefSingleBlock: 352 case MDS_MultiDefSingleBlock:
352 return nullptr; 353 return nullptr;
353 case MDS_SingleDef: 354 case MDS_SingleDef:
354 assert(FirstOrSingleDefinition); 355 assert(FirstOrSingleDefinition);
355 return FirstOrSingleDefinition; 356 return FirstOrSingleDefinition;
356 } 357 }
357 return nullptr; 358 return nullptr;
358 } 359 }
359 360
361 const CfgNode *VariableTracking::getSingleDefinitionNode() const {
362 switch (MultiDef) {
363 case MDS_Unknown:
364 case MDS_MultiDefMultiBlock:
365 case MDS_MultiDefSingleBlock:
366 return nullptr;
367 case MDS_SingleDef:
368 assert(FirstOrSingleDefinitionNode);
369 return FirstOrSingleDefinitionNode;
370 }
371 return nullptr;
372 }
373
360 const Inst *VariableTracking::getFirstDefinition() const { 374 const Inst *VariableTracking::getFirstDefinition() const {
361 switch (MultiDef) { 375 switch (MultiDef) {
362 case MDS_Unknown: 376 case MDS_Unknown:
363 return nullptr; 377 return nullptr;
364 case MDS_MultiDefMultiBlock: 378 case MDS_MultiDefMultiBlock:
365 case MDS_SingleDef: 379 case MDS_SingleDef:
366 case MDS_MultiDefSingleBlock: 380 case MDS_MultiDefSingleBlock:
367 assert(FirstOrSingleDefinition); 381 assert(FirstOrSingleDefinition);
368 return FirstOrSingleDefinition; 382 return FirstOrSingleDefinition;
369 } 383 }
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 } 505 }
492 506
493 const Inst *VariablesMetadata::getSingleDefinition(const Variable *Var) const { 507 const Inst *VariablesMetadata::getSingleDefinition(const Variable *Var) const {
494 assert(Kind != VMK_Uses); 508 assert(Kind != VMK_Uses);
495 if (!isTracked(Var)) 509 if (!isTracked(Var))
496 return nullptr; // conservative answer 510 return nullptr; // conservative answer
497 SizeT VarNum = Var->getIndex(); 511 SizeT VarNum = Var->getIndex();
498 return Metadata[VarNum].getSingleDefinition(); 512 return Metadata[VarNum].getSingleDefinition();
499 } 513 }
500 514
515 const CfgNode *
516 VariablesMetadata::getSingleDefinitionNode(const Variable *Var) const {
517 assert(Kind != VMK_Uses);
518 if (!isTracked(Var))
519 return nullptr; // conservative answer
520 SizeT VarNum = Var->getIndex();
521 return Metadata[VarNum].getSingleDefinitionNode();
522 }
523
501 const Inst *VariablesMetadata::getFirstDefinition(const Variable *Var) const { 524 const Inst *VariablesMetadata::getFirstDefinition(const Variable *Var) const {
502 assert(Kind != VMK_Uses); 525 assert(Kind != VMK_Uses);
503 if (!isTracked(Var)) 526 if (!isTracked(Var))
504 return nullptr; // conservative answer 527 return nullptr; // conservative answer
505 SizeT VarNum = Var->getIndex(); 528 SizeT VarNum = Var->getIndex();
506 return Metadata[VarNum].getFirstDefinition(); 529 return Metadata[VarNum].getFirstDefinition();
507 } 530 }
508 531
509 const InstDefList & 532 const InstDefList &
510 VariablesMetadata::getLatterDefinitions(const Variable *Var) const { 533 VariablesMetadata::getLatterDefinitions(const Variable *Var) const {
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 if (getType() != IceType_i32 && getType() != IceType_i16 && 682 if (getType() != IceType_i32 && getType() != IceType_i16 &&
660 getType() != IceType_i8) 683 getType() != IceType_i8)
661 return false; 684 return false;
662 // The Following checks if the signed representation of Value is between 685 // The Following checks if the signed representation of Value is between
663 // -Threshold/2 and +Threshold/2 686 // -Threshold/2 and +Threshold/2
664 bool largerThanThreshold = Threshold / 2 + Value >= Threshold; 687 bool largerThanThreshold = Threshold / 2 + Value >= Threshold;
665 return largerThanThreshold; 688 return largerThanThreshold;
666 } 689 }
667 690
668 } // end of namespace Ice 691 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceOperand.h ('k') | src/IceTargetLoweringMIPS32.h » ('j') | src/IceTargetLoweringMIPS32.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698