The patch assigns 'kind' to each GOT entry. Now they are MipsLocal, MipsGlobal and Regular. That allows to create entries for all non-local symbols and handle them uniformly. From the other side we have to sort GOT entries before writing .got section accordingly to their types.
The main motivations for this patch is preparation for support MIPS TLS relocations. It might sound like a joke but for GOT entries related to TLS relocations MIPS ABI uses almost regular approach with creation of dynamic relocations for each GOT enty etc. But we need to separate these 'regular' TLS related entries from MIPS specific local/global parts of GOT. ABI declare simple solution - all TLS related entries allocated at the end of GOT after local/global parts. To support these scheme, we anyway have to differentiate and sort GOT entries.
On my TLS descriptor patch [1], after some discussion I changed the approach of using a vector of vectors to just define the required vectors instead (one for each type). I think using a vector for each type simplifies the code, since it won't require sorting in the finalize method.
[1] http://reviews.llvm.org/D18960