OLD | NEW |
1 //===- subzero/src/IceCfgNode.cpp - Basic block (node) implementation -----===// | 1 //===- subzero/src/IceCfgNode.cpp - Basic block (node) 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 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 Context.init(this); | 563 Context.init(this); |
564 Target->initNodeForLowering(this); | 564 Target->initNodeForLowering(this); |
565 while (!Context.atEnd()) { | 565 while (!Context.atEnd()) { |
566 InstList::iterator Orig = Context.getCur(); | 566 InstList::iterator Orig = Context.getCur(); |
567 if (llvm::isa<InstRet>(*Orig)) | 567 if (llvm::isa<InstRet>(*Orig)) |
568 setHasReturn(); | 568 setHasReturn(); |
569 Target->lower(); | 569 Target->lower(); |
570 // Ensure target lowering actually moved the cursor. | 570 // Ensure target lowering actually moved the cursor. |
571 assert(Context.getCur() != Orig); | 571 assert(Context.getCur() != Orig); |
572 } | 572 } |
| 573 Context.availabilityReset(); |
573 // Do preliminary lowering of the Phi instructions. | 574 // Do preliminary lowering of the Phi instructions. |
574 Target->prelowerPhis(); | 575 Target->prelowerPhis(); |
575 } | 576 } |
576 | 577 |
577 void CfgNode::livenessLightweight() { | 578 void CfgNode::livenessLightweight() { |
578 SizeT NumVars = Func->getNumVariables(); | 579 SizeT NumVars = Func->getNumVariables(); |
579 LivenessBV Live(NumVars); | 580 LivenessBV Live(NumVars); |
580 // Process regular instructions in reverse order. | 581 // Process regular instructions in reverse order. |
581 for (Inst &I : reverse_range(Insts)) { | 582 for (Inst &I : reverse_range(Insts)) { |
582 if (I.isDeleted()) | 583 if (I.isDeleted()) |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 bool LiveInChanged = (Live != LiveIn); | 677 bool LiveInChanged = (Live != LiveIn); |
677 Changed = (NumNonDeadPhis != PrevNumNonDeadPhis || LiveInChanged); | 678 Changed = (NumNonDeadPhis != PrevNumNonDeadPhis || LiveInChanged); |
678 if (LiveInChanged) | 679 if (LiveInChanged) |
679 LiveIn = Live; | 680 LiveIn = Live; |
680 PrevNumNonDeadPhis = NumNonDeadPhis; | 681 PrevNumNonDeadPhis = NumNonDeadPhis; |
681 return Changed; | 682 return Changed; |
682 } | 683 } |
683 | 684 |
684 // Validate the integrity of the live ranges in this block. If there are any | 685 // Validate the integrity of the live ranges in this block. If there are any |
685 // errors, it prints details and returns false. On success, it returns true. | 686 // errors, it prints details and returns false. On success, it returns true. |
686 bool CfgNode::livenessValidateIntervals(Liveness *Liveness) { | 687 bool CfgNode::livenessValidateIntervals(Liveness *Liveness) const { |
687 if (!BuildDefs::asserts()) | 688 if (!BuildDefs::asserts()) |
688 return true; | 689 return true; |
689 | 690 |
690 // Verify there are no duplicates. | 691 // Verify there are no duplicates. |
691 auto ComparePair = | 692 auto ComparePair = |
692 [](const LiveBeginEndMapEntry &A, const LiveBeginEndMapEntry &B) { | 693 [](const LiveBeginEndMapEntry &A, const LiveBeginEndMapEntry &B) { |
693 return A.first == B.first; | 694 return A.first == B.first; |
694 }; | 695 }; |
695 LiveBeginEndMap &MapBegin = *Liveness->getLiveBegin(this); | 696 LiveBeginEndMap &MapBegin = *Liveness->getLiveBegin(this); |
696 LiveBeginEndMap &MapEnd = *Liveness->getLiveEnd(this); | 697 LiveBeginEndMap &MapEnd = *Liveness->getLiveEnd(this); |
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1353 InstIntrinsicCall *Inst = InstIntrinsicCall::create( | 1354 InstIntrinsicCall *Inst = InstIntrinsicCall::create( |
1354 Func, 5, Func->makeVariable(IceType_i64), RMWI64Name, Info->Info); | 1355 Func, 5, Func->makeVariable(IceType_i64), RMWI64Name, Info->Info); |
1355 Inst->addArg(AtomicRMWOp); | 1356 Inst->addArg(AtomicRMWOp); |
1356 Inst->addArg(Counter); | 1357 Inst->addArg(Counter); |
1357 Inst->addArg(One); | 1358 Inst->addArg(One); |
1358 Inst->addArg(OrderAcquireRelease); | 1359 Inst->addArg(OrderAcquireRelease); |
1359 Insts.push_front(Inst); | 1360 Insts.push_front(Inst); |
1360 } | 1361 } |
1361 | 1362 |
1362 } // end of namespace Ice | 1363 } // end of namespace Ice |
OLD | NEW |