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 | b8dd4ebdab0aba135dabfba06749c1c4a0c382ac (patch) | |
tree | c74311f6aa2ecabb07ed02de256e7554d5c245d1 | |
parent | eeba6ff57781ad456a903cbc93ae4ce77d6ee593 (diff) | |
download | external_llvm-b8dd4ebdab0aba135dabfba06749c1c4a0c382ac.zip external_llvm-b8dd4ebdab0aba135dabfba06749c1c4a0c382ac.tar.gz external_llvm-b8dd4ebdab0aba135dabfba06749c1c4a0c382ac.tar.bz2 |
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
-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 296e6d4..e2e68d8 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); |