This is an archive of the discontinued LLVM Phabricator instance.

[InstCombineCasts] Cast elimination for sext->lshr->trunc patterns
ClosedPublic

Authored by kuhar on Sep 1 2015, 2:00 AM.

Details

Summary

There is a trunc(lshr (zext A), Cst) optimization in InstCombineCasts that removes cast by performing the lshr on smaller types. However, currently there is no trunc(lshr (sext A), Cst) variant.

This patch add such optimization by transforming trunc(lshr (sext A), Cst) to ashr A, Cst.

Diff Detail

Repository
rL LLVM

Event Timeline

kuhar updated this revision to Diff 33669.Sep 1 2015, 2:00 AM
kuhar retitled this revision from to [InstCombineCasts] Cast elimination for sext->lshr->trunc patterns.
kuhar updated this object.
kuhar set the repository for this revision to rL LLVM.
kuhar added a subscriber: llvm-commits.
aadg accepted this revision.Sep 7 2015, 5:22 AM
aadg added a reviewer: aadg.
aadg added a subscriber: aadg.

Hi Jakub,

Thanks for looking into this. This looks good to me with some fixes addressed (see below).

lib/Transforms/InstCombine/InstCombineCasts.cpp
504

Typo: s/comming/coming/

513

Typo: s/destanation/destination/

516–517

Isn't this comment redundant with the previous one ?

test/Transforms/InstCombine/cast.ll
1072–1073

Here you should pattern match the result, and reuse it when checking the return. This will make the test more robust if anything changes in the naming of the values.

1084–1085

Same. Use pattern matching.

1096–1099

Same.

This revision is now accepted and ready to land.Sep 7 2015, 5:22 AM
kuhar marked 6 inline comments as done.Sep 8 2015, 2:18 AM
kuhar updated this revision to Diff 34203.Sep 8 2015, 2:20 AM
kuhar edited edge metadata.

Typos fixed, regexes used in test-cases.

This revision was automatically updated to reflect the committed changes.
kuhar updated this revision to Diff 34419.Sep 10 2015, 2:20 AM

Fix for PR24763