forked from OSchip/llvm-project
[Attributor] Fix the "clamp" operator
The clamp operator should not take the known of the given state as the known is potentially based on assumed information. This also adds TODOs to guide improvements. llvm-svn: 369327
This commit is contained in:
parent
a08e139d50
commit
028b2aa56a
|
@ -890,10 +890,13 @@ struct IntegerState : public AbstractState {
|
|||
/// Inequality for IntegerState.
|
||||
bool operator!=(const IntegerState &R) const { return !(*this == R); }
|
||||
|
||||
/// "Clamp" this state with \p R. The result is the maximum of the known
|
||||
/// information but the minimum of the assumed.
|
||||
/// "Clamp" this state with \p R. The result is the minimum of the assumed
|
||||
/// information but not less than what was known before.
|
||||
///
|
||||
/// TODO: Consider replacing the operator with a call or using it only when
|
||||
/// we can also take the maximum of the known information, thus when
|
||||
/// \p R is not dependent on additional assumed state.
|
||||
IntegerState operator^=(const IntegerState &R) {
|
||||
takeKnownMaximum(R.Known);
|
||||
takeAssumedMinimum(R.Assumed);
|
||||
return *this;
|
||||
}
|
||||
|
|
|
@ -526,6 +526,8 @@ struct AAReturnedFromReturnedValues : public AAType {
|
|||
ChangeStatus updateImpl(Attributor &A) override {
|
||||
StateType S;
|
||||
clampReturnedValueStates<AAType, StateType>(A, *this, S);
|
||||
// TODO: If we know we visited all returned values, thus no are assumed
|
||||
// dead, we can take the known information from the state T.
|
||||
return clampStateAndIndicateChange<StateType>(this->getState(), S);
|
||||
}
|
||||
};
|
||||
|
@ -585,6 +587,8 @@ struct AAArgumentFromCallSiteArguments : public AAType {
|
|||
ChangeStatus updateImpl(Attributor &A) override {
|
||||
StateType S;
|
||||
clampCallSiteArgumentStates<AAType, StateType>(A, *this, S);
|
||||
// TODO: If we know we visited all incoming values, thus no are assumed
|
||||
// dead, we can take the known information from the state T.
|
||||
return clampStateAndIndicateChange<StateType>(this->getState(), S);
|
||||
}
|
||||
};
|
||||
|
@ -2265,6 +2269,8 @@ struct AAAlignFloating : AAAlignImpl {
|
|||
VisitValueCB))
|
||||
indicatePessimisticFixpoint();
|
||||
|
||||
// TODO: If we know we visited all incoming values, thus no are assumed
|
||||
// dead, we can take the known information from the state T.
|
||||
return clampStateAndIndicateChange(getState(), T);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue