diff options
author | Philip Reames <preames@rivosinc.com> | 2023-11-03 10:50:03 -0700 |
---|---|---|
committer | Philip Reames <listmail@philipreames.com> | 2023-11-03 10:50:57 -0700 |
commit | 7c93452e174dd182c36471bc1e8272f26c0ae6db (patch) | |
tree | 76e9d052734e885bf8398b8908632f892c32f693 /llvm/lib/Transforms/Utils/SimplifyIndVar.cpp | |
parent | edd690b02e16e991393bf7f67631196942369aed (diff) | |
download | llvm-7c93452e174dd182c36471bc1e8272f26c0ae6db.zip llvm-7c93452e174dd182c36471bc1e8272f26c0ae6db.tar.gz llvm-7c93452e174dd182c36471bc1e8272f26c0ae6db.tar.bz2 |
[indvars] Restructure getExtendedOperandRecurrence [nfc]
As suggested during review of https://github.com/llvm/llvm-project/pull/70990.
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyIndVar.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyIndVar.cpp | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp b/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp index 9b91d74..a618d72 100644 --- a/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp @@ -1383,32 +1383,33 @@ WidenIV::getExtendedOperandRecurrence(WidenIV::NarrowIVDefUse DU) { DU.NarrowUse->getOperand(0) == DU.NarrowDef ? 1 : 0; assert(DU.NarrowUse->getOperand(1-ExtendOperIdx) == DU.NarrowDef && "bad DU"); - const SCEV *ExtendOperExpr = nullptr; const OverflowingBinaryOperator *OBO = cast<OverflowingBinaryOperator>(DU.NarrowUse); ExtendKind ExtKind = getExtendKind(DU.NarrowDef); - if (ExtKind == ExtendKind::Sign && OBO->hasNoSignedWrap()) - ExtendOperExpr = SE->getSignExtendExpr( - SE->getSCEV(DU.NarrowUse->getOperand(ExtendOperIdx)), WideType); - else if (ExtKind == ExtendKind::Zero && OBO->hasNoUnsignedWrap()) - ExtendOperExpr = SE->getZeroExtendExpr( - SE->getSCEV(DU.NarrowUse->getOperand(ExtendOperIdx)), WideType); - else if (DU.NeverNegative) { + if (!(ExtKind == ExtendKind::Sign && OBO->hasNoSignedWrap()) && + !(ExtKind == ExtendKind::Zero && OBO->hasNoUnsignedWrap())) { + ExtKind = ExtendKind::Unknown; + // For a non-negative NarrowDef, we can choose either type of // extension. We want to use the current extend kind if legal // (see above), and we only hit this code if we need to check // the opposite case. - if (OBO->hasNoSignedWrap()) { - ExtKind = ExtendKind::Sign; - ExtendOperExpr = SE->getSignExtendExpr( - SE->getSCEV(DU.NarrowUse->getOperand(ExtendOperIdx)), WideType); - } else if (OBO->hasNoUnsignedWrap()) { - ExtKind = ExtendKind::Zero; - ExtendOperExpr = SE->getZeroExtendExpr( - SE->getSCEV(DU.NarrowUse->getOperand(ExtendOperIdx)), WideType); - } else - return {nullptr, ExtendKind::Unknown}; - } else + if (DU.NeverNegative) { + if (OBO->hasNoSignedWrap()) { + ExtKind = ExtendKind::Sign; + } else if (OBO->hasNoUnsignedWrap()) { + ExtKind = ExtendKind::Zero; + } + } + } + + const SCEV *ExtendOperExpr = + SE->getSCEV(DU.NarrowUse->getOperand(ExtendOperIdx)); + if (ExtKind == ExtendKind::Sign) + ExtendOperExpr = SE->getSignExtendExpr(ExtendOperExpr, WideType); + else if (ExtKind == ExtendKind::Zero) + ExtendOperExpr = SE->getZeroExtendExpr(ExtendOperExpr, WideType); + else return {nullptr, ExtendKind::Unknown}; // When creating this SCEV expr, don't apply the current operations NSW or NUW |