diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2006-09-19 16:41:40 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2006-09-19 16:41:40 +0000 |
commit | fa7217f970e03427838835d6672c68d722cde65d (patch) | |
tree | 2ca89e5cbae6edf97c6a0f3f87d0d603e15dd335 /llvm/lib | |
parent | f7d4a9900c763a82d905901b62fbc1065b82f88a (diff) | |
download | bcm5719-llvm-fa7217f970e03427838835d6672c68d722cde65d.tar.gz bcm5719-llvm-fa7217f970e03427838835d6672c68d722cde65d.zip |
fix header
add comments
untabify
llvm-svn: 30486
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/ARM/ARMMul.cpp | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/llvm/lib/Target/ARM/ARMMul.cpp b/llvm/lib/Target/ARM/ARMMul.cpp index b984e7dc5c5..185fb96783d 100644 --- a/llvm/lib/Target/ARM/ARMMul.cpp +++ b/llvm/lib/Target/ARM/ARMMul.cpp @@ -1,4 +1,4 @@ -//===-- ARMTargetMachine.cpp - Define TargetMachine for ARM ---------------===// +//===-- ARMMul.cpp - Define TargetMachine for A5CRM -----------------------===// // // The LLVM Compiler Infrastructure // @@ -8,6 +8,7 @@ // //===----------------------------------------------------------------------===// // +// Modify the ARM multiplication instructions so that Rd and Rm are distinct // //===----------------------------------------------------------------------===// @@ -39,25 +40,27 @@ bool FixMul::runOnMachineFunction(MachineFunction &MF) { MachineInstr *MI = I; if (MI->getOpcode() == ARM::MUL) { - MachineOperand &RdOp = MI->getOperand(0); - MachineOperand &RmOp = MI->getOperand(1); - MachineOperand &RsOp = MI->getOperand(2); + MachineOperand &RdOp = MI->getOperand(0); + MachineOperand &RmOp = MI->getOperand(1); + MachineOperand &RsOp = MI->getOperand(2); - unsigned Rd = RdOp.getReg(); - unsigned Rm = RmOp.getReg(); - unsigned Rs = RsOp.getReg(); + unsigned Rd = RdOp.getReg(); + unsigned Rm = RmOp.getReg(); + unsigned Rs = RsOp.getReg(); - if(Rd == Rm) { - Changed = true; - if (Rd != Rs) { - RmOp.setReg(Rs); - RsOp.setReg(Rm); - } else { - BuildMI(MBB, I, ARM::MOV, 3, ARM::R12).addReg(Rm).addImm(0) - .addImm(ARMShift::LSL); - RmOp.setReg(ARM::R12); - } - } + if(Rd == Rm) { + Changed = true; + if (Rd != Rs) { + //Rd and Rm must be distinct, but Rd can be equal to Rs. + //Swap Rs and Rm + RmOp.setReg(Rs); + RsOp.setReg(Rm); + } else { + BuildMI(MBB, I, ARM::MOV, 3, ARM::R12).addReg(Rm).addImm(0) + .addImm(ARMShift::LSL); + RmOp.setReg(ARM::R12); + } + } } } } |