I used CCS, mikroC, xc8 compilerss..
xc8
*you only need one reference for programming which is the datasheet of the controller that you are using.
*advisable for advanced user because of mplabx ide debugging capability(with the use of ICD3 or REALICE)
*ANSI compliant coding
*can control each and every part of the code which can be helpful for advanced users..
*access to registers are easy
*advanced libraries that has a LOT of settings that can be customized
*always supports the latest controllers
ccs
*smallest output hex file compared to the other compiler
*simplified usage of codes eg. LATX.XY = output_high(PIN_XY) which is very helpful for beginners
*setup of controller and accessing features are already optimized for the user and requires lesser lines of coding
*some parts of the code like the interrupt routines automatically resets the flags
*very understandable functions and routines. Refer to CCS manual
*very easy to change controller using the same codes..
mikroC
*ANSI compliant coding
*similar to xc8 coding style
*lots of libraries for different ICs
*graphics support and a lot of handy plugins
*very easy setup of controller
Hope these will help you in choosing your compiler