Mercurial > hg > CbC > CbC_llvm
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) { |