It's even more fun with CUDA. You have PTX assembly and CUDA binary assembly which are completely different.
But it still pays to peek into disassembly every now and then. For instance, one time I got to shorten a kernel runtime by switching an index type from size_t to uint32_t. Apparently, 64-bit integer division wasn't supported directly by the target architecture and instead of some kind of IDIV, there was a 100-lines function embedded and called on every division.
Just downcasting an index before pushing it to the kernel made the whole thing considerably faster. But I wouldn't know I should have done this if not for the disassembly.