Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Very interesting to see that Clang basically always produces very bad and unoptimized LLVM IR code and leaves it to LLVM to clean it all up. That said, it's not entirely true that Clang avoid doing any optimizations -- it does indeed produce slightly different LLVM IR for -O0 and -O3.


I think this was done because while LLVM was built to be academic, Clang was built to be fast and beat GCC, and so ended up overly low level.

A nicer and newer approach is to use an intermediate bytecode that lowers to LLVM IR; Swift, GHC, and I'm sure several other examples I haven't thought of do this.

I'd like to see this for C because I think -O0 is a bad debugging experience, eg because system libraries are still optimized, and an interpreter running on a C-like bytecode would be better. Really the only thing -O0 is good for is working around compiler bugs.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: