brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 7201d3d Raw
81 lines · cpp
1//===- PruneUnprofitable.cpp ----------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Mark a SCoP as unfeasible if not deemed profitable to optimize.10//11//===----------------------------------------------------------------------===//12 13#include "polly/PruneUnprofitable.h"14#include "polly/ScopDetection.h"15#include "polly/ScopInfo.h"16#include "llvm/ADT/Statistic.h"17#include "llvm/IR/DebugLoc.h"18#include "llvm/Support/Debug.h"19#include "llvm/Support/raw_ostream.h"20 21using namespace llvm;22using namespace polly;23 24#include "polly/Support/PollyDebug.h"25#define DEBUG_TYPE "polly-prune-unprofitable"26 27namespace {28 29STATISTIC(ScopsProcessed,30          "Number of SCoPs considered for unprofitability pruning");31STATISTIC(ScopsPruned, "Number of pruned SCoPs because it they cannot be "32                       "optimized in a significant way");33STATISTIC(ScopsSurvived, "Number of SCoPs after pruning");34 35STATISTIC(NumPrunedLoops, "Number of pruned loops");36STATISTIC(NumPrunedBoxedLoops, "Number of pruned boxed loops");37STATISTIC(NumPrunedAffineLoops, "Number of pruned affine loops");38 39STATISTIC(NumLoopsInScop, "Number of loops in scops after pruning");40STATISTIC(NumBoxedLoops, "Number of boxed loops in SCoPs after pruning");41STATISTIC(NumAffineLoops, "Number of affine loops in SCoPs after pruning");42 43static void updateStatistics(Scop &S, bool Pruned) {44  Scop::ScopStatistics ScopStats = S.getStatistics();45  if (Pruned) {46    ScopsPruned++;47    NumPrunedLoops += ScopStats.NumAffineLoops + ScopStats.NumBoxedLoops;48    NumPrunedBoxedLoops += ScopStats.NumBoxedLoops;49    NumPrunedAffineLoops += ScopStats.NumAffineLoops;50  } else {51    ScopsSurvived++;52    NumLoopsInScop += ScopStats.NumAffineLoops + ScopStats.NumBoxedLoops;53    NumBoxedLoops += ScopStats.NumBoxedLoops;54    NumAffineLoops += ScopStats.NumAffineLoops;55  }56}57} // namespace58 59bool polly::runPruneUnprofitable(Scop &S) {60  if (PollyProcessUnprofitable) {61    POLLY_DEBUG(62        dbgs() << "NOTE: -polly-process-unprofitable active, won't prune "63                  "anything\n");64    return false;65  }66 67  ScopsProcessed++;68 69  if (!S.isProfitable(true)) {70    POLLY_DEBUG(71        dbgs() << "SCoP pruned because it probably cannot be optimized in "72                  "a significant way\n");73    S.invalidate(PROFITABLE, DebugLoc());74    updateStatistics(S, true);75  } else {76    updateStatistics(S, false);77  }78 79  return false;80}81