[all-commits] [llvm/llvm-project] a511b5: [X86][SSE] getFauxShuffleMask - don't decode OR(SH...

Simon Pilgrim via All-commits all-commits at lists.llvm.org
Wed Apr 21 10:47:32 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: a511b55cfd67acecc58f1ccf1f3ce5c917dc1d90
      https://github.com/llvm/llvm-project/commit/a511b55cfd67acecc58f1ccf1f3ce5c917dc1d90
  Author: Simon Pilgrim <llvm-dev at redking.me.uk>
  Date:   2021-04-21 (Wed, 21 Apr 2021)

  Changed paths:
    M llvm/lib/Target/X86/X86ISelLowering.cpp
    M llvm/test/CodeGen/X86/shuffle-vs-trunc-256.ll
    M llvm/test/CodeGen/X86/vector-shuffle-128-v8.ll
    M llvm/test/CodeGen/X86/vector-shuffle-256-v32.ll
    M llvm/test/CodeGen/X86/vector-shuffle-combining-sse41.ll

  Log Message:
  -----------
  [X86][SSE] getFauxShuffleMask - don't decode OR(SHUFFLE,SHUFFLE) containing UNDEFs. (PR50049)

PR50049 demonstrated an infinite loop between OR(SHUFFLE,SHUFFLE) <-> BLEND(SHUFFLE,SHUFFLE) patterns.

The UNDEF elements were allowing a combined shuffle mask to be widened which lost the undef element, resulting us needing to use the BLEND pattern (as the undef element would need to be zero for the OR pattern). But then bitcast folds would re-expose the undef element allowing us to use OR again.....




More information about the All-commits mailing list