[LLVMdev] Possible missed optimization? 2.0
Borja Ferrer
borja.ferav at gmail.com
Thu Sep 9 15:31:35 PDT 2010
>>Note that the isCommutable flag is only really useful for two-address
instructions. If the two inputs are not constrained, nothing is really won
by swapping them.
Ahh i see, good to know that.
>> Does the -view-*-dags output look correct?
They do look correct, there are three Xmul_lohi blocks, one returns the low
part copied into R14 and the rest of combinations get added and merged into
R15.
Here is my selectionDAG code, i used X86's MUL code and adapted it to my
target:
case ISD::SMUL_LOHI:
case ISD::UMUL_LOHI:
{
SDValue Op1 = N->getOperand(0);
SDValue Op2 = N->getOperand(1);
unsigned LoReg = R0, HiReg = R1;
unsigned Opc = MULRdRr;
SDValue InFlag = SDValue(CurDAG->getMachineNode(Opc,
dl,
MVT::Flag,
Op1,
Op2), 0);
// Copy the low half of the result, if it is needed.
if (!SDValue(N, 0).use_empty())
{
SDValue Result =
CurDAG->getCopyFromReg(CurDAG->getEntryNode(),
dl,
LoReg,
NVT,
InFlag);
InFlag = Result.getValue(2);
ReplaceUses(SDValue(N, 0), Result);
}
// Copy the high half of the result, if it is needed.
if (!SDValue(N, 1).use_empty())
{
SDValue Result =
CurDAG->getCopyFromReg(CurDAG->getEntryNode(),
dl,
HiReg,
NVT,
InFlag);
InFlag = Result.getValue(2);
ReplaceUses(SDValue(N, 1), Result);
}
return NULL;
}
ISD::MUL is set to be expanded.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100910/e7572deb/attachment.html>
More information about the llvm-dev
mailing list