mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-02 07:17:36 +00:00
[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
This commit is contained in:
@@ -504,6 +504,10 @@ void ARM64TargetLowering::addTypeForNEON(EVT VT, EVT PromotedBitwiseVT) {
|
||||
setOperationAction(ISD::VSELECT, VT.getSimpleVT(), Expand);
|
||||
setLoadExtAction(ISD::EXTLOAD, VT.getSimpleVT(), Expand);
|
||||
|
||||
// CNT supports only B element sizes.
|
||||
if (VT != MVT::v8i8 && VT != MVT::v16i8)
|
||||
setOperationAction(ISD::CTPOP, VT.getSimpleVT(), Expand);
|
||||
|
||||
setOperationAction(ISD::UDIV, VT.getSimpleVT(), Expand);
|
||||
setOperationAction(ISD::SDIV, VT.getSimpleVT(), Expand);
|
||||
setOperationAction(ISD::UREM, VT.getSimpleVT(), Expand);
|
||||
|
||||
Reference in New Issue
Block a user