This looks good. When I played around with this idea, the one exception to this might be inline assembler. Do you think we should make an exception for that? http://llvm-reviews.chandlerc.com/D1097