[LLVMdev] Splitting a load with 2 consumers into 2 loads.

Triple Yang triple.yang at gmail.com
Sat Dec 1 19:57:17 PST 2012


Hi, Joseph, I guess getLoad() will either search an existed SDValue
*OR* create a new one for a non-existed one depending on real
parameters.

Since you use exactly the same attributes dupVal/dupNode have, no
doubt getLoad() return the old one.

I am not sure it's *volatile* that let you get a new result, you might
want to try change some other parameters and check what it turns out.

Regards.

2012/12/2 Joseph Pusdesris <joe at pusdesris.com>
>
> So I think I have made some progress.
> SDValue dupVal  = consumer->getOperand(OpNo);
> LoadSDNode *dupNode = (LoadSDNode*) dupVal.getNode();
>
> SDValue newLoad = CurDAG->getLoad(dupVal.getValueType(), dupVal.getDebugLoc(),
>                                dupVal.getOperand(0), dupVal.getOperand(1),
>                                dupNode->getPointerInfo(),
>                                dupNode->isVolatile(), dupNode->isNonTemporal(),
>                                dupNode->isInvariant(), dupNode->getAlignment(),
>                                dupNode->getTBAAInfo(), dupNode->getRanges());
> However, my problem now is that it will re-use the same load still.  If I change something, like setting volatile to true for example, it will create a new node, but otherwise it will not.  Any ideas?
> -Joe
>
>
> On Fri, Nov 30, 2012 at 9:55 PM, Joseph Pusdesris <joe at pusdesris.com> wrote:
>>
>> Hi, I am writing an llvm target and I need both loads for isel reasons, but I am struggling to find the right way.  I have been trying to use DAG.getLoad() to make a copy, then just change the operand in the consumers, but I cannot seem to get all of the arguments needed for that function in order to make the copy.  Any help would be great, thanks!
>> -Joe
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



--
æšć‹‡ć‹‡ (Yang Yongyong)




More information about the llvm-dev mailing list