Date: Mon, 23 Sep 2019 17:05:46 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r352629 - projects/clang900-import/contrib/llvm/lib/Target/X86 Message-ID: <201909231705.x8NH5kCw044337@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909231705.x8NH5kCw044337>