forked from OSchip/llvm-project
[Attributor] Merge the query set into AbstractAttribute
The old QuerriedAAs contained two vectors, one for required one for optional dependences (=queries). We now use a single vector and encode the kind directly in the pointer. This reduces memory consumption and makes the connection between abstract attributes and their dependences clearer. No functional change is intended, changes in the test are due to different order in the query map. Neither the order before nor now is in any way special. --- Single run of the Attributor module and then CGSCC pass (oldPM) for SPASS/clause.c (~10k LLVM-IR loc): Before: ``` calls to allocation functions: 543734 (329735/s) temporary memory allocations: 105895 (64217/s) peak heap memory consumption: 19.19MB peak RSS (including heaptrack overhead): 102.26MB total memory leaked: 269.10KB ``` After: ``` calls to allocation functions: 513292 (341511/s) temporary memory allocations: 106028 (70544/s) peak heap memory consumption: 13.35MB peak RSS (including heaptrack overhead): 95.64MB total memory leaked: 269.10KB ``` Difference: ``` calls to allocation functions: -30442 (208506/s) temporary memory allocations: 133 (-910/s) peak heap memory consumption: -5.84MB peak RSS (including heaptrack overhead): 0B total memory leaked: 0B ``` --- Reviewed By: uenoku Differential Revision: https://reviews.llvm.org/D78729
This commit is contained in:
parent
3c44c441db
commit
3a8740bdd5
|
@ -1314,28 +1314,6 @@ private:
|
|||
DenseMap<AAMapKeyTy, AbstractAttribute *> AAMap;
|
||||
///}
|
||||
|
||||
/// A map from abstract attributes to the ones that queried them through calls
|
||||
/// to the getAAFor<...>(...) method.
|
||||
///{
|
||||
struct QueryMapValueTy {
|
||||
/// Set of abstract attributes which were used but not necessarily required
|
||||
/// for a potential optimistic state.
|
||||
SetVector<AbstractAttribute *> OptionalAAs;
|
||||
|
||||
/// Set of abstract attributes which were used and which were necessarily
|
||||
/// required for any potential optimistic state.
|
||||
SetVector<AbstractAttribute *> RequiredAAs;
|
||||
|
||||
/// Clear the sets but keep the allocated storage as it is likely be resued.
|
||||
void clear() {
|
||||
OptionalAAs.clear();
|
||||
RequiredAAs.clear();
|
||||
}
|
||||
};
|
||||
using QueryMapTy = DenseMap<const AbstractAttribute *, QueryMapValueTy *>;
|
||||
QueryMapTy QueryMap;
|
||||
///}
|
||||
|
||||
/// Map to remember all requested signature changes (= argument replacements).
|
||||
DenseMap<Function *, SmallVector<std::unique_ptr<ArgumentReplacementInfo>, 8>>
|
||||
ArgumentReplacementMap;
|
||||
|
@ -2036,6 +2014,12 @@ protected:
|
|||
///
|
||||
/// \Return CHANGED if the internal state changed, otherwise UNCHANGED.
|
||||
virtual ChangeStatus updateImpl(Attributor &A) = 0;
|
||||
|
||||
private:
|
||||
/// Set of abstract attributes which were queried by this one. The bit encodes
|
||||
/// if there is an optional of required dependence.
|
||||
using DepTy = PointerIntPair<AbstractAttribute *, 1>;
|
||||
TinyPtrVector<DepTy> Deps;
|
||||
};
|
||||
|
||||
/// Forward declarations of output streams for debug purposes.
|
||||
|
|
|
@ -492,11 +492,6 @@ Attributor::~Attributor() {
|
|||
// thus we cannot delete them. We can, and want to, destruct them though.
|
||||
for (AbstractAttribute *AA : AllAbstractAttributes)
|
||||
AA->~AbstractAttribute();
|
||||
|
||||
// The QueryMapValueTy objects are allocated via a BumpPtrAllocator, we call
|
||||
// the destructor manually.
|
||||
for (auto &It : QueryMap)
|
||||
It.getSecond()->~QueryMapValueTy();
|
||||
}
|
||||
|
||||
bool Attributor::isAssumedDead(const AbstractAttribute &AA,
|
||||
|
@ -926,40 +921,33 @@ ChangeStatus Attributor::run() {
|
|||
AbstractAttribute *InvalidAA = InvalidAAs[u];
|
||||
|
||||
// Check the dependences to fast track invalidation.
|
||||
auto *QuerriedAAs = QueryMap.lookup(InvalidAA);
|
||||
if (!QuerriedAAs)
|
||||
continue;
|
||||
|
||||
LLVM_DEBUG(dbgs() << "[Attributor] InvalidAA: " << *InvalidAA << " has "
|
||||
<< QuerriedAAs->RequiredAAs.size() << "/"
|
||||
<< QuerriedAAs->OptionalAAs.size()
|
||||
<< " required/optional dependences\n");
|
||||
for (AbstractAttribute *DepOnInvalidAA : QuerriedAAs->RequiredAAs) {
|
||||
AbstractState &DOIAAState = DepOnInvalidAA->getState();
|
||||
DOIAAState.indicatePessimisticFixpoint();
|
||||
++NumAttributesFixedDueToRequiredDependences;
|
||||
assert(DOIAAState.isAtFixpoint() && "Expected fixpoint state!");
|
||||
if (!DOIAAState.isValidState())
|
||||
InvalidAAs.insert(DepOnInvalidAA);
|
||||
<< InvalidAA->Deps.size()
|
||||
<< " required & optional dependences\n");
|
||||
while (!InvalidAA->Deps.empty()) {
|
||||
const auto &Dep = InvalidAA->Deps.back();
|
||||
InvalidAA->Deps.pop_back();
|
||||
AbstractAttribute *DepAA = Dep.getPointer();
|
||||
if (Dep.getInt() == unsigned(DepClassTy::OPTIONAL)) {
|
||||
Worklist.insert(DepAA);
|
||||
continue;
|
||||
}
|
||||
DepAA->getState().indicatePessimisticFixpoint();
|
||||
assert(DepAA->getState().isAtFixpoint() && "Expected fixpoint state!");
|
||||
if (!DepAA->getState().isValidState())
|
||||
InvalidAAs.insert(DepAA);
|
||||
else
|
||||
ChangedAAs.push_back(DepOnInvalidAA);
|
||||
ChangedAAs.push_back(DepAA);
|
||||
}
|
||||
Worklist.insert(QuerriedAAs->OptionalAAs.begin(),
|
||||
QuerriedAAs->OptionalAAs.end());
|
||||
QuerriedAAs->clear();
|
||||
}
|
||||
|
||||
// Add all abstract attributes that are potentially dependent on one that
|
||||
// changed to the work list.
|
||||
for (AbstractAttribute *ChangedAA : ChangedAAs) {
|
||||
if (auto *QuerriedAAs = QueryMap.lookup(ChangedAA)) {
|
||||
Worklist.insert(QuerriedAAs->OptionalAAs.begin(),
|
||||
QuerriedAAs->OptionalAAs.end());
|
||||
Worklist.insert(QuerriedAAs->RequiredAAs.begin(),
|
||||
QuerriedAAs->RequiredAAs.end());
|
||||
QuerriedAAs->clear();
|
||||
for (AbstractAttribute *ChangedAA : ChangedAAs)
|
||||
while (!ChangedAA->Deps.empty()) {
|
||||
Worklist.insert(ChangedAA->Deps.back().getPointer());
|
||||
ChangedAA->Deps.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
LLVM_DEBUG(dbgs() << "[Attributor] #Iteration: " << IterationCounter
|
||||
<< ", Worklist+Dependent size: " << Worklist.size()
|
||||
|
@ -1020,13 +1008,9 @@ ChangeStatus Attributor::run() {
|
|||
NumAttributesTimedOut++;
|
||||
}
|
||||
|
||||
if (auto *QuerriedAAs = QueryMap.lookup(ChangedAA)) {
|
||||
ChangedAAs.append(QuerriedAAs->OptionalAAs.begin(),
|
||||
QuerriedAAs->OptionalAAs.end());
|
||||
ChangedAAs.append(QuerriedAAs->RequiredAAs.begin(),
|
||||
QuerriedAAs->RequiredAAs.end());
|
||||
// Release the memory early.
|
||||
QuerriedAAs->clear();
|
||||
while (!ChangedAA->Deps.empty()) {
|
||||
ChangedAAs.push_back(ChangedAA->Deps.back().getPointer());
|
||||
ChangedAA->Deps.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1722,14 +1706,9 @@ void Attributor::rememberDependences() {
|
|||
assert(!DependenceStack.empty() && "No dependences to remember!");
|
||||
|
||||
for (DepInfo &DI : *DependenceStack.back()) {
|
||||
QueryMapValueTy *&DepAAs = QueryMap[DI.FromAA];
|
||||
if (!DepAAs)
|
||||
DepAAs = new (Allocator) QueryMapValueTy();
|
||||
|
||||
if (DI.DepClass == DepClassTy::REQUIRED)
|
||||
DepAAs->RequiredAAs.insert(const_cast<AbstractAttribute *>(DI.ToAA));
|
||||
else
|
||||
DepAAs->OptionalAAs.insert(const_cast<AbstractAttribute *>(DI.ToAA));
|
||||
auto &DepAAs = const_cast<AbstractAttribute &>(*DI.FromAA).Deps;
|
||||
DepAAs.push_back(AbstractAttribute::DepTy(
|
||||
const_cast<AbstractAttribute *>(DI.ToAA), unsigned(DI.DepClass)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=5 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=5 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=6 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=6 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
|
||||
; Test that we only promote arguments when the caller/callee have compatible
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=5 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=5 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=6 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=6 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
|
||||
; Test that we only promote arguments when the caller/callee have compatible
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=6 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=6 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=5 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=5 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=5 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=5 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=4 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=4 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; TODO: The old pass manager cgscc run is disabled as it causes a crash on windows which is under investigation: http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/23151
|
||||
; opt -attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=8 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=7 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=7 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=6 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
|
||||
;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=10 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=10 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=9 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=9 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=4 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=3 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=3 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
||||
; RUN: opt -attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
|
||||
|
|
|
@ -352,8 +352,8 @@ entry:
|
|||
; IS__CGSCC____: attributes #{{.*}} = { argmemonly nofree nosync nounwind }
|
||||
; IS__CGSCC____: attributes #{{.*}} = { argmemonly nofree norecurse nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #{{.*}} = { nofree nosync nounwind }
|
||||
; IS__CGSCC____: attributes #{{.*}} = { nounwind }
|
||||
; IS__CGSCC____: attributes #{{.*}} = { nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #{{.*}} = { nounwind }
|
||||
; IS__CGSCC____-NOT: attributes #
|
||||
|
||||
; IS__TUNIT____-NOT: attributes #
|
||||
|
|
Loading…
Reference in New Issue