AMD AOCC 1.1 Shows Compiler Improvements vs. GCC vs. Clang
A few days ago we found out that at the end of 2017 AMD quietly released their AOCC 1.1 C/C++ compiler. AOCC is AMD's compiler succeeding AMD Open64 that existed years ago as their optimized Fortran/C/C++ compiler for past CPU microarchitectures while the "AMD Optimizing C/C++ Compiler" is designed for current-generation Zen processors. Here are benchmarks of the new AMD AOCC 1.1 release compared to GCC 7, GCC 8, Clang 5.0, Clang 6.0, and Clang 7.0 SVN.
The AMD AOCC 1.1 release that was released in December features further tuning for Zen over the AOCC 1.0 release from last May. There is also more optimizations, better function inlining and loop optimizing, improved code generation / vectorization, and more. AOCC 1.1 is derived from the LLVM Clang 6.0 code-base where as the v1.0 release came from the LLVM 5.0 lineage. AOCC 1.1 also now makes use of some optimized libraries like the AMD Math Library, switches to the LLD LLVM Linker by default, and is designed for current Enterprise Linux releases.
AOCC 1.1 behaves the same as AOCC and that of the upstream LLVM/Clang compiler for that matter. AMD does not share their source changes to AOCC at this time so we don't know quite how many patches they are currently carrying against LLVM/Clang 6.0. Hopefully more of this work will be upstreamed in the near future to benefit LLVM/Clang itself on AMD CPUs. Before anyone asks, when checking out the AOCC 1.1 binaries, there are only Zen version 1 "znver1" references and not yet any early signs of compiler work on "znver2".
For this initial AOCC 1.1 C/C++ compiler benchmarking I tested it out on the AMD EPYC 7601 using the Tyan B8026T70AE24HR 2U server with Intel Optane 900p 280GB NVme U.2 SSD and was loaded with Ubuntu 17.10 x86_64 with the Linux 4.15.0 kernel. The compilers tested were GCC 7.2.0 (the default Ubuntu 17.10 compiler), GCC 8.0.1 built from source on 29 January, LLVM Clang 5.0 as available via Ubuntu Artful, and LLVM Clang 6.0 SVN and 7.0 SVN via the LLVM.org APT repository. LLVM/Clang 6.0 was branched from master earlier this month so at this stage there isn't much to LLVM/Clang 7.0, but it was included nevertheless. Lastly was the AOCC 1.1 compiler derived from LLVM Clang 6.0.
During these C/C++ compiler benchmarks with the six different code compilers, the CFLAGS/CXXFLAGS were set to "-O3 -march=native." All of these benchmarks were carried out using the Phoronix Test Suite.