diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-06-17 17:59:16 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-06-17 17:59:16 +0000 |
commit | 95350b9cd2c7ccdc5d1e2118742c1a43012c7a9f (patch) | |
tree | c74311f6aa2ecabb07ed02de256e7554d5c245d1 /lib/CodeGen/LowerSubregs.cpp | |
parent | 0b725f17e0fade6820813557fe4b6f8208b7510d (diff) | |
download | external_llvm-95350b9cd2c7ccdc5d1e2118742c1a43012c7a9f.tar.gz external_llvm-95350b9cd2c7ccdc5d1e2118742c1a43012c7a9f.tar.bz2 external_llvm-95350b9cd2c7ccdc5d1e2118742c1a43012c7a9f.zip |
It's not safe to remove SUBREG_TO_REG that looks like identity copies, e.g. movl %eax, %eax on x86-64 actually does a zero-extend.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52421 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LowerSubregs.cpp')
-rw-r--r-- | lib/CodeGen/LowerSubregs.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/lib/CodeGen/LowerSubregs.cpp b/lib/CodeGen/LowerSubregs.cpp index 296e6d45c3..e2e68d8671 100644 --- a/lib/CodeGen/LowerSubregs.cpp +++ b/lib/CodeGen/LowerSubregs.cpp @@ -108,20 +108,15 @@ bool LowerSubregsInstructionPass::LowerSubregToReg(MachineInstr *MI) { DOUT << "subreg: CONVERTING: " << *MI; - if (DstSubReg == InsReg) { - // No need to insert an identify copy instruction. - DOUT << "subreg: eliminated!"; - } else { - // Insert sub-register copy - const TargetRegisterClass *TRC0= TRI.getPhysicalRegisterRegClass(DstSubReg); - const TargetRegisterClass *TRC1= TRI.getPhysicalRegisterRegClass(InsReg); - TII.copyRegToReg(*MBB, MI, DstSubReg, InsReg, TRC0, TRC1); + // Insert sub-register copy + const TargetRegisterClass *TRC0= TRI.getPhysicalRegisterRegClass(DstSubReg); + const TargetRegisterClass *TRC1= TRI.getPhysicalRegisterRegClass(InsReg); + TII.copyRegToReg(*MBB, MI, DstSubReg, InsReg, TRC0, TRC1); #ifndef NDEBUG - MachineBasicBlock::iterator dMI = MI; - DOUT << "subreg: " << *(--dMI); + MachineBasicBlock::iterator dMI = MI; + DOUT << "subreg: " << *(--dMI); #endif - } DOUT << "\n"; MBB->remove(MI); |