diff options
author | Ruchira Sasanka <sasanka@students.uiuc.edu> | 2001-11-12 14:45:33 +0000 |
---|---|---|
committer | Ruchira Sasanka <sasanka@students.uiuc.edu> | 2001-11-12 14:45:33 +0000 |
commit | 67a463ac04f439fa24ad9777e29ea487bb99b7c3 (patch) | |
tree | 2aba6708829cf87965f72caf9eec4efe149fbe67 /lib/Target/SparcV9/SparcV9RegInfo.cpp | |
parent | b2490fc4fbab28624aeef9cae6fcde31248ce797 (diff) | |
download | external_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.cpp | 49 |
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. |