comparison lib/CodeGen/WinEHPrepare.cpp @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents 803732b1fca8
children c2174574ed3a
comparison
equal deleted inserted replaced
133:c60214abe0e8 134:3a76565eade5
836 }; 836 };
837 837
838 for (auto &BBMapping : Orig2Clone) { 838 for (auto &BBMapping : Orig2Clone) {
839 BasicBlock *OldBlock = BBMapping.first; 839 BasicBlock *OldBlock = BBMapping.first;
840 BasicBlock *NewBlock = BBMapping.second; 840 BasicBlock *NewBlock = BBMapping.second;
841 for (Instruction &OldI : *OldBlock) { 841 for (PHINode &OldPN : OldBlock->phis()) {
842 auto *OldPN = dyn_cast<PHINode>(&OldI); 842 UpdatePHIOnClonedBlock(&OldPN, /*IsForOldBlock=*/true);
843 if (!OldPN) 843 }
844 break; 844 for (PHINode &NewPN : NewBlock->phis()) {
845 UpdatePHIOnClonedBlock(OldPN, /*IsForOldBlock=*/true); 845 UpdatePHIOnClonedBlock(&NewPN, /*IsForOldBlock=*/false);
846 }
847 for (Instruction &NewI : *NewBlock) {
848 auto *NewPN = dyn_cast<PHINode>(&NewI);
849 if (!NewPN)
850 break;
851 UpdatePHIOnClonedBlock(NewPN, /*IsForOldBlock=*/false);
852 } 846 }
853 } 847 }
854 848
855 // Check to see if SuccBB has PHI nodes. If so, we need to add entries to 849 // Check to see if SuccBB has PHI nodes. If so, we need to add entries to
856 // the PHI nodes for NewBB now. 850 // the PHI nodes for NewBB now.
857 for (auto &BBMapping : Orig2Clone) { 851 for (auto &BBMapping : Orig2Clone) {
858 BasicBlock *OldBlock = BBMapping.first; 852 BasicBlock *OldBlock = BBMapping.first;
859 BasicBlock *NewBlock = BBMapping.second; 853 BasicBlock *NewBlock = BBMapping.second;
860 for (BasicBlock *SuccBB : successors(NewBlock)) { 854 for (BasicBlock *SuccBB : successors(NewBlock)) {
861 for (Instruction &SuccI : *SuccBB) { 855 for (PHINode &SuccPN : SuccBB->phis()) {
862 auto *SuccPN = dyn_cast<PHINode>(&SuccI);
863 if (!SuccPN)
864 break;
865
866 // Ok, we have a PHI node. Figure out what the incoming value was for 856 // Ok, we have a PHI node. Figure out what the incoming value was for
867 // the OldBlock. 857 // the OldBlock.
868 int OldBlockIdx = SuccPN->getBasicBlockIndex(OldBlock); 858 int OldBlockIdx = SuccPN.getBasicBlockIndex(OldBlock);
869 if (OldBlockIdx == -1) 859 if (OldBlockIdx == -1)
870 break; 860 break;
871 Value *IV = SuccPN->getIncomingValue(OldBlockIdx); 861 Value *IV = SuccPN.getIncomingValue(OldBlockIdx);
872 862
873 // Remap the value if necessary. 863 // Remap the value if necessary.
874 if (auto *Inst = dyn_cast<Instruction>(IV)) { 864 if (auto *Inst = dyn_cast<Instruction>(IV)) {
875 ValueToValueMapTy::iterator I = VMap.find(Inst); 865 ValueToValueMapTy::iterator I = VMap.find(Inst);
876 if (I != VMap.end()) 866 if (I != VMap.end())
877 IV = I->second; 867 IV = I->second;
878 } 868 }
879 869
880 SuccPN->addIncoming(IV, NewBlock); 870 SuccPN.addIncoming(IV, NewBlock);
881 } 871 }
882 } 872 }
883 } 873 }
884 874
885 for (ValueToValueMapTy::value_type VT : VMap) { 875 for (ValueToValueMapTy::value_type VT : VMap) {