This refactors out the offset and address operand pattern matching into a ComplexPattern which can do more advanced matching. It also now folds global addresses into the offset whenever the stack operand is not a constant.
More specifically, this should address https://github.com/llvm/llvm-project/issues/57771
Is there a better way to iterate over the two operands of an add?