R600/SI: Re-initialize the m0 register after using it for indirect addressing

We need to store a value greater than or equal to the number of LDS
bytes allocated by the shader in the m0 register in order for LDS
instructions to work correctly.

We always initialize m0 at the beginning of a shader, but this register
is also used for indirect addressing offsets, so we need to
re-initialize it any time we use indirect addressing.
SelectionDAG: Expand i64 = FP_TO_SINT i32
R600/SI: Add a pattern for llvm.AMDGPU.barrier.global
R600: Use LDS and vectors for private memory