Does the addresses of an arbitrary peripheral register can be used to store data randomly during code execution?
The compiler will not use the address of a peripheral register for "random" data storage. The compiler will only use the address range that has been specified as a data storage area in the linker map file, which is typically the range of addresses that correspond to RAM. The volatile qualifier is not really relevant here.

Having said that, it may be possible for you to use those registers for data storage if you write your own code to access them. If there was some peripheral register that provided read/write access but didn't have any actual affect on processor function then you might be able to store data in it. As a hypothetical example, if a GPIO port is configured as an input port then the "output" register for that port may have no affect on the processor's function, so you could use it as a storage location.