Yeah. They redesigned the class the year after I took it (we programmed in CLU and targeted the VAX) and different people taught it, so it was also changing. Also, I'd vary things. One year I wrote a sparc babckend (which had some unusual features like register windows) in C; that definitely wasn't what the class was doing.
I like that idea, and I think I'm going to try it. I'm slightly perturbed that my school doesn't have an advanced compilers course, but I could definitely use this strategy as a way of learning more.
A few other ideas to play with: you might go through a book like Programming Language Pragmatics by Scott and implement various kinds of languages and language features. Understanding how various language features map to the bare metal can be very illuminating. The second is to play with various backends. I was crazy about learning ISAs and computer architecture back then. Finally, you can play with "middle end" ideas: IRs, program analyses and optimizations. Once you get past the book stage, there is a HUGE literature on compiler analyses and optimizations.