diff options
author | Nikita Popov <npopov@redhat.com> | 2024-08-07 14:07:22 +0200 |
---|---|---|
committer | Nikita Popov <npopov@redhat.com> | 2024-08-07 14:08:35 +0200 |
commit | b74182edaeeddfb10930e44048bf6b16704c45d9 (patch) | |
tree | 6d25c236cd4523c9c0b3517e5bb9ff171fea20b2 /llvm/tools/llvm-reduce/ReducerWorkItem.cpp | |
parent | 3ac5f5e1fc189d0cca169a409199fdaec13112d1 (diff) | |
download | llvm-b74182edaeeddfb10930e44048bf6b16704c45d9.zip llvm-b74182edaeeddfb10930e44048bf6b16704c45d9.tar.gz llvm-b74182edaeeddfb10930e44048bf6b16704c45d9.tar.bz2 |
[llvm-reduce] Handle new flags in complexity score
This has gotten out of sync with the actual flag reduction. It's
not particularly important though, as it only seems to be used to
determine whether to do another round of delta reduction.
Diffstat (limited to 'llvm/tools/llvm-reduce/ReducerWorkItem.cpp')
-rw-r--r-- | llvm/tools/llvm-reduce/ReducerWorkItem.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/llvm/tools/llvm-reduce/ReducerWorkItem.cpp b/llvm/tools/llvm-reduce/ReducerWorkItem.cpp index 3fa49cb..1510e9f 100644 --- a/llvm/tools/llvm-reduce/ReducerWorkItem.cpp +++ b/llvm/tools/llvm-reduce/ReducerWorkItem.cpp @@ -643,12 +643,27 @@ static uint64_t computeIRComplexityScoreImpl(const Function &F) { ++Score; if (OverflowOp->hasNoSignedWrap()) ++Score; - } else if (const auto *GEP = dyn_cast<GEPOperator>(&I)) { - if (GEP->isInBounds()) + } else if (const auto *Trunc = dyn_cast<TruncInst>(&I)) { + if (Trunc->hasNoSignedWrap()) + ++Score; + if (Trunc->hasNoUnsignedWrap()) ++Score; } else if (const auto *ExactOp = dyn_cast<PossiblyExactOperator>(&I)) { if (ExactOp->isExact()) ++Score; + } else if (const auto *NNI = dyn_cast<PossiblyNonNegInst>(&I)) { + if (NNI->hasNonNeg()) + ++Score; + } else if (const auto *PDI = dyn_cast<PossiblyDisjointInst>(&I)) { + if (PDI->isDisjoint()) + ++Score; + } else if (const auto *GEP = dyn_cast<GEPOperator>(&I)) { + if (GEP->isInBounds()) + ++Score; + if (GEP->hasNoUnsignedSignedWrap()) + ++Score; + if (GEP->hasNoUnsignedWrap()) + ++Score; } else if (const auto *FPOp = dyn_cast<FPMathOperator>(&I)) { FastMathFlags FMF = FPOp->getFastMathFlags(); if (FMF.allowReassoc()) |