diff options
author | Evan Cheng <evan.cheng@apple.com> | 2007-01-30 02:35:32 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2007-01-30 02:35:32 +0000 |
commit | 1cd3c0efb8b3f908a53dab683dd18e48ad6b7677 (patch) | |
tree | 03ca3a623dc8c63c72f43895927bd95f6a25e0b1 /llvm/lib/Target/ARM | |
parent | 7fa6964dc2df14a626fc5b1c90f9e747d60defef (diff) | |
download | bcm5719-llvm-1cd3c0efb8b3f908a53dab683dd18e48ad6b7677.tar.gz bcm5719-llvm-1cd3c0efb8b3f908a53dab683dd18e48ad6b7677.zip |
Change the operand orders to t_addrmode_s* to make it easier to morph
instructions that use these address modes to instructions that use
t_addrmode_sp.
llvm-svn: 33651
Diffstat (limited to 'llvm/lib/Target/ARM')
-rw-r--r-- | llvm/lib/Target/ARM/ARMAsmPrinter.cpp | 22 | ||||
-rw-r--r-- | llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp | 30 | ||||
-rw-r--r-- | llvm/lib/Target/ARM/ARMInstrThumb.td | 6 |
3 files changed, 26 insertions, 32 deletions
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp index 7e95c9c36ad..b73c4109e5f 100644 --- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp @@ -523,7 +523,8 @@ void ARMAsmPrinter::printThumbAddrModeRI5Operand(const MachineInstr *MI, int Op, unsigned Scale) { const MachineOperand &MO1 = MI->getOperand(Op); - const MachineOperand &MO2 = MI->getOperand(Op+2); + const MachineOperand &MO2 = MI->getOperand(Op+1); + const MachineOperand &MO3 = MI->getOperand(Op+2); if (!MO1.isRegister()) { // FIXME: This is for CP entries, but isn't right. printOperand(MI, Op); @@ -531,7 +532,9 @@ ARMAsmPrinter::printThumbAddrModeRI5Operand(const MachineInstr *MI, int Op, } O << "[" << TM.getRegisterInfo()->get(MO1.getReg()).Name; - if (unsigned ImmOffs = MO2.getImm()) { + if (MO3.getReg()) + O << ", " << TM.getRegisterInfo()->get(MO3.getReg()).Name; + else if (unsigned ImmOffs = MO2.getImm()) { O << ", #" << ImmOffs; if (Scale > 1) O << " * " << Scale; @@ -541,24 +544,15 @@ ARMAsmPrinter::printThumbAddrModeRI5Operand(const MachineInstr *MI, int Op, void ARMAsmPrinter::printThumbAddrModeS1Operand(const MachineInstr *MI, int Op) { - if (MI->getOperand(Op+1).getReg()) - printThumbAddrModeRROperand(MI, Op); - else - printThumbAddrModeRI5Operand(MI, Op, 1); + printThumbAddrModeRI5Operand(MI, Op, 1); } void ARMAsmPrinter::printThumbAddrModeS2Operand(const MachineInstr *MI, int Op) { - if (MI->getOperand(Op+1).getReg()) - printThumbAddrModeRROperand(MI, Op); - else - printThumbAddrModeRI5Operand(MI, Op, 2); + printThumbAddrModeRI5Operand(MI, Op, 2); } void ARMAsmPrinter::printThumbAddrModeS4Operand(const MachineInstr *MI, int Op) { - if (MI->getOperand(Op+1).getReg()) - printThumbAddrModeRROperand(MI, Op); - else - printThumbAddrModeRI5Operand(MI, Op, 4); + printThumbAddrModeRI5Operand(MI, Op, 4); } void ARMAsmPrinter::printThumbAddrModeSPOperand(const MachineInstr *MI,int Op) { diff --git a/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp b/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp index 4c6fce6efa5..262c856dd10 100644 --- a/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp +++ b/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp @@ -72,14 +72,14 @@ public: bool SelectThumbAddrModeRR(SDOperand Op, SDOperand N, SDOperand &Base, SDOperand &Offset); bool SelectThumbAddrModeRI5(SDOperand Op, SDOperand N, unsigned Scale, - SDOperand &Base, SDOperand &Offset, - SDOperand &OffImm); + SDOperand &Base, SDOperand &OffImm, + SDOperand &Offset); bool SelectThumbAddrModeS1(SDOperand Op, SDOperand N, SDOperand &Base, - SDOperand &Offset, SDOperand &OffImm); + SDOperand &OffImm, SDOperand &Offset); bool SelectThumbAddrModeS2(SDOperand Op, SDOperand N, SDOperand &Base, - SDOperand &Offset, SDOperand &OffImm); + SDOperand &OffImm, SDOperand &Offset); bool SelectThumbAddrModeS4(SDOperand Op, SDOperand N, SDOperand &Base, - SDOperand &Offset, SDOperand &OffImm); + SDOperand &OffImm, SDOperand &Offset); bool SelectThumbAddrModeSP(SDOperand Op, SDOperand N, SDOperand &Base, SDOperand &OffImm); @@ -375,7 +375,7 @@ bool ARMDAGToDAGISel::SelectThumbAddrModeRR(SDOperand Op, SDOperand N, bool ARMDAGToDAGISel::SelectThumbAddrModeRI5(SDOperand Op, SDOperand N, unsigned Scale, SDOperand &Base, - SDOperand &Offset, SDOperand &OffImm) { + SDOperand &OffImm, SDOperand &Offset) { if (Scale == 4) { SDOperand TmpBase, TmpOffImm; if (SelectThumbAddrModeSP(Op, N, TmpBase, TmpOffImm)) @@ -413,21 +413,21 @@ ARMDAGToDAGISel::SelectThumbAddrModeRI5(SDOperand Op, SDOperand N, } bool ARMDAGToDAGISel::SelectThumbAddrModeS1(SDOperand Op, SDOperand N, - SDOperand &Base, SDOperand &Offset, - SDOperand &OffImm) { - return SelectThumbAddrModeRI5(Op, N, 1, Base, Offset, OffImm); + SDOperand &Base, SDOperand &OffImm, + SDOperand &Offset) { + return SelectThumbAddrModeRI5(Op, N, 1, Base, OffImm, Offset); } bool ARMDAGToDAGISel::SelectThumbAddrModeS2(SDOperand Op, SDOperand N, - SDOperand &Base, SDOperand &Offset, - SDOperand &OffImm) { - return SelectThumbAddrModeRI5(Op, N, 2, Base, Offset, OffImm); + SDOperand &Base, SDOperand &OffImm, + SDOperand &Offset) { + return SelectThumbAddrModeRI5(Op, N, 2, Base, OffImm, Offset); } bool ARMDAGToDAGISel::SelectThumbAddrModeS4(SDOperand Op, SDOperand N, - SDOperand &Base, SDOperand &Offset, - SDOperand &OffImm) { - return SelectThumbAddrModeRI5(Op, N, 4, Base, Offset, OffImm); + SDOperand &Base, SDOperand &OffImm, + SDOperand &Offset) { + return SelectThumbAddrModeRI5(Op, N, 4, Base, OffImm, Offset); } bool ARMDAGToDAGISel::SelectThumbAddrModeSP(SDOperand Op, SDOperand N, diff --git a/llvm/lib/Target/ARM/ARMInstrThumb.td b/llvm/lib/Target/ARM/ARMInstrThumb.td index b99569d4a00..f806754fd5a 100644 --- a/llvm/lib/Target/ARM/ARMInstrThumb.td +++ b/llvm/lib/Target/ARM/ARMInstrThumb.td @@ -124,7 +124,7 @@ def t_addrmode_rr : Operand<i32>, def t_addrmode_s4 : Operand<i32>, ComplexPattern<i32, 3, "SelectThumbAddrModeS4", []> { let PrintMethod = "printThumbAddrModeS4Operand"; - let MIOperandInfo = (ops GPR:$base, GPR:$offsreg, i32imm:$offsimm); + let MIOperandInfo = (ops GPR:$base, i32imm:$offsimm, GPR:$offsreg); } // t_addrmode_s2 := reg + reg @@ -133,7 +133,7 @@ def t_addrmode_s4 : Operand<i32>, def t_addrmode_s2 : Operand<i32>, ComplexPattern<i32, 3, "SelectThumbAddrModeS2", []> { let PrintMethod = "printThumbAddrModeS2Operand"; - let MIOperandInfo = (ops GPR:$base, GPR:$offsreg, i32imm:$offsimm); + let MIOperandInfo = (ops GPR:$base, i32imm:$offsimm, GPR:$offsreg); } // t_addrmode_s1 := reg + reg @@ -142,7 +142,7 @@ def t_addrmode_s2 : Operand<i32>, def t_addrmode_s1 : Operand<i32>, ComplexPattern<i32, 3, "SelectThumbAddrModeS1", []> { let PrintMethod = "printThumbAddrModeS1Operand"; - let MIOperandInfo = (ops GPR:$base, GPR:$offsreg, i32imm:$offsimm); + let MIOperandInfo = (ops GPR:$base, i32imm:$offsimm, GPR:$offsreg); } // t_addrmode_sp := sp + imm8 * 4 |