LLVM ban đầu là viết tắt của "máy ảo cấp thấp", mặc dù bây giờ nó chỉ là viết tắt của chính nó vì nó đã phát triển thành một cái gì đó khác với một máy ảo truyền thống. Nó là một tập hợp các thư viện và công cụ, cũng như một biểu diễn trung gian được tiêu chuẩn hóa, có thể được sử dụng để giúp xây dựng trình biên dịch và trình biên dịch đúng lúc. Nó không thể tự biên dịch bất cứ thứ gì ngoài đại diện trung gian của chính nó; nó cần một lối vào ngôn ngữ cụ thể để làm như vậy. Nếu mọi người chỉ tham khảo LLVM, có lẽ họ chỉ có nghĩa là thư viện và công cụ cấp thấp. Một số người có thể gọi Clang hoặc llvm-gcc không chính xác là "LLVM", điều này có thể gây ra một số nhầm lẫn.
llvm-gcc là phiên bản sửa đổi của GCC, sử dụng LLVM làm phụ trợ thay vì của GCC. Hiện tại, nó không được chấp nhận, có lợi cho DragonEgg, sử dụng hệ thống plugin mới của GCC để làm điều tương tự mà không từ bỏ GCC.
Clang là một trình biên dịch C / C ++ / Objective-C hoàn toàn mới, sử dụng lối vào riêng của nó và LLVM làm phụ trợ. Ưu điểm mà nó cung cấp là thông báo lỗi tốt hơn, thời gian biên dịch nhanh hơn và cách dễ dàng hơn để các công cụ khác có thể tham gia vào quá trình biên dịch (như trình gỡ lỗi LLDB và trình phân tích tĩnh Clang ). Nó cũng có tính mô đun hợp lý và do đó có thể được sử dụng làm thư viện cho các phần mềm khác cần phân tích mã C, C ++ hoặc Objective-C.
Mỗi cách tiếp cận này (GCC, GCC + LLVM và Clang) đều có những ưu điểm và nhược điểm. Một vài bộ điểm chuẩn cuối cùng tôi thấy cho thấy GCC tạo ra mã nhanh hơn một chút trong hầu hết các trường hợp thử nghiệm (mặc dù LLVM có một chút cạnh trong một vài), trong khi LLVM và Clang cho thời gian biên dịch tốt hơn đáng kể. Các combo GCC và GCC / LLVM có lợi thế là rất nhiều mã đã được thử nghiệm và hoạt động trên hương vị GCC của C; có một số phần mở rộng cụ thể của trình biên dịch mà chỉ GCC mới có và một số nơi tiêu chuẩn cho phép thực hiện thay đổi nhưng mã phụ thuộc vào một triển khai cụ thể. Sẽ có nhiều khả năng hơn nếu bạn nhận được một lượng lớn mã C kế thừa mà nó sẽ hoạt động trong GCC so với nó sẽ hoạt động trong Clang, mặc dù điều này đang được cải thiện theo thời gian.