R600/SI: Use correct helper class for DS_WRITE2 instructions

DS_1A uses a single offset encoding, so offset1 wasn't being
encoded.
R600/SI: Wrap local memory pointer in AssertZExt on SI

These pointers are really just offsets and they will always be
less than 16-bits.  Using AssertZExt allows us to use computeKnownBits
to prove that these values are positive.  We will use this information
in a later commit.
R600/SI: Use a ComplexPattern for DS loads and stores
R600/SI: Use READ2/WRITE2 instructions for 64-bit mem ops with 32-bit alignment