[LLVMdev] Bug in SUB expansion going back to LLVM 2.6

Owen Anderson resistor at mac.com
Mon May 21 15:40:33 PDT 2012


Applied in r157215.

--Owen

On May 21, 2012, at 11:21 AM, "Villmow, Micah" <Micah.Villmow at amd.com> 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.
> <isd_sub_expand.diff>_______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120521/e9ca4570/attachment.html>


More information about the llvm-dev mailing list