summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64
diff options
context:
space:
mode:
authorEvandro Menezes <e.menezes@samsung.com>2016-07-19 22:31:11 +0000
committerEvandro Menezes <e.menezes@samsung.com>2016-07-19 22:31:11 +0000
commit238fa76574be7f2ee88383ca377fb8f3ed587951 (patch)
treeb4eef7f2ab827f5373d6f6dc732424b406cdf52a /llvm/lib/Target/AArch64
parent5d2ea9dcf8a0f7ecc74153afd35ea782af5f1b86 (diff)
downloadbcm5719-llvm-238fa76574be7f2ee88383ca377fb8f3ed587951.tar.gz
bcm5719-llvm-238fa76574be7f2ee88383ca377fb8f3ed587951.zip
[AArch64] Properly validate the reciprocal estimation.
Add check for legal data types when expanding into a Newton series. Differential Revision: https://reviews.llvm.org/D22267 llvm-svn: 276041
Diffstat (limited to 'llvm/lib/Target/AArch64')
-rw-r--r--llvm/lib/Target/AArch64/AArch64ISelLowering.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index d6f2a190d4c..26e3b21b640 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -4568,6 +4568,12 @@ static SDValue getEstimate(const AArch64Subtarget &ST,
return SDValue();
EVT VT = Operand.getValueType();
+ if (VT != MVT::f64 && VT != MVT::v1f64 && VT != MVT::v2f64 &&
+ VT != MVT::f32 && VT != MVT::v1f32 &&
+ VT != MVT::v2f32 && VT != MVT::v4f32 &&
+ (!ST.hasFullFP16() ||
+ (VT != MVT::f16 && VT != MVT::v4f16 && VT != MVT::v8f16)))
+ return SDValue();
std::string RecipOp;
RecipOp = Opcode == (AArch64ISD::FRECPE) ? "div": "sqrt";
OpenPOWER on IntegriCloud