Does anyone still use the register storage class or just rely on the compiler to optimize? Also, is there a way to identify which variables the compiler has put into the register?
No and no, not without looking at the assembly code generated by the compiler.
(although sometimes the debugger will tell you, for example if you try to take the address of a variable in the debugger that the compiler has put in a register you will get an error).