On Feb 12, 2008, at 6:46 PM, Evan Cheng wrote: > Author: evancheng > Date: Tue Feb 12 20:46:49 2008 > New Revision: 47043 > > URL: http://llvm.org/viewvc/llvm-project?rev=47043&view=rev > Log: > commuteInstr() can now commute non-ssa machine instrs. > > Modified: > llvm/trunk/lib/CodeGen/TargetInstrInfoImpl.cpp > llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp > llvm/trunk/lib/Target/X86/X86InstrInfo.cpp > > Modified: llvm/trunk/lib/CodeGen/TargetInstrInfoImpl.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetInstrInfoImpl.cpp?rev=47043&r1=47042&r2=47043&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/CodeGen/TargetInstrInfoImpl.cpp (original) > +++ llvm/trunk/lib/CodeGen/TargetInstrInfoImpl.cpp Tue Feb 12 > 20:46:49 2008 > @@ -23,8 +23,17 @@ > "This only knows how to commute register operands so far"); > unsigned Reg1 = MI->getOperand(1).getReg(); > unsigned Reg2 = MI->getOperand(2).getReg(); > + MachineOperand &MO = MI->getOperand(0); > + bool UpdateReg0 = MO.isReg() && MO.getReg() == Reg1; > bool Reg1IsKill = MI->getOperand(1).isKill(); > bool Reg2IsKill = MI->getOperand(2).isKill(); > + if (UpdateReg0) {
Why not just use: if (MO.isReg() && MO.getReg() == Reg1) Further, does it even make sense for instructions to be marked commutable if the first operand isn't a register? Why not just use: if (MO.getReg() == Reg1) Bonus points for making tblgen reject instructions marked commutable that don't start with three register operands. -Chris _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits