[llvm] 4a47f1c - [SelectionDAG][SVE] Support scalable vectors in getConstantFP()
Eli Friedman via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 4 15:36:03 PDT 2020
Author: Eli Friedman
Date: 2020-08-04T15:32:43-07:00
New Revision: 4a47f1c4cedb497915bba14f5288708cedb62767
URL: https://github.com/llvm/llvm-project/commit/4a47f1c4cedb497915bba14f5288708cedb62767
DIFF: https://github.com/llvm/llvm-project/commit/4a47f1c4cedb497915bba14f5288708cedb62767.diff
LOG: [SelectionDAG][SVE] Support scalable vectors in getConstantFP()
Differential Revision: https://reviews.llvm.org/D85249
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/test/CodeGen/AArch64/sve-vector-splat.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 7fdf8a82bae8..cd54834cf6ac 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -1380,7 +1380,9 @@ SDValue SelectionDAG::getConstantFP(const ConstantFP &V, const SDLoc &DL,
}
SDValue Result(N, 0);
- if (VT.isVector())
+ if (VT.isScalableVector())
+ Result = getSplatVector(VT, DL, Result);
+ else if (VT.isVector())
Result = getSplatBuildVector(VT, DL, Result);
NewSDValueDbgMsg(Result, "Creating fp constant: ", this);
return Result;
diff --git a/llvm/test/CodeGen/AArch64/sve-vector-splat.ll b/llvm/test/CodeGen/AArch64/sve-vector-splat.ll
index 043e4ea135f3..7a765002ac9f 100644
--- a/llvm/test/CodeGen/AArch64/sve-vector-splat.ll
+++ b/llvm/test/CodeGen/AArch64/sve-vector-splat.ll
@@ -355,5 +355,22 @@ define <vscale x 2 x double> @splat_nxv2f64_imm() {
ret <vscale x 2 x double> %2
}
+define <vscale x 4 x i32> @splat_nxv4i32_fold(<vscale x 4 x i32> %x) {
+; CHECK-LABEL: splat_nxv4i32_fold:
+; CHECK: mov z0.s, #0
+; CHECK-NEXT: ret
+ %r = sub <vscale x 4 x i32> %x, %x
+ ret <vscale x 4 x i32> %r
+}
+
+
+define <vscale x 4 x float> @splat_nxv4f32_fold(<vscale x 4 x float> %x) {
+; CHECK-LABEL: splat_nxv4f32_fold:
+; CHECK: mov z0.s, #0
+; CHECK-NEXT: ret
+ %r = fsub nnan <vscale x 4 x float> %x, %x
+ ret <vscale x 4 x float> %r
+}
+
; +bf16 is required for the bfloat version.
attributes #0 = { "target-features"="+sve,+bf16" }
More information about the llvm-commits
mailing list