aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/SparcV9/SparcV9RegInfo.cpp
diff options
context:
space:
mode:
authorRuchira Sasanka <sasanka@students.uiuc.edu>2001-11-12 14:45:33 +0000
committerRuchira Sasanka <sasanka@students.uiuc.edu>2001-11-12 14:45:33 +0000
commit67a463ac04f439fa24ad9777e29ea487bb99b7c3 (patch)
tree2aba6708829cf87965f72caf9eec4efe149fbe67 /lib/Target/SparcV9/SparcV9RegInfo.cpp
parentb2490fc4fbab28624aeef9cae6fcde31248ce797 (diff)
downloadexternal_llvm-67a463ac04f439fa24ad9777e29ea487bb99b7c3.zip
external_llvm-67a463ac04f439fa24ad9777e29ea487bb99b7c3.tar.gz
external_llvm-67a463ac04f439fa24ad9777e29ea487bb99b7c3.tar.bz2
Added phi elimination code
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1265 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/SparcV9/SparcV9RegInfo.cpp')
-rw-r--r--lib/Target/SparcV9/SparcV9RegInfo.cpp49
1 files changed, 40 insertions, 9 deletions
diff --git a/lib/Target/SparcV9/SparcV9RegInfo.cpp b/lib/Target/SparcV9/SparcV9RegInfo.cpp
index cb7009d..4040b02 100644
--- a/lib/Target/SparcV9/SparcV9RegInfo.cpp
+++ b/lib/Target/SparcV9/SparcV9RegInfo.cpp
@@ -893,7 +893,6 @@ void UltraSparcRegInfo::colorRetValue(const MachineInstr *const RetMI,
// register number
//---------------------------------------------------------------------------
-
MachineInstr * UltraSparcRegInfo::cpReg2RegMI(const unsigned SrcReg,
const unsigned DestReg,
const int RegType) const {
@@ -1040,24 +1039,56 @@ MachineInstr * UltraSparcRegInfo::cpMem2RegMI(const unsigned SrcPtrReg,
-// Following method is Not needed now
-MachineInstr* UltraSparcRegInfo::cpValue2Value(Value *Src, Value *Dest) const {
+//---------------------------------------------------------------------------
+// Generate a copy instruction to copy a value to another. Temporarily
+// used by PhiElimination code.
+//---------------------------------------------------------------------------
+
+
+MachineInstr * UltraSparcRegInfo::cpValue2Value(Value *Src, Value *Dest) const{
+
+ int RegType = getRegType( Src );
+
+ assert( (RegType==getRegType(Src)) && "Src & Dest are diff types");
MachineInstr * MI = NULL;
- MI = new MachineInstr(ADD, 3);
- MI->SetMachineOperand(0, MachineOperand:: MO_VirtualRegister, Src, false);
- MI->SetMachineOperand(1, SparcIntRegOrder::g0, false);
- MI->SetMachineOperand(2, MachineOperand:: MO_VirtualRegister, Dest, true);
-
+ switch( RegType ) {
+
+ case IntRegType:
- return MI;
+ MI = new MachineInstr(ADD, 3);
+ MI->SetMachineOperand(0, MachineOperand:: MO_VirtualRegister, Src, false);
+ MI->SetMachineOperand(1, SparcIntRegOrder::g0, false);
+ MI->SetMachineOperand(2, MachineOperand:: MO_VirtualRegister, Dest, true);
+ break;
+ case FPSingleRegType:
+ MI = new MachineInstr(FMOVS, 2);
+ MI->SetMachineOperand(0, MachineOperand:: MO_VirtualRegister, Src, false);
+ MI->SetMachineOperand(1, MachineOperand:: MO_VirtualRegister, Dest, true);
+ break;
+
+
+ case FPDoubleRegType:
+ MI = new MachineInstr(FMOVD, 2);
+ MI->SetMachineOperand(0, MachineOperand:: MO_VirtualRegister, Src, false);
+ MI->SetMachineOperand(1, MachineOperand:: MO_VirtualRegister, Dest, true);
+ break;
+
+ default:
+ assert(0 && "Unknow RegType in CpValu2Value");
+ }
+
+ return MI;
}
+
+
+
//----------------------------------------------------------------------------
// This method inserts caller saving/restoring instructons before/after
// a call machine instruction.