https://github.com/kasuga-fj created https://github.com/llvm/llvm-project/pull/200781
None >From 02d839ad337f1ef04a16e0592706b5a6512bb57a Mon Sep 17 00:00:00 2001 From: Ryotaro Kasuga <[email protected]> Date: Mon, 1 Jun 2026 10:43:37 +0000 Subject: [PATCH] [DA] Fix overflow in the Exact test --- llvm/lib/Analysis/DependenceAnalysis.cpp | 14 ++++++++------ .../DependenceAnalysis/exact-siv-mul-overflow.ll | 4 +--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp b/llvm/lib/Analysis/DependenceAnalysis.cpp index aa5ae814c934f..e56207e374524 100644 --- a/llvm/lib/Analysis/DependenceAnalysis.cpp +++ b/llvm/lib/Analysis/DependenceAnalysis.cpp @@ -1588,12 +1588,14 @@ bool DependenceInfo::exactTestImpl(const SCEVAddRecExpr *Src, APInt TU(APInt::getSignedMaxValue(Bits)); APInt TL(APInt::getSignedMinValue(Bits)); - APInt TC = CM.sdiv(G); - APInt TX = X * TC; - APInt TY = Y * TC; - LLVM_DEBUG(dbgs() << "\t TC = " << TC << "\n"); - LLVM_DEBUG(dbgs() << "\t TX = " << TX << "\n"); - LLVM_DEBUG(dbgs() << "\t TY = " << TY << "\n"); + OverflowSafeSignedAPInt TC = CM.sdiv(G); + OverflowSafeSignedAPInt TX = OverflowSafeSignedAPInt(X) * TC; + OverflowSafeSignedAPInt TY = OverflowSafeSignedAPInt(Y) * TC; + if (!TC || !TX || !TY) + return false; + LLVM_DEBUG(dbgs() << "\t TC = " << *TC << "\n"); + LLVM_DEBUG(dbgs() << "\t TX = " << *TX << "\n"); + LLVM_DEBUG(dbgs() << "\t TY = " << *TY << "\n"); APInt TB = BM.sdiv(G); APInt TA = AM.sdiv(G); diff --git a/llvm/test/Analysis/DependenceAnalysis/exact-siv-mul-overflow.ll b/llvm/test/Analysis/DependenceAnalysis/exact-siv-mul-overflow.ll index 92e1f9ac565fd..5cb617099a0c8 100644 --- a/llvm/test/Analysis/DependenceAnalysis/exact-siv-mul-overflow.ll +++ b/llvm/test/Analysis/DependenceAnalysis/exact-siv-mul-overflow.ll @@ -18,15 +18,13 @@ target datalayout = "e-m:e-p:32:32-i64:64-n32-S128" ; A[5*i] | | A[750000000] ; A[8*i + 750000000]| A[750000000] | ; -; FIXME: DependenceAnalysis currently fails to detect this dependency due to -; mishandling of overflow. ; define void @exactsiv_mul_overflow(ptr %A) { ; CHECK-LABEL: 'exactsiv_mul_overflow' ; CHECK-NEXT: Src: store i8 0, ptr %src.ptr, align 1 --> Dst: store i8 0, ptr %src.ptr, align 1 ; CHECK-NEXT: da analyze - none! ; CHECK-NEXT: Src: store i8 0, ptr %src.ptr, align 1 --> Dst: store i8 1, ptr %dst.ptr, align 1 -; CHECK-NEXT: da analyze - none! +; CHECK-NEXT: da analyze - output [*|<]! ; CHECK-NEXT: Src: store i8 1, ptr %dst.ptr, align 1 --> Dst: store i8 1, ptr %dst.ptr, align 1 ; CHECK-NEXT: da analyze - none! ; _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
