Concatenated ranges

Yes this is certainly an AbstractArray.

Note that instead of concatenation, you can think of what fftshift does as a lazy circshift. The package ShiftedArrays.jl has wrappers for this, and it appears there was some attempt to make it work with CUDA.jl, see e.g. this thread. Although earlier discussion is about shifting an arbitrary vector, and there may be shortcuts possible if you only handle ranges.