git: 50593575e96b - main - devel/llvm16: update to 16.0.6 release

From: Brooks Davis <brooks_at_FreeBSD.org>
Date: Mon, 19 Jun 2023 18:44:21 UTC
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/ports/commit/?id=50593575e96b94f5de485c6216a870db44e487e0

commit 50593575e96b94f5de485c6216a870db44e487e0
Author:     Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2023-06-19 18:44:06 +0000
Commit:     Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2023-06-19 18:44:06 +0000

    devel/llvm16: update to 16.0.6 release
    
    Change the lite flavor to default to BE_FREEBSD rather than BE_NATIVE to
    allow its use in cross-build CI pipelines.
    
    Backport fix for LLVM bug 61396. [0]  This fixes miscompilation of gcc
    on 32-bit arm.
    
    PR:             271992 [0]
    Reported by:    jfc@mit.edu [0]
---
 devel/llvm16/Makefile                       |  4 +--
 devel/llvm16/distinfo                       |  6 ++---
 devel/llvm16/files/patch-backport-962c306a1 | 42 +++++++++++++++++++++++++++++
 3 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/devel/llvm16/Makefile b/devel/llvm16/Makefile
index 90aa66b02610..6fe1894268ad 100644
--- a/devel/llvm16/Makefile
+++ b/devel/llvm16/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	llvm
-DISTVERSION=	16.0.5
+DISTVERSION=	16.0.6
 PORTREVISION=	0
 CATEGORIES=	devel lang
 MASTER_SITES=	https://github.com/llvm/llvm-project/releases/download/llvmorg-${DISTVERSION:S/rc/-rc/}/ \
@@ -100,7 +100,7 @@ OPTIONS_EXCLUDE_armv7=	COMPILER_RT
 OPTIONS_SUB=	yes
 
 .if ${FLAVOR:Mlite}
-OPTIONS_DEFAULT+=	BE_NATIVE
+OPTIONS_DEFAULT+=	BE_FREEBSD
 .else
 OPTIONS_DEFINE+=	EXTRAS FLANG LIT LLDB MLIR OPENMP PYCLANG
 OPTIONS_DEFINE_amd64=	GOLD
diff --git a/devel/llvm16/distinfo b/devel/llvm16/distinfo
index 0169bda7d36f..95efc23fe3c1 100644
--- a/devel/llvm16/distinfo
+++ b/devel/llvm16/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1685986713
-SHA256 (llvm-project-16.0.5.src.tar.xz) = 37f540124b9cfd4680666e649f557077f9937c9178489cea285a672e714b2863
-SIZE (llvm-project-16.0.5.src.tar.xz) = 118000368
+TIMESTAMP = 1686758340
+SHA256 (llvm-project-16.0.6.src.tar.xz) = ce5e71081d17ce9e86d7cbcfa28c4b04b9300f8fb7e78422b1feb6bc52c3028e
+SIZE (llvm-project-16.0.6.src.tar.xz) = 118013488
diff --git a/devel/llvm16/files/patch-backport-962c306a1 b/devel/llvm16/files/patch-backport-962c306a1
new file mode 100644
index 000000000000..1b37decff88b
--- /dev/null
+++ b/devel/llvm16/files/patch-backport-962c306a1
@@ -0,0 +1,42 @@
+commit 8e1222aee4c657e572b7d7841daf7f48ec6ba035
+Author: John F. Carr <jfc@mit.edu>
+Date:   Tue Jun 13 14:10:00 2023 -0400
+
+    LLVM commit 962c306a11d0a21c884c12e18825b8a41ba1bd7d
+
+diff --git a/contrib/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/contrib/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+index 5fd4e45d80fb..9d95cb25efa0 100644
+--- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
++++ llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+@@ -4627,11 +4627,17 @@ void LoopVectorizationCostModel::collectLoopUniforms(ElementCount VF) {
+             WideningDecision == CM_Interleave);
+   };
+ 
+-
+   // Returns true if Ptr is the pointer operand of a memory access instruction
+-  // I, and I is known to not require scalarization.
++  // I, I is known to not require scalarization, and the pointer is not also
++  // stored.
+   auto isVectorizedMemAccessUse = [&](Instruction *I, Value *Ptr) -> bool {
+-    return getLoadStorePointerOperand(I) == Ptr && isUniformDecision(I, VF);
++    auto GetStoredValue = [I]() -> Value * {
++      if (!isa<StoreInst>(I))
++        return nullptr;
++      return I->getOperand(0);
++    };
++    return getLoadStorePointerOperand(I) == Ptr && isUniformDecision(I, VF) &&
++           GetStoredValue() != Ptr;
+   };
+ 
+   // Holds a list of values which are known to have at least one uniform use.
+@@ -4679,8 +4685,8 @@ void LoopVectorizationCostModel::collectLoopUniforms(ElementCount VF) {
+       if (isa<LoadInst>(I) && Legal->isUniformMemOp(I))
+         addToWorklistIfAllowed(&I);
+ 
+-      if (isUniformDecision(&I, VF)) {
+-        assert(isVectorizedMemAccessUse(&I, Ptr) && "consistency check");
++      if (isVectorizedMemAccessUse(&I, Ptr)) {
++        assert(isUniformDecision(&I, VF) && "consistency check");
+         HasUniformUse.insert(Ptr);
+       }
+     }