I hesitate to respond because I don't want to seem like I'm dumping on LLVM. I use it every single day at work and it's a lovely thing. The community is great and the advancement is quick.
That said, here are a few things I would improve:
- Getting code merged upstream is pert near impossible. It takes forever to get code reviewed, patches are dropped all the time, etc. Many people have noted this but there doesn't seem to be a willingness to change processes to address it.
- Cathedral model of development. This is a matter of taste but I think people generally prefer the bazaar model.
- The class interfaces are WAY too extensive. Designers tend to throw everything and the kitchen sink into classes. Most of the interfaces should be freestanding functions. That would simplify the API.
- There are still scaling issues. This has been improved over the years but LLVM can still fall to its knees on very large codes.
- Refusal to use common libraries. There's a lot of NIH and reinventing of the wheel. LLVM has entire headers devoted to reproducing stuff available in Boost and the standard library. I'm not sure why that's so other than an overinflated fear of templates. There's a whole regular expression engine in there.
- Bare pointers. With today's C++ this just shouldn't happen.