[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
kuhar retitled this revision from to [InstCombineCasts] Cast elimination for sext->lshr->trunc patterns.Sep 1 2015, 2:00 AM
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
503

Typo: s/comming/coming/

512

Typo: s/destanation/destination/

515–516

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

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