mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-12 03:32:10 +00:00
Do not issue identity copies.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52373 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9b93dd1f1a
commit
c3de802ad9
@ -108,15 +108,20 @@ bool LowerSubregsInstructionPass::LowerSubregToReg(MachineInstr *MI) {
|
|||||||
|
|
||||||
DOUT << "subreg: CONVERTING: " << *MI;
|
DOUT << "subreg: CONVERTING: " << *MI;
|
||||||
|
|
||||||
// Insert sub-register copy
|
if (DstSubReg == InsReg) {
|
||||||
const TargetRegisterClass *TRC0 = TRI.getPhysicalRegisterRegClass(DstSubReg);
|
// No need to insert an identify copy instruction.
|
||||||
const TargetRegisterClass *TRC1 = TRI.getPhysicalRegisterRegClass(InsReg);
|
DOUT << "subreg: eliminated!";
|
||||||
TII.copyRegToReg(*MBB, MI, DstSubReg, InsReg, TRC0, TRC1);
|
} 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);
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
MachineBasicBlock::iterator dMI = MI;
|
MachineBasicBlock::iterator dMI = MI;
|
||||||
DOUT << "subreg: " << *(--dMI);
|
DOUT << "subreg: " << *(--dMI);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
DOUT << "\n";
|
DOUT << "\n";
|
||||||
MBB->remove(MI);
|
MBB->remove(MI);
|
||||||
@ -149,15 +154,19 @@ bool LowerSubregsInstructionPass::LowerInsert(MachineInstr *MI) {
|
|||||||
|
|
||||||
DOUT << "subreg: CONVERTING: " << *MI;
|
DOUT << "subreg: CONVERTING: " << *MI;
|
||||||
|
|
||||||
// Insert sub-register copy
|
if (DstSubReg == InsReg) {
|
||||||
const TargetRegisterClass *TRC0 = TRI.getPhysicalRegisterRegClass(DstSubReg);
|
// No need to insert an identify copy instruction.
|
||||||
const TargetRegisterClass *TRC1 = TRI.getPhysicalRegisterRegClass(InsReg);
|
DOUT << "subreg: eliminated!";
|
||||||
TII.copyRegToReg(*MBB, MI, DstSubReg, InsReg, TRC0, TRC1);
|
} 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);
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
MachineBasicBlock::iterator dMI = MI;
|
MachineBasicBlock::iterator dMI = MI;
|
||||||
DOUT << "subreg: " << *(--dMI);
|
DOUT << "subreg: " << *(--dMI);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
DOUT << "\n";
|
DOUT << "\n";
|
||||||
MBB->remove(MI);
|
MBB->remove(MI);
|
||||||
|
14
test/CodeGen/X86/2008-06-16-SubregsBug.ll
Normal file
14
test/CodeGen/X86/2008-06-16-SubregsBug.ll
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin | grep mov | count 4
|
||||||
|
|
||||||
|
define i16 @test(i16* %tmp179) nounwind {
|
||||||
|
%tmp180 = load i16* %tmp179, align 2 ; <i16> [#uses=2]
|
||||||
|
%tmp184 = and i16 %tmp180, -1024 ; <i16> [#uses=1]
|
||||||
|
%tmp186 = icmp eq i16 %tmp184, -32768 ; <i1> [#uses=1]
|
||||||
|
br i1 %tmp186, label %bb189, label %bb288
|
||||||
|
|
||||||
|
bb189: ; preds = %0
|
||||||
|
ret i16 %tmp180
|
||||||
|
|
||||||
|
bb288: ; preds = %0
|
||||||
|
ret i16 32
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user