diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-07-10 23:26:12 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-07-10 23:26:12 +0000 |
commit | 34c75093f085c7958fa3bd31f3c4a50942d83505 (patch) | |
tree | 5da2b36d0029477df6a4e08fa8d52dc9a7d0bc19 | |
parent | 1e44ed88ebb1c381260a0b0777851277a7657587 (diff) | |
download | external_llvm-34c75093f085c7958fa3bd31f3c4a50942d83505.tar.gz external_llvm-34c75093f085c7958fa3bd31f3c4a50942d83505.tar.bz2 external_llvm-34c75093f085c7958fa3bd31f3c4a50942d83505.zip |
Use findCommutedOpIndices to find the operands to commute.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75312 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/TargetInstrInfoImpl.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/CodeGen/TargetInstrInfoImpl.cpp b/lib/CodeGen/TargetInstrInfoImpl.cpp index b9a6040cd1..97de901f43 100644 --- a/lib/CodeGen/TargetInstrInfoImpl.cpp +++ b/lib/CodeGen/TargetInstrInfoImpl.cpp @@ -18,16 +18,26 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/PseudoSourceValue.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/raw_ostream.h" using namespace llvm; // commuteInstruction - The default implementation of this method just exchanges -// operand 1 and 2. +// the two operands returned by findCommutedOpIndices. MachineInstr *TargetInstrInfoImpl::commuteInstruction(MachineInstr *MI, bool NewMI) const { const TargetInstrDesc &TID = MI->getDesc(); bool HasDef = TID.getNumDefs(); - unsigned Idx1 = HasDef ? 1 : 0; - unsigned Idx2 = HasDef ? 2 : 1; + if (HasDef && !MI->getOperand(0).isReg()) + // No idea how to commute this instruction. Target should implement its own. + return 0; + unsigned Idx1, Idx2; + if (!findCommutedOpIndices(MI, Idx1, Idx2)) { + std::string msg; + raw_string_ostream Msg(msg); + Msg << "Don't know how to commute: " << *MI; + llvm_report_error(Msg.str()); + } assert(MI->getOperand(Idx1).isReg() && MI->getOperand(Idx2).isReg() && "This only knows how to commute register operands so far"); |