[ARM64] Fix "Cannot select" for vector ctpop
authorAdam Nemet <anemet@apple.com>
Thu, 17 Apr 2014 01:01:37 +0000 (01:01 +0000)
committerAdam Nemet <anemet@apple.com>
Thu, 17 Apr 2014 01:01:37 +0000 (01:01 +0000)
commite1a38f70414e10c7ac239dcc5b72fcdf6df1ccdb
treef75427a239cbed92f2425dc65a583c8971272387
parentd6312bbbbd7739c8bfd8cc1ddad7662b1c6ee158
[ARM64] Fix "Cannot select" for vector ctpop

The commit of r205855:

Author: Arnold Schwaighofer <aschwaighofer@apple.com>
Date:   Wed Apr 9 14:20:47 2014 +0000

    SLPVectorizer: Only vectorize intrinsics whose operands are widened equally

    The vectorizer only knows how to vectorize intrinics by widening all operands by
    the same factor.

    Patch by Tyler Nowicki!

exposed a backend bug causing a regression (Cannot select ctpop).

The commit msg is a bit confusing because the patch actually changes the
behavior for the loop-vectorizer as well.  As things got refactored into a
helper ctpop got snuck in to the trivially-vectorizable helper which is now
used by both vectorizers.  In other words, we started seeing vector-ctpops in
the backend.

This change makes ctpop LegalizeAction::Expand for the types not supported by
the byte-only CNT instruction.  We may be able to custom-lower these later to
a single CNT but this is to fix the compiler crash first.

Fixes <rdar://problem/16578951>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206433 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM64/ARM64ISelLowering.cpp
test/CodeGen/ARM64/vpopcnt.ll [new file with mode: 0644]