[llvm-commits] [PATCH - ]Bug 10747 - miscompiled extractelement instruction

Eli Friedman eli.friedman at gmail.com
Tue Oct 18 14:43:46 PDT 2011


On Sat, Sep 24, 2011 at 12:17 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Sat, Sep 24, 2011 at 2:07 AM, Rotem, Nadav <nadav.rotem at intel.com> wrote:
>> Hi Eli,
>>
>> Please review the patch below, which addresses pr10747.
>>
>> Thanks,
>> Nadav
>>
>> Index: lib/CodeGen/SelectionDAG/DAGCombiner.cpp
>> ===================================================================
>> --- lib/CodeGen/SelectionDAG/DAGCombiner.cpp  (revision 140246)
>> +++ lib/CodeGen/SelectionDAG/DAGCombiner.cpp  (working copy)
>> @@ -6929,9 +6929,15 @@
>>                             DAG.getConstant(PtrOff, PtrType));
>>      }
>>
>> -    return DAG.getLoad(LVT, N->getDebugLoc(), LN0->getChain(), NewPtr,
>> -                       LN0->getPointerInfo().getWithOffset(PtrOff),
>> -                       LN0->isVolatile(), LN0->isNonTemporal(), Align);
>> +    SDValue Load =  DAG.getLoad(LVT, N->getDebugLoc(), LN0->getChain(),
>> +                           NewPtr,
>> +                           LN0->getPointerInfo().getWithOffset(PtrOff),
>> +                           LN0->isVolatile(), LN0->isNonTemporal(), Align);
>> +
>> +    WorkListRemover DeadNodes(*this);
>> +    DAG.ReplaceAllUsesOfValueWith(SDValue(LN0,1), Load.getValue(1),
>> &DeadNodes);
>> +    DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Load.getValue(0),
>> &DeadNodes);
>> +    return SDValue(N, 0);
>
> Close... I think you have to explicitly delete LN0.  (And you don't
> actually need to explcitly RAUW N; just retrn LN0.)
>
>>
>>    return SDValue();
>>
>> Index: test/CodeGen/X86/vec_extract-sse4.ll
>> ===================================================================
>> --- test/CodeGen/X86/vec_extract-sse4.ll        (revision 140246)
>> +++ test/CodeGen/X86/vec_extract-sse4.ll        (working copy)
>> @@ -2,7 +2,7 @@
>> ; RUN: not grep extractps   %t
>> ; RUN: not grep pextrd      %t
>> ; RUN: not grep pshufd  %t
>> -; RUN: grep movss   %t | count 2
>> +; RUN: not grep movss   %t
>>
>> define void @t1(float* %R, <4 x float>* %P1) nounwind {
>>         %X = load <4 x float>* %P1
>
> Mind fixing this to use FileCheck while you're here?

Hi Nadav,

Did you ever end up updating this patch?

-Eli




More information about the llvm-commits mailing list