Skip to content
Permalink
Browse files

Revert [Attributor] Fix: Do not partially resolve returned calls.

This reverts r369160 (git commit f72d9b1)

r369160 caused some tests to fail under UBSAN. See thread on llvm-commits.

llvm-svn: 369236
  • Loading branch information
dlj-NaN committed Aug 19, 2019
1 parent 0697bcd commit b1752f670f3d6393306dd5d37546b6e23384d8a2
Showing with 11 additions and 28 deletions.
  1. +11 −28 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);
}
}

0 comments on commit b1752f6

Please sign in to comment.
You can’t perform that action at this time.