cpValue2Value now needs a vector of MachineInstr to store return values.
authorVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 19 May 2002 15:31:08 +0000 (15:31 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 19 May 2002 15:31:08 +0000 (15:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2644 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/InstrSelection/InstrSelection.cpp
lib/Target/SparcV9/InstrSelection/InstrSelection.cpp

index 1724ce448968eadfc0502d4053125ab6700d6550..0776b159747fcc567e14a53e730475e9f0e8ec3d 100644 (file)
@@ -207,26 +207,30 @@ InsertCode4AllPhisInMeth(Function *F, TargetMachine &target)
         
        // for each incoming value of the phi, insert phi elimination
        //
-        for (unsigned i = 0; i < PN->getNumIncomingValues(); ++i) {
-         // insert the copy instruction to the predecessor BB
-         MachineInstr *CpMI =
-           target.getRegInfo().cpValue2Value(PN->getIncomingValue(i),
-                                             PhiCpRes);
-          
-          vector<MachineInstr*> CpVec = FixConstantOperandsForInstr(PN, CpMI,
-                                                                    target);
-          CpVec.push_back(CpMI);
-          
-         InsertPhiElimInstructions(PN->getIncomingBlock(i), CpVec);
-       }
+        for (unsigned i = 0; i < PN->getNumIncomingValues(); ++i)
+          { // insert the copy instruction to the predecessor BB
+            vector<MachineInstr*> mvec, CpVec;
+            target.getRegInfo().cpValue2Value(PN->getIncomingValue(i), PhiCpRes,
+                                              mvec);
+            for (vector<MachineInstr*>::iterator MI=mvec.begin();
+                 MI != mvec.end(); ++MI)
+              {
+                vector<MachineInstr*> CpVec2 =
+                  FixConstantOperandsForInstr(PN, *MI, target);
+                CpVec2.push_back(*MI);
+                CpVec.insert(CpVec.end(), CpVec2.begin(), CpVec2.end());
+              }
+            
+            InsertPhiElimInstructions(PN->getIncomingBlock(i), CpVec);
+          }
+        
+        vector<MachineInstr*> mvec;
+        target.getRegInfo().cpValue2Value(PhiCpRes, PN, mvec);
         
-       MachineInstr *CpMI2 =
-         target.getRegInfo().cpValue2Value(PhiCpRes, PN);
-
        // get an iterator to machine instructions in the BB
        MachineCodeForBasicBlock& bbMvec = BB->getMachineInstrVec();
 
-       bbMvec.insert( bbMvec.begin(),  CpMI2);
+       bbMvec.insert( bbMvec.begin(), mvec.begin(), mvec.end());
       }
       else break;   // since PHI nodes can only be at the top
       
index 1724ce448968eadfc0502d4053125ab6700d6550..0776b159747fcc567e14a53e730475e9f0e8ec3d 100644 (file)
@@ -207,26 +207,30 @@ InsertCode4AllPhisInMeth(Function *F, TargetMachine &target)
         
        // for each incoming value of the phi, insert phi elimination
        //
-        for (unsigned i = 0; i < PN->getNumIncomingValues(); ++i) {
-         // insert the copy instruction to the predecessor BB
-         MachineInstr *CpMI =
-           target.getRegInfo().cpValue2Value(PN->getIncomingValue(i),
-                                             PhiCpRes);
-          
-          vector<MachineInstr*> CpVec = FixConstantOperandsForInstr(PN, CpMI,
-                                                                    target);
-          CpVec.push_back(CpMI);
-          
-         InsertPhiElimInstructions(PN->getIncomingBlock(i), CpVec);
-       }
+        for (unsigned i = 0; i < PN->getNumIncomingValues(); ++i)
+          { // insert the copy instruction to the predecessor BB
+            vector<MachineInstr*> mvec, CpVec;
+            target.getRegInfo().cpValue2Value(PN->getIncomingValue(i), PhiCpRes,
+                                              mvec);
+            for (vector<MachineInstr*>::iterator MI=mvec.begin();
+                 MI != mvec.end(); ++MI)
+              {
+                vector<MachineInstr*> CpVec2 =
+                  FixConstantOperandsForInstr(PN, *MI, target);
+                CpVec2.push_back(*MI);
+                CpVec.insert(CpVec.end(), CpVec2.begin(), CpVec2.end());
+              }
+            
+            InsertPhiElimInstructions(PN->getIncomingBlock(i), CpVec);
+          }
+        
+        vector<MachineInstr*> mvec;
+        target.getRegInfo().cpValue2Value(PhiCpRes, PN, mvec);
         
-       MachineInstr *CpMI2 =
-         target.getRegInfo().cpValue2Value(PhiCpRes, PN);
-
        // get an iterator to machine instructions in the BB
        MachineCodeForBasicBlock& bbMvec = BB->getMachineInstrVec();
 
-       bbMvec.insert( bbMvec.begin(),  CpMI2);
+       bbMvec.insert( bbMvec.begin(), mvec.begin(), mvec.end());
       }
       else break;   // since PHI nodes can only be at the top