[DA] Require nsw for AddRecs involved in GCD test (#186892)
Similar to other tests, we are adding code that the AddRecs used in GCD test are `nsw`. In this case, all recursively identified `AddRec`s are also checked. Note that there is already a similar check in `getConstantCoefficient` for expressions processed in that function.
This commit is contained in:
parent
62ce560f68
commit
8a11fe97a2
@ -2087,6 +2087,8 @@ static const SCEV *analyzeCoefficientsForGCD(const SCEV *Coefficients,
|
||||
ScalarEvolution *SE) {
|
||||
while (const SCEVAddRecExpr *AddRec =
|
||||
dyn_cast<SCEVAddRecExpr>(Coefficients)) {
|
||||
if (!AddRec->hasNoSignedWrap())
|
||||
return nullptr;
|
||||
const SCEV *Coeff = AddRec->getStepRecurrence(*SE);
|
||||
// If the coefficient is the product of a constant and other stuff,
|
||||
// we can use the constant in the GCD computation.
|
||||
|
||||
@ -888,7 +888,7 @@ define void @banerjee10(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
|
||||
; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8
|
||||
; CHECK-NEXT: da analyze - none!
|
||||
; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8
|
||||
; CHECK-NEXT: da analyze - flow [<> 0]!
|
||||
; CHECK-NEXT: da analyze - flow [* 0|<]!
|
||||
; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8
|
||||
; CHECK-NEXT: da analyze - confused!
|
||||
; CHECK-NEXT: Src: %1 = load i64, ptr %arrayidx6, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8
|
||||
@ -902,7 +902,7 @@ define void @banerjee10(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {
|
||||
; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8
|
||||
; NORMALIZE-NEXT: da analyze - none!
|
||||
; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8
|
||||
; NORMALIZE-NEXT: da analyze - flow [<> 0]!
|
||||
; NORMALIZE-NEXT: da analyze - flow [* 0|<]!
|
||||
; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8
|
||||
; NORMALIZE-NEXT: da analyze - confused!
|
||||
; NORMALIZE-NEXT: Src: %1 = load i64, ptr %arrayidx6, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8
|
||||
|
||||
@ -200,7 +200,7 @@ define void @prop3(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
|
||||
; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: store i32 %conv, ptr %arrayidx4, align 4
|
||||
; CHECK-NEXT: da analyze - output [* *]!
|
||||
; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4
|
||||
; CHECK-NEXT: da analyze - flow [<> *]!
|
||||
; CHECK-NEXT: da analyze - flow [* *|<]!
|
||||
; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4
|
||||
; CHECK-NEXT: da analyze - confused!
|
||||
; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4
|
||||
@ -258,7 +258,7 @@ define void @prop4(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
|
||||
; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: store i32 %conv, ptr %arrayidx6, align 4
|
||||
; CHECK-NEXT: da analyze - none!
|
||||
; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: %0 = load i32, ptr %arrayidx10, align 4
|
||||
; CHECK-NEXT: da analyze - flow [< <>]!
|
||||
; CHECK-NEXT: da analyze - flow [< *]!
|
||||
; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4
|
||||
; CHECK-NEXT: da analyze - confused!
|
||||
; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx10, align 4 --> Dst: %0 = load i32, ptr %arrayidx10, align 4
|
||||
@ -377,7 +377,7 @@ define void @prop6(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
|
||||
; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: store i32 %conv, ptr %arrayidx6, align 4
|
||||
; CHECK-NEXT: da analyze - none!
|
||||
; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: %0 = load i32, ptr %arrayidx11, align 4
|
||||
; CHECK-NEXT: da analyze - flow [=> <>]!
|
||||
; CHECK-NEXT: da analyze - flow [=> *|<]!
|
||||
; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4
|
||||
; CHECK-NEXT: da analyze - confused!
|
||||
; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx11, align 4 --> Dst: %0 = load i32, ptr %arrayidx11, align 4
|
||||
|
||||
@ -30,7 +30,7 @@ define void @exact_rdiv_no_nsw(ptr %A) {
|
||||
; CHECK-ALL-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
|
||||
; CHECK-ALL-NEXT: da analyze - output [*]!
|
||||
; CHECK-ALL-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
|
||||
; CHECK-ALL-NEXT: da analyze - none!
|
||||
; CHECK-ALL-NEXT: da analyze - output [|<]!
|
||||
; CHECK-ALL-NEXT: Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
|
||||
; CHECK-ALL-NEXT: da analyze - none!
|
||||
;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user