Author: Tejas Joshi Date: 2023-09-11T08:56:18+02:00 New Revision: a9f083d30500565091626213f9775f89b1376335
URL: https://github.com/llvm/llvm-project/commit/a9f083d30500565091626213f9775f89b1376335 DIFF: https://github.com/llvm/llvm-project/commit/a9f083d30500565091626213f9775f89b1376335.diff LOG: [SCEV] Fix potentially empty set for unsigned ranges The following commit enabled the analysis of ranges for heap allocations: 22ca38da25e19a7c5fcfeb3f22159aba92ec381e The range turns out to be empty in cases such as the one in test (which is [1,1)), leading to an assertion failure. This patch fixes for the same case. Fixes https://github.com/llvm/llvm-project/issues/63856 Reviewed By: fhahn Differential Revision: https://reviews.llvm.org/D159160 (cherry picked from commit 0609b65aaf03b083d282a4ffe8bf660351dac461) Added: Modified: llvm/lib/Analysis/ScalarEvolution.cpp llvm/test/Analysis/ScalarEvolution/malloc.ll Removed: ################################################################################ diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 111d4d30aab9611..39ab48b4a48e176 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -6833,7 +6833,7 @@ const ConstantRange &ScalarEvolution::getRangeRef( if (llvm::isKnownNonZero(V, DL)) MinVal = Align; ConservativeResult = ConservativeResult.intersectWith( - {MinVal, MaxVal + 1}, RangeType); + ConstantRange::getNonEmpty(MinVal, MaxVal + 1), RangeType); } } diff --git a/llvm/test/Analysis/ScalarEvolution/malloc.ll b/llvm/test/Analysis/ScalarEvolution/malloc.ll index 80d1d65c7981de9..578220cf5c37cc5 100644 --- a/llvm/test/Analysis/ScalarEvolution/malloc.ll +++ b/llvm/test/Analysis/ScalarEvolution/malloc.ll @@ -23,4 +23,15 @@ define ptr @f2() { ret ptr %alloc } +define ptr @undefined_max() { +; CHECK-LABEL: 'undefined_max' +; CHECK-NEXT: Classifying expressions for: @undefined_max +; CHECK-NEXT: %alloc = call nonnull ptr @malloc(i64 -1) +; CHECK-NEXT: --> %alloc U: full-set S: full-set +; CHECK-NEXT: Determining loop execution counts for: @undefined_max +; + %alloc = call nonnull ptr @malloc(i64 -1) + ret ptr %alloc +} + declare noalias noundef ptr @malloc(i64 noundef) allockind("alloc,uninitialized") allocsize(0) _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
