HomePhabricator

[AArch64][SVE] Add SPLAT_VECTOR ISD Node

Authored by huntergr on Oct 18 2019, 4:48 AM.

Description

[AArch64][SVE] Add SPLAT_VECTOR ISD Node

Adds a new ISD node to replicate a scalar value across all elements of
a vector. This is needed for scalable vectors, since BUILD_VECTOR cannot
be used.

Fixes up default type legalization for scalable vectors after the
new MVT type ranges were introduced.

At present I only use this node for scalable vectors. A DAGCombine has
been added to transform a BUILD_VECTOR into a SPLAT_VECTOR if all
elements are the same, but only if the default operation action of
Expand has been overridden by the target.

I've only added result promotion legalization for scalable vector
i8/i16/i32/i64 types in AArch64 for now.

Reviewers: t.p.northover, javed.absar, greened, cameron.mcinally, jmolloy

Reviewed By: jmolloy

Differential Revision: https://reviews.llvm.org/D47775

llvm-svn: 375222

Details

Committed
huntergrOct 18 2019, 4:48 AM
Reviewer
jmolloy
Differential Revision
D47775: [AArch64][SVE] Add SPLAT_VECTOR ISD Node
Parents
rG0c3049177402: SystemInitializerCommon fix compilation on linux
Branches
Unknown
Tags
Unknown