[LegalizeDAG] Expand i16 bswap directly to a rotate by 8 instead of relying on DAG...
authorCraig Topper <craig.topper@intel.com>
Sun, 24 Mar 2019 17:02:14 +0000 (17:02 +0000)
committerCraig Topper <craig.topper@intel.com>
Sun, 24 Mar 2019 17:02:14 +0000 (17:02 +0000)
commit07e3071854d0d2ae91119c8143f3a20ce1247365
tree89cb04d2e4795163f0f0555edd88fb3e44ddd79d
parent4465a765ee38552e82a7e451ea62b97b1a55fbb1
[LegalizeDAG] Expand i16 bswap directly to a rotate by 8 instead of relying on DAG combine.

An i16 bswap can be implemented with an i16 rotate by 8. We previously emitted
a shift and OR sequence that DAG combine should be able to turn back into
rotate. But we might as well go there directly. If rotate isn't legal,
LegalizeDAG should further legalize it to either the opposite rotate, or the
shift and OR pattern.

I don't know of any way to get the existing DAG combine reliance to fail. So
I don't know any way to add new tests for this that wouldn't have worked
previously.

llvm-svn: 356860
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp