[LLVMdev] Cross-Block Dead Store Elimination
Artem Dinaburg
artem at trailofbits.com
Thu Nov 6 11:08:47 PST 2014
Hi Philip,
I've attached two simplified examples: does_optimize.ll and does_not_optimize.ll.
In both examples, the load/store of %STACK_BASEVAL and %STACK_LIMITVAL should be removed, since the values are never used. The difference is that in does_optimize.ll, the store is in the same block as the load, and in does_not_optimize.dll, the store is in a different block.
When optimizing does_optimize.ll, the DeadStoreElimination pass removes the store as as "Remove Store of Load from same pointer" (http://llvm.org/docs/doxygen/html/DeadStoreElimination_8cpp_source.html#l00510).
When optimizing does_not_optimize.ll, the store is not removed, because the corresponding load is in a different block.
In both cases, we load a value and then store in back into the same location, so both load and store should be optimized out.
Thanks,
Artem Dinaburg
On Nov 5, 2014, at 7:48 PM, Philip Reames <listmail at philipreames.com> wrote:
>
> On 10/24/2014 01:17 PM, Artem Dinaburg wrote:
>> Hi,
>>
>> It looks like the DeadStoreElimination optimization doesn't work across BasicBlock boundaries. The project I'm working on (https://github.com/trailofbits/mcsema), would tremendously benefit from even simple cross-block DSE.
> If you have specific small examples which aren't getting caught, I'd be interested in seeing test cases (as bugs.)
>>
>> There was a patch to do non-local DSE few years ago (http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-January/028751.html), but seems that the patch was never merged.
>>
>> Is there an existing way to do cross-block DSE?
> EarlyCSE handles limited cases here. GVN probably could, but doesn't seem to. (Which surprises me.)
>> Was there something wrong with the original non-local DSE patch that it wasn't merged?
> I suspect it got lost in review. It looks like there were some quality issues with the original implementation and the cycle never got closed.
>>
>> Thanks,
>> Artem
>>
>>
>> _______________________________________________
>> 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/20141106/e359275c/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: does_not_optimize.ll
Type: application/octet-stream
Size: 2039 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141106/e359275c/attachment.obj>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141106/e359275c/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: does_optimize.ll
Type: application/octet-stream
Size: 2041 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141106/e359275c/attachment-0001.obj>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141106/e359275c/attachment-0002.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3869 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141106/e359275c/attachment.bin>
More information about the llvm-dev
mailing list