[PATCH] D26556: [InstCombine] don't widen most selects by hoisting an extend

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 12 11:37:54 PST 2016

efriedma added a comment.

I'm not sure this approach is really right... narrower isn't always better.  You're just getting lucky with your AVX2 example: `<4 x i1>` as an argument happens to get passed as a 128-bit vector.  If the compare operand were a 64-bit comparison, you'd be making the code worse; consider:

  define <4 x i64> @f(<4 x i32> %a, <4 x i64> %b, <4 x i64> %c) {
    %cmp = icmp sgt <4 x i64> %b, %c
    %ext = sext <4 x i32> %a to <4 x i64>
    %sel = select <4 x i1> %cmp, <4 x i64> %ext, <4 x i64> <i64 42, i64 42, i64 42, i64 42>
    ret <4 x i64> %sel

This is perfectly straightforward code of the sort you could write using intrinsics in C.  Move the sext, and the generated code becomes worse.


More information about the llvm-commits mailing list