So, just to confirm my own (new) understanding now:
Consume is "I want to read data from a pointer, please do not reorder loads that go through the pointer"
and Acquire is "I want to read data from a pointer, please do not reorder loads that happen after this one, *whether or not they go through the same pointer"
there's no relation to the Alpha aside from it being the only processor that needs a barrier for Consume
and for whatever reason compilers don't or can't do the dependency tracking that would let them take advantage of the weaker guarantees of Consume, so in practice it just becomes Acquire?
Consume is for data dependency, loading through a pointer is the obvious one, but there are other variants (using the loaded value as an index for example).
Acquire is also not about pointers but about independent reads: reading a flag and then reading data protected by that flag for example.
Consume exists because it can be implemented cheaply on some platforms with relatively expensive acquire barriers (ARM, POWER). Alpha didn't respect load dependencies, so consume is as expensive as acquire.
Consume is "I want to read data from a pointer, please do not reorder loads that go through the pointer"
and Acquire is "I want to read data from a pointer, please do not reorder loads that happen after this one, *whether or not they go through the same pointer"
there's no relation to the Alpha aside from it being the only processor that needs a barrier for Consume
and for whatever reason compilers don't or can't do the dependency tracking that would let them take advantage of the weaker guarantees of Consume, so in practice it just becomes Acquire?