One of the old TI microcontrollers saved a few transistors in the program counter by using a shift register this way instead of an actual counter. As a result, instructions in your program don't execute sequentially, but in a pseudo-random order. This isn't a problem, though, since you just put the code in the ROM in the same pseudo-random order and everything works out.
The underlying thing that makes the shift register more efficient is that you can build a dynamic shift register stage with two inverters and two pass transistor pairs, while the flip flop for a counter stage is probably six gates.
The underlying thing that makes the shift register more efficient is that you can build a dynamic shift register stage with two inverters and two pass transistor pairs, while the flip flop for a counter stage is probably six gates.