git: 40d5cf3f394d - stable/14 - Merge commit 37b7207651b4 from llvm-project (by zhongyunde@huawei.com):

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Sat, 20 Apr 2024 10:32:51 UTC
The branch stable/14 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=40d5cf3f394d72b9c6a9ce69cebd95d168b1fa72

commit 40d5cf3f394d72b9c6a9ce69cebd95d168b1fa72
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2024-04-15 16:24:39 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2024-04-20 10:03:26 +0000

    Merge commit 37b7207651b4 from llvm-project (by zhongyunde@huawei.com):
    
      [SimplifyCFG] Fix crash when there is unreachable large index (#88616)
    
      The large case index out of scope is dead code, but it is still be
      created for TableContents in SwitchLookupTable::SwitchLookupTable,
      so make sure the table size after growing should not get smaller.
    
      Fix https://github.com/llvm/llvm-project/issues/88607
    
    This should fix "Assertion failed: (idx < size()), function operator[]"
    when building the science/dynare port.
    
    PR:             276104, 278320
    Reported by:    yuri
    MFC after:      1 month
    
    (cherry picked from commit 514c98ba14a0f590891844d1a6bec0ac4de54489)
---
 contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index 13eae549b2ce..f95dae1842fe 100644
--- a/contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -6710,9 +6710,11 @@ static bool SwitchToLookupTable(SwitchInst *SI, IRBuilder<> &Builder,
           return SwitchLookupTable::WouldFitInRegister(
               DL, UpperBound, KV.second /* ResultType */);
         })) {
+      // There may be some case index larger than the UpperBound (unreachable
+      // case), so make sure the table size does not get smaller.
+      TableSize = std::max(UpperBound, TableSize);
       // The default branch is unreachable after we enlarge the lookup table.
       // Adjust DefaultIsReachable to reuse code path.
-      TableSize = UpperBound;
       DefaultIsReachable = false;
     }
   }