aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-reduce/ReducerWorkItem.cpp
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2024-08-07 14:07:22 +0200
committerNikita Popov <npopov@redhat.com>2024-08-07 14:08:35 +0200
commitb74182edaeeddfb10930e44048bf6b16704c45d9 (patch)
tree6d25c236cd4523c9c0b3517e5bb9ff171fea20b2 /llvm/tools/llvm-reduce/ReducerWorkItem.cpp
parent3ac5f5e1fc189d0cca169a409199fdaec13112d1 (diff)
downloadllvm-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.cpp19
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())