@@ -3419,20 +3419,32 @@ bool DependenceInfo::tryDelinearizeFixedSize(
3419
3419
size_t SSize = Subscripts.size ();
3420
3420
for (size_t I = 1 ; I < SSize; ++I) {
3421
3421
const SCEV *S = Subscripts[I];
3422
- if (!isKnownNonNegative (S, Ptr))
3422
+ if (!isKnownNonNegative (S, Ptr)) {
3423
+ LLVM_DEBUG ({
3424
+ dbgs () << " Check failed: !isKnownNonNegative(S, Ptr)\n " ;
3425
+ dbgs () << " S: " << *S << " \n " << " Ptr: " << *Ptr << " \n " ;
3426
+ });
3423
3427
return false ;
3428
+ }
3424
3429
if (auto *SType = dyn_cast<IntegerType>(S->getType ())) {
3425
3430
const SCEV *Range = SE->getConstant (
3426
3431
ConstantInt::get (SType, DimensionSizes[I - 1 ], false ));
3427
- if (!isKnownLessThan (S, Range))
3432
+ if (!isKnownLessThan (S, Range)) {
3433
+ LLVM_DEBUG ({
3434
+ dbgs () << " Check failed: !isKnownLessThan(S, Range)\n " ;
3435
+ dbgs () << " S: " << *S << " \n "
3436
+ << " Range: " << *Range << " \n " ;
3437
+ });
3428
3438
return false ;
3439
+ }
3429
3440
}
3430
3441
}
3431
3442
return true ;
3432
3443
};
3433
3444
3434
3445
if (!AllIndicesInRange (SrcSizes, SrcSubscripts, SrcPtr) ||
3435
3446
!AllIndicesInRange (DstSizes, DstSubscripts, DstPtr)) {
3447
+ LLVM_DEBUG (dbgs () << " Check failed: AllIndicesInRange.\n " );
3436
3448
SrcSubscripts.clear ();
3437
3449
DstSubscripts.clear ();
3438
3450
return false ;
@@ -3500,17 +3512,27 @@ bool DependenceInfo::tryDelinearizeParametricSize(
3500
3512
// to the dependency checks.
3501
3513
if (!DisableDelinearizationChecks)
3502
3514
for (size_t I = 1 ; I < Size; ++I) {
3503
- if (!isKnownNonNegative (SrcSubscripts[I], SrcPtr))
3504
- return false ;
3505
-
3506
- if (!isKnownLessThan (SrcSubscripts[I], Sizes[I - 1 ]))
3507
- return false ;
3508
-
3509
- if (!isKnownNonNegative (DstSubscripts[I], DstPtr))
3510
- return false ;
3515
+ bool SNN = isKnownNonNegative (SrcSubscripts[I], SrcPtr);
3516
+ bool DNN = isKnownNonNegative (DstSubscripts[I], DstPtr);
3517
+ bool SLT = isKnownLessThan (SrcSubscripts[I], Sizes[I - 1 ]);
3518
+ bool DLT = isKnownLessThan (DstSubscripts[I], Sizes[I - 1 ]);
3519
+ if (SNN && DNN && SLT && DLT)
3520
+ continue ;
3511
3521
3512
- if (!isKnownLessThan (DstSubscripts[I], Sizes[I - 1 ]))
3513
- return false ;
3522
+ LLVM_DEBUG ({
3523
+ dbgs () << " Delinearization checks failed: can't prove the following\n " ;
3524
+ if (!SNN)
3525
+ dbgs () << " isKnownNonNegative(" << *SrcSubscripts[I] << " )\n " ;
3526
+ if (!DNN)
3527
+ dbgs () << " isKnownNonNegative(" << *DstSubscripts[I] << " )\n " ;
3528
+ if (!SLT)
3529
+ dbgs () << " isKnownLessThan(" << *SrcSubscripts[I] << " , "
3530
+ << *Sizes[I - 1 ] << " )\n " ;
3531
+ if (!DLT)
3532
+ dbgs () << " isKnownLessThan(" << *DstSubscripts[I] << " , "
3533
+ << *Sizes[I - 1 ] << " )\n " ;
3534
+ });
3535
+ return false ;
3514
3536
}
3515
3537
3516
3538
return true ;
0 commit comments