svn commit: r352629 - projects/clang900-import/contrib/llvm/lib/Target/X86
Dimitry Andric
dim at FreeBSD.org
Mon Sep 23 17:05:47 UTC 2019
Author: dim
Date: Mon Sep 23 17:05:46 2019
New Revision: 352629
URL: https://svnweb.freebsd.org/changeset/base/352629
Log:
Pull in r372606 from upstream llvm trunk (by Sanjay Patel):
[x86] fix assert with horizontal math + broadcast of vector (PR43402)
https://bugs.llvm.org/show_bug.cgi?id=43402
This should fix 'Assertion failed: ((HOp.getValueType() == MVT::v2f64 ||
HOp.getValueType() == MVT::v4f64) && HOp.getValueType() == VT &&
"Unexpected type for h-op"), function foldShuffleOfHorizOp, file
contrib/llvm/lib/Target/X86/X86ISelLowering.cpp, line 33661' when
building the devel/llvm90 port with CPUTYPE=haswell.
PR: 240759
Modified:
projects/clang900-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp
projects/clang900-import/contrib/llvm/lib/Target/X86/X86ISelLowering.h
Modified: projects/clang900-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp
==============================================================================
--- projects/clang900-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp Mon Sep 23 15:58:54 2019 (r352628)
+++ projects/clang900-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp Mon Sep 23 17:05:46 2019 (r352629)
@@ -33651,14 +33651,14 @@ static SDValue foldShuffleOfHorizOp(SDNode *N, Selecti
// When the operands of a horizontal math op are identical, the low half of
// the result is the same as the high half. If a target shuffle is also
- // replicating low and high halves, we don't need the shuffle.
+ // replicating low and high halves (and without changing the type/length of
+ // the vector), we don't need the shuffle.
if (Opcode == X86ISD::MOVDDUP || Opcode == X86ISD::VBROADCAST) {
- if (HOp.getScalarValueSizeInBits() == 64) {
+ if (HOp.getScalarValueSizeInBits() == 64 && HOp.getValueType() == VT) {
// movddup (hadd X, X) --> hadd X, X
// broadcast (extract_vec_elt (hadd X, X), 0) --> hadd X, X
assert((HOp.getValueType() == MVT::v2f64 ||
- HOp.getValueType() == MVT::v4f64) && HOp.getValueType() == VT &&
- "Unexpected type for h-op");
+ HOp.getValueType() == MVT::v4f64) && "Unexpected type for h-op");
return updateHOp(HOp, DAG);
}
return SDValue();
Modified: projects/clang900-import/contrib/llvm/lib/Target/X86/X86ISelLowering.h
==============================================================================
--- projects/clang900-import/contrib/llvm/lib/Target/X86/X86ISelLowering.h Mon Sep 23 15:58:54 2019 (r352628)
+++ projects/clang900-import/contrib/llvm/lib/Target/X86/X86ISelLowering.h Mon Sep 23 17:05:46 2019 (r352629)
@@ -422,7 +422,8 @@ namespace llvm {
// Tests Types Of a FP Values for scalar types.
VFPCLASSS,
- // Broadcast scalar to vector.
+ // Broadcast (splat) scalar or element 0 of a vector. If the operand is
+ // a vector, this node may change the vector length as part of the splat.
VBROADCAST,
// Broadcast mask to vector.
VBROADCASTM,
More information about the svn-src-projects
mailing list