diff options
author | ZhaoQi <zhaoqi01@loongson.cn> | 2025-09-26 10:45:29 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-26 10:45:29 +0800 |
commit | 4321d4fe8039a745796726dfe145e5e699b928b3 (patch) | |
tree | 589d406b275c99425ea9c7ee22776e9920d7de4f /llvm/lib/Analysis/AssumptionCache.cpp | |
parent | d516d07c268f260e245690f89ab0f3e727389cb5 (diff) | |
parent | ef876268b97d664a90dc0d9a044f518557270e3d (diff) | |
download | llvm-users/zhaoqi5/override-isxxxcheap-hooks.zip llvm-users/zhaoqi5/override-isxxxcheap-hooks.tar.gz llvm-users/zhaoqi5/override-isxxxcheap-hooks.tar.bz2 |
Merge branch 'users/zhaoqi5/test-isxxxcheap' into users/zhaoqi5/override-isxxxcheap-hooksusers/zhaoqi5/override-isxxxcheap-hooks
Diffstat (limited to 'llvm/lib/Analysis/AssumptionCache.cpp')
-rw-r--r-- | llvm/lib/Analysis/AssumptionCache.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/llvm/lib/Analysis/AssumptionCache.cpp b/llvm/lib/Analysis/AssumptionCache.cpp index 980a891..61b7b3fa 100644 --- a/llvm/lib/Analysis/AssumptionCache.cpp +++ b/llvm/lib/Analysis/AssumptionCache.cpp @@ -53,6 +53,22 @@ AssumptionCache::getOrInsertAffectedValues(Value *V) { return AffectedValues[AffectedValueCallbackVH(V, this)]; } +void AssumptionCache::findValuesAffectedByOperandBundle( + OperandBundleUse Bundle, function_ref<void(Value *)> InsertAffected) { + auto AddAffectedVal = [&](Value *V) { + if (isa<Argument, GlobalValue, Instruction>(V)) + InsertAffected(V); + }; + + if (Bundle.getTagName() == "separate_storage") { + assert(Bundle.Inputs.size() == 2 && "separate_storage must have two args"); + AddAffectedVal(getUnderlyingObject(Bundle.Inputs[0])); + AddAffectedVal(getUnderlyingObject(Bundle.Inputs[1])); + } else if (Bundle.Inputs.size() > ABA_WasOn && + Bundle.getTagName() != IgnoreBundleTag) + AddAffectedVal(Bundle.Inputs[ABA_WasOn]); +} + static void findAffectedValues(CallBase *CI, TargetTransformInfo *TTI, SmallVectorImpl<AssumptionCache::ResultElem> &Affected) { @@ -69,17 +85,10 @@ findAffectedValues(CallBase *CI, TargetTransformInfo *TTI, } }; - for (unsigned Idx = 0; Idx != CI->getNumOperandBundles(); Idx++) { - OperandBundleUse Bundle = CI->getOperandBundleAt(Idx); - if (Bundle.getTagName() == "separate_storage") { - assert(Bundle.Inputs.size() == 2 && - "separate_storage must have two args"); - AddAffectedVal(getUnderlyingObject(Bundle.Inputs[0]), Idx); - AddAffectedVal(getUnderlyingObject(Bundle.Inputs[1]), Idx); - } else if (Bundle.Inputs.size() > ABA_WasOn && - Bundle.getTagName() != IgnoreBundleTag) - AddAffectedVal(Bundle.Inputs[ABA_WasOn], Idx); - } + for (unsigned Idx = 0; Idx != CI->getNumOperandBundles(); Idx++) + AssumptionCache::findValuesAffectedByOperandBundle( + CI->getOperandBundleAt(Idx), + [&](Value *V) { Affected.push_back({V, Idx}); }); Value *Cond = CI->getArgOperand(0); findValuesAffectedByCondition(Cond, /*IsAssume=*/true, InsertAffected); @@ -172,7 +181,7 @@ void AssumptionCache::scanFunction() { for (BasicBlock &B : F) for (Instruction &I : B) if (isa<AssumeInst>(&I)) - AssumeHandles.push_back({&I, ExprResultIdx}); + AssumeHandles.push_back(&I); // Mark the scan as complete. Scanned = true; @@ -188,7 +197,7 @@ void AssumptionCache::registerAssumption(AssumeInst *CI) { if (!Scanned) return; - AssumeHandles.push_back({CI, ExprResultIdx}); + AssumeHandles.push_back(CI); #ifndef NDEBUG assert(CI->getParent() && |