[TargetInstrInfo] Fix the implementation of commuteInstruction to match the
authorQuentin Colombet <qcolombet@apple.com>
Thu, 8 May 2014 23:12:27 +0000 (23:12 +0000)
committerQuentin Colombet <qcolombet@apple.com>
Thu, 8 May 2014 23:12:27 +0000 (23:12 +0000)
comment of the API.

Relaxes the behavior of TargetInstrInfo::commuteInstruction when
TargetInstrInfo::findCommutedOpIndices returns false.

Previously TargetInstrInfo triggered a fatal error in such situation whereas based
on the comment in the API it should just return nullptr. Indeed the only
precondition that should be ensured is that the instruction must be commutable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208371 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/TargetInstrInfo.cpp

index c4c9c83120f8c5c975cdced51878d0ab86ec96a2..c3f84c64d7fb15220665c50dc61b989a38245352 100644 (file)
@@ -127,10 +127,8 @@ MachineInstr *TargetInstrInfo::commuteInstruction(MachineInstr *MI,
     return nullptr;
   unsigned Idx1, Idx2;
   if (!findCommutedOpIndices(MI, Idx1, Idx2)) {
-    std::string msg;
-    raw_string_ostream Msg(msg);
-    Msg << "Don't know how to commute: " << *MI;
-    report_fatal_error(Msg.str());
+    assert(MI->isCommutable() && "Precondition violation: MI must be commutable.");
+    return nullptr;
   }
 
   assert(MI->getOperand(Idx1).isReg() && MI->getOperand(Idx2).isReg() &&