An op can potentially have effects on memory that are not reflected in or even connected to its SSA operands. These are not captured in the declared memory effects (for e.g. the op may have zero operands or have only float/int operands or have no memory effects on its operands itself). The op will simply not be marked pure/speculatable, and a utility can’t distinguish it from other non-pure ops which only have “local effects”.
Consider the case where the semantics of an op is to read an operand memref and use that to read other memory (one or more levels of indirection). If such semantics aren’t captured directly via the op’s operands or those of its region’s ops, memory effects won’t tell a utility/pass whether other memrefs are potentially read/written (outside of the op’s operands).