[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