summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid L. Jones <dlj@google.com>2019-08-19 07:16:24 +0000
committerDavid L. Jones <dlj@google.com>2019-08-19 07:16:24 +0000
commitb1752f670f3d6393306dd5d37546b6e23384d8a2 (patch)
treed0083fd6c7a4da52ed0c09efaed9af3a06474874
parent0697bcd1276111e2917b090cde8535ee2f61fbe0 (diff)
downloadbcm5719-llvm-b1752f670f3d6393306dd5d37546b6e23384d8a2.tar.gz
bcm5719-llvm-b1752f670f3d6393306dd5d37546b6e23384d8a2.zip
Revert [Attributor] Fix: Do not partially resolve returned calls.
This reverts r369160 (git commit f72d9b1c97b41fff48ad1eecbba59a29c171bff4) r369160 caused some tests to fail under UBSAN. See thread on llvm-commits. llvm-svn: 369236
-rw-r--r--llvm/lib/Transforms/IPO/Attributor.cpp39
1 files changed, 11 insertions, 28 deletions
diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp
index 62ec3937dcf..882d0931f9f 100644
--- a/llvm/lib/Transforms/IPO/Attributor.cpp
+++ b/llvm/lib/Transforms/IPO/Attributor.cpp
@@ -943,35 +943,12 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) {
<< static_cast<const AbstractAttribute &>(RetValAA)
<< "\n");
- // Do not try to learn partial information. If the callee has unresolved
- // return values we will treat the call as unresolved/opaque.
- auto &RetValAAUnresolvedCalls = RetValAA.getUnresolvedCalls();
- if (!RetValAAUnresolvedCalls.empty()) {
- UnresolvedCalls.insert(CB);
- continue;
- }
-
- // Now check if we can track transitively returned values. If possible, thus
- // if all return value can be represented in the current scope, do so.
- bool Unresolved = false;
- for (auto &RetValAAIt : RetValAA.returned_values()) {
- Value *RetVal = RetValAAIt.first;
- if (isa<Argument>(RetVal) || isa<CallBase>(RetVal) ||
- isa<Constant>(RetVal))
- continue;
- // Anything that did not fit in the above categories cannot be resolved,
- // mark the call as unresolved.
- LLVM_DEBUG(dbgs() << "[AAReturnedValues] transitively returned value "
- "cannot be translated: "
- << *RetVal << "\n");
- UnresolvedCalls.insert(CB);
- Unresolved = true;
- break;
- }
-
- if (Unresolved)
- continue;
+ // If we know something but not everyting about the returned values, keep
+ // track of that too. Hence, remember transitively unresolved calls.
+ UnresolvedCalls.insert(RetValAA.getUnresolvedCalls().begin(),
+ RetValAA.getUnresolvedCalls().end());
+ // Now track transitively returned values.
for (auto &RetValAAIt : RetValAA.returned_values()) {
Value *RetVal = RetValAAIt.first;
if (Argument *Arg = dyn_cast<Argument>(RetVal)) {
@@ -990,6 +967,12 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) {
NewRVsMap[RetVal].insert(It.second.begin(), It.second.end());
continue;
}
+ // Anything that did not fit in the above categories cannot be resolved,
+ // mark the call as unresolved.
+ LLVM_DEBUG(dbgs() << "[AAReturnedValues] transitively returned value "
+ "cannot be translated: "
+ << *RetVal << "\n");
+ UnresolvedCalls.insert(CB);
}
}
OpenPOWER on IntegriCloud