[LLVMdev] Bug in SUB expansion going back to LLVM 2.6
Marshall Clow
mclow.lists at gmail.com
Mon May 21 11:32:57 PDT 2012
On May 21, 2012, at 11:21 AM, Villmow, Micah wrote:
> I found a bug in the expansion code for SUB going back to at least LLVM 2.6 and still shows up in trunk.
> case ISD::SUB: {
> EVT VT = Node->getValueType(0);
> assert(TLI.isOperationLegalOrCustom(ISD::ADD, VT) &&
> TLI.isOperationLegalOrCustom(ISD::XOR, VT) &&
> "Don't know how to expand this subtraction!");
> Tmp1 = DAG.getNode(ISD::XOR, dl, VT, Node->getOperand(1),
> DAG.getConstant(APInt::getAllOnesValue(VT.getSizeInBits()), VT));
> Tmp1 = DAG.getNode(ISD::ADD, dl, VT, Tmp2, DAG.getConstant(1, VT));
> Results.push_back(DAG.getNode(ISD::ADD, dl, VT, Node->getOperand(0), Tmp1));
> break;
> }
>
>
> The problem is Tmp2 is not initialized and should be Tmp1 instead. This code only is hit if the architecture does not support ‘SUB’ and you need to expand it.
>
> Patch is attached, please commit if good.
It seems to me that a test case demonstrating bad code would be helpful here.
[ Not that I'm suggesting that the current code is correct… ]
-- Marshall
Marshall Clow Idio Software <mailto:mclow.lists at gmail.com>
A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly moderated down to (-1, Flamebait).
-- Yu Suzuki
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120521/6b688c40/attachment.html>
More information about the llvm-dev
mailing list