I think this function is basically useless, since volatile memacesses or MIs with unmodelled sideffects become global memory objects, and the other little checks are also done elsewhere.
It also seems like a good idea to cache the results of getUnderlyingObjectsForInstr(), when it returns no objects. This is a case where we could give up without querying AA for it and initiate a new search for underlying objects. (I am not sure how much of a win this is)