What it is not liking is using the block_addr as the base index in the shift. Because block_addr could by any value in the array, it needs to build circuits for every possible version of block_addr.
From this and your other post, it really feels like this is not really a hardware friendly design, and probably taking a software approach.
Did you draw out the circuit you expect before writing any code? Did you think about pipelining the design? did you create a hardware friendly version of your compression/decompression algorithm? Did you even assess if it was hardware friendly, or if it would work better in a processor.
This operation you show in the code is something that is more likely suited to a CPU, not hardware.