svn commit: r354803 - in stable: 11/contrib/llvm/lib/Transforms/InstCombine 12/contrib/llvm/lib/Transforms/InstCombine
Ronald Klop
ronald-lists at klop.ws
Thu Nov 21 15:06:32 UTC 2019
On Mon, 18 Nov 2019 08:04:59 +0100, Dimitry Andric <dim at freebsd.org> wrote:
> Author: dim
> Date: Mon Nov 18 07:04:59 2019
> New Revision: 354803
> URL: https://svnweb.freebsd.org/changeset/base/354803
>
> Log:
> MFC r354724:
> Merge commit 5bbb604bb from llvm git (by Craig Topper):
> [InstCombine] Disable some portions of foldGEPICmp for GEPs that
> return a vector of pointers. Fix other portions.
> llvm-svn: 370114
> This should fix instances of 'Assertion failed: (isa<X>(Val) &&
> "cast<Ty>() argument of incompatible type!"), function cast, file
> /usr/src/contrib/llvm/include/llvm/Support/Casting.h, line 255', when
> building openjdk8 for aarch64 and armv7.
> Reported by: jbeich
> PR: 236566
>
Are there plans for an errata notice for releng-12.1 with this fix? That
would keep Openjdk8 as a pkg on aarch64 after 12.0 goes EOL and pkgs will
be build on 12.1.
If no plans exist how do I request this formally?
Regards,
Ronald.
> Modified:
> stable/11/contrib/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
> Directory Properties:
> stable/11/ (props changed)
>
> Changes in other areas also in this revision:
> Modified:
> stable/12/contrib/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
> Directory Properties:
> stable/12/ (props changed)
>
> Modified:
> stable/11/contrib/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
> ==============================================================================
> ---
> stable/11/contrib/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp Mon
> Nov 18 04:22:04 2019 (r354802)
> +++
> stable/11/contrib/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp Mon
> Nov 18 07:04:59 2019 (r354803)
> @@ -830,6 +830,10 @@ getAsConstantIndexedAddress(Value *V, const
> DataLayout
> static Instruction *transformToIndexedCompare(GEPOperator *GEPLHS,
> Value *RHS,
> ICmpInst::Predicate Cond,
> const DataLayout &DL) {
> + // FIXME: Support vector of pointers.
> + if (GEPLHS->getType()->isVectorTy())
> + return nullptr;
> +
> if (!GEPLHS->hasAllConstantIndices())
> return nullptr;
> @@ -880,7 +884,9 @@ Instruction *InstCombiner::foldGEPICmp(GEPOperator
> *GE
> RHS = RHS->stripPointerCasts();
> Value *PtrBase = GEPLHS->getOperand(0);
> - if (PtrBase == RHS && GEPLHS->isInBounds()) {
> + // FIXME: Support vector pointer GEPs.
> + if (PtrBase == RHS && GEPLHS->isInBounds() &&
> + !GEPLHS->getType()->isVectorTy()) {
> // ((gep Ptr, OFFSET) cmp Ptr) ---> (OFFSET cmp 0).
> // This transformation (ignoring the base and scales) is valid
> because we
> // know pointers can't overflow since the gep is inbounds. See if
> we can
> @@ -914,11 +920,13 @@ Instruction *InstCombiner::foldGEPICmp(GEPOperator
> *GE
> // If we're comparing GEPs with two base pointers that only
> differ in type
> // and both GEPs have only constant indices or just one use, then
> fold
> // the compare with the adjusted indices.
> + // FIXME: Support vector of pointers.
> if (GEPLHS->isInBounds() && GEPRHS->isInBounds() &&
> (GEPLHS->hasAllConstantIndices() || GEPLHS->hasOneUse()) &&
> (GEPRHS->hasAllConstantIndices() || GEPRHS->hasOneUse()) &&
> PtrBase->stripPointerCasts() ==
> - GEPRHS->getOperand(0)->stripPointerCasts()) {
> + GEPRHS->getOperand(0)->stripPointerCasts() &&
> + !GEPLHS->getType()->isVectorTy()) {
> Value *LOffset = EmitGEPOffset(GEPLHS);
> Value *ROffset = EmitGEPOffset(GEPRHS);
> @@ -962,15 +970,20 @@ Instruction *InstCombiner::foldGEPICmp(GEPOperator
> *GE
> unsigned DiffOperand = 0; // The operand that differs.
> for (unsigned i = 1, e = GEPRHS->getNumOperands(); i != e; ++i)
> if (GEPLHS->getOperand(i) != GEPRHS->getOperand(i)) {
> - if
> (GEPLHS->getOperand(i)->getType()->getPrimitiveSizeInBits() !=
> -
> GEPRHS->getOperand(i)->getType()->getPrimitiveSizeInBits()) {
> + Type *LHSType = GEPLHS->getOperand(i)->getType();
> + Type *RHSType = GEPRHS->getOperand(i)->getType();
> + // FIXME: Better support for vector of pointers.
> + if (LHSType->getPrimitiveSizeInBits() !=
> + RHSType->getPrimitiveSizeInBits() ||
> + (GEPLHS->getType()->isVectorTy() &&
> + (!LHSType->isVectorTy() || !RHSType->isVectorTy()))) {
> // Irreconcilable differences.
> NumDifferences = 2;
> break;
> - } else {
> - if (NumDifferences++) break;
> - DiffOperand = i;
> }
> +
> + if (NumDifferences++) break;
> + DiffOperand = i;
> }
> if (NumDifferences == 0) // SAME GEP?
> _______________________________________________
> svn-src-all at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the svn-src-stable-11
mailing list