RELEASE_NOTES 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. The following are the changes in the 8.0.6 release of the Snapdragon LLVM
  2. ARM C/C++ Toolchain over the 8.0.5 release.
  3. 1. Add support for Android Debugging with LTO
  4. 2. Add support for ARMv8.2-A ISA extensions
  5. 3. Fix clang --version output
  6. 4. Disable NEON vectorizer warning on AArch64
  7. 5. Windows ARM64 Structured Exception Handling (SEH) fixes
  8. 6. Clang driver fixes for Windows ARM64
  9. The following are the changes in the 8.0.5 release of the Snapdragon LLVM
  10. ARM C/C++ Toolchain over the 8.0.4 release.
  11. 1. Fix corner case where an incorrect ARM symbol table entry is generated
  12. The following are the changes in the 8.0.4 release of the Snapdragon LLVM
  13. ARM C/C++ Toolchain over the 8.0.3 release.
  14. 1. Add support for AArch64 "-execute-only" flag
  15. The following are the changes in the 8.0.3 release of the Snapdragon LLVM
  16. ARM C/C++ Toolchain over the 8.0.2 release.
  17. 1. Fix infinite compile time corner case
  18. 2. Update COFF support for Windows ARM64
  19. 3. Remove LLVM's addr2line utility from distribution. The Android prebuilt
  20. version of addr2line should be used for Android debugging.
  21. The following are the changes in the 8.0.2 release of the Snapdragon LLVM
  22. ARM C/C++ Toolchain over the 8.0.1 release.
  23. 1. Bring in Google fixes for sanitize flags
  24. 2. Bring in Google fixes for Implicit Integer Conversion Sanitizer
  25. The following are the changes in the 8.0.1 release of the Snapdragon LLVM
  26. ARM C/C++ Toolchain over the 8.0 release.
  27. 1. Disable value profiling by default to match community org behavior
  28. 2. Support for __builtin_constant_p intrinsic
  29. 3. Disable vectorization of half float type
  30. 4. Fix load time failure in Android libraries enabled with profile generation
  31. This is the release of Snapdragon LLVM ARM C/C++ Compiler toolchain version
  32. 8.0. This is a cross toolchain built to run on x86 64-bit Ubuntu Linux
  33. (versions 14.04 and later) and Windows platform (Windows 7 64-bit and later).
  34. The Snapdragon LLVM ARM Compiler will only generate code for ARM targets and
  35. will not generate code for any of the other targets supported by the AOSP LLVM
  36. compiler.
  37. Version 8.0 of the Snapdragon LLVM ARM toolchain includes all changes in the
  38. llvm.org 8.0 mainline and additionally includes patches that are post-7.0
  39. llvm.org release. The Snapdragon LLVM ARM toolchain 8.0 release includes
  40. proprietary features and optimizations that are not available in the llvm.org
  41. 8.0 mainline or in the AOSP LLVM compiler.
  42. The Snapdragon LLVM ARM Compiler uses the integrated assembler for assembling
  43. and includes a full featured proprietary linker (QC Linker) for linking.
  44. The following link contains all the new features in the llvm.org 7.0 release.
  45. http://releases.llvm.org/7.0.0/tools/clang/docs/ReleaseNotes.html
  46. The Snapdragon LLVM ARM 8.0 toolchain contains all the above features, and
  47. additionally contains the following key features compared to the Snapdragon
  48. LLVM ARM 6.0 toolchain:
  49. 1. Code size optimizations
  50. - Tuning of optimizations such as inlining, unrolling, etc., for better
  51. code size
  52. - Thumb-1 specific size optimizations
  53. - Tuning of auto-vectorizer for improved code size
  54. 2. Performance optimizations
  55. - Optimizations to improve the performance of Baremetal kernels and code
  56. patterns for Thumb-1
  57. - Improved ThinLTO optimizations
  58. - Auto-vectorization optimization for certain camera kernels
  59. 3. New linker support
  60. - Support for the LLD linker that is enabled for Android
  61. 4. Support for Windows ARM64
  62. - Full support for code generation for Windows ARM64 target
  63. - Full support for C++ exception handling and structured exception handling
  64. - Full support for Microsoft ABI for Windows ARM64
  65. - Support for commonly used Microsoft intrinsics for ARM64
  66. This version of the Snapdragon LLVM ARM toolchain may generate additional
  67. front-end warnings compared to the SDLLVM 6.0 version. However, we expect
  68. it to perform better than the 6.0 release. We recommend using this
  69. version for performance critical components (where possible).
  70. The complete Compiler User Guide for this release of the Snapdragon LLVM ARM
  71. Compiler is available as part of your download package under
  72. llvm-Snapdragon_LLVM_for_Android_8.0/prebuilt/<platform>/Snapdragon
  73. _LLVM_ARM_80_Compiler_User_Guide.pdf.
  74. Please post all questions about this release to
  75. http://developer.qualcomm.com/llvm-forum.
  76. Basic Usage & Examples:
  77. clang and clang++ are the C and C++ drivers respectively of Snapdragon
  78. LLVM ARM Compiler. They require users to specify the assembler and linker
  79. explicitly.
  80. For Windows:
  81. In order to use the drivers you need to specify a Windows version of the GCC
  82. cross toolchain as the sysroot.
  83. To invoke the compiler from a Windows command prompt:
  84. set PATH=<path-to-compiler-bin>;<path-to-sysroot-bin>;%PATH%
  85. clang.exe -mfloat-abi=softfp --sysroot=<path/to/sysroot> foo.c
  86. NOTE:
  87. On Windows, the LTO feature can only be used with the QC linker (ld.qcld).
  88. It cannot be used with the gold linker plugin since the plugin is not
  89. available for Windows platform.
  90. For Linux:
  91. Note that the Linux version of clang is built with support for using GCC 4.9.0
  92. sysroot by default. Users can use a different sysroot (such as GCC-4.8
  93. sysroot) by using the --sysroot option as described in section 4.5 of the
  94. Snapdragon LLVM ARM Compiler User Guide.
  95. Examples of clang driver usage on Linux:
  96. clang -march=armv7-a -mfloat-abi=softfp -mfpu=neon -O3 -o foo foo.c
  97. clang++ -mcpu=krait -mfloat-abi=softfp -mfpu=neon -Os -mthumb -o bar bar.cpp
  98. clang++ -mcpu=krait -mfloat-abi=softfp -mfpu=neon \
  99. --sysroot=</path/to/another-gcc-sysroot> -Ofast -c test.cpp
  100. For Android:
  101. For generating executables that can be executed on ARM Linux and Android
  102. environment, we recommend using -static linker flag to enable generation of
  103. static executables which do not have dependence on runtime OS libraries.
  104. Options:
  105. To find out the most common options, please pass the -help flag to the clang
  106. driver. This will report the Snapdragon LLVM ARM specific options and
  107. general ARM options first, before listing target independent options
  108. available in the Snapdragon LLVM ARM Compiler.
  109. Compiler options for best performance:
  110. For 64-bit applications, we recommend using "-Ofast -mcpu=cortex-a57" options
  111. for best performance on Kryo and Cortex-a57 cores, and "-Ofast
  112. -mcpu=cortex-a53" for best performance on Cortex-a53 cores.
  113. For 32-bit, we recommend using the "-Ofast -mcpu=krait" options for best
  114. performance of your application on Krait cores. For non-Krait 32-bit cores, we
  115. recommend using the "-Ofast" option. If you would like to avoid the generation
  116. of Krait specific instructions (hardware divide, fused-mac) to enable running
  117. on a variety of ARMv7 cores, but still optimize for best performance on Krait
  118. cores, we recommend the "-Ofast -march=armv7-a -mfpu=neon" options.
  119. The -Ofast option enables several high performance optimizations such as
  120. Auto-vectorizer. Please refer to section 4.3.19 of the Snapdragon LLVM ARM
  121. Compiler User Guide for more details.
  122. Compiler options for smallest code-size:
  123. We recommending using the "-Osize -mthumb" options to generate the most
  124. compact code with the Snapdragon LLVM ARM 8.0 compiler. Please refer to
  125. section 4.3.19 of the Snapdragon LLVM ARM Compiler User Guide for more details
  126. on the -Osize optimization level.
  127. Compiling for AArch64:
  128. To compile for AArch64 (ARMv8 64-bit mode), please pass the following option
  129. to clang:
  130. -target aarch64-linux-gnu
  131. Compiling for AArch32:
  132. To compile for AArch32, please pass the following option to clang:
  133. -target armv8-linux-gnueabi
  134. Note that even though AArch32 ISA is fully backward compatible with ARMv7 ISA,
  135. there are newer instructions in AArch32 ISA compared to ARMv7 ISA.
  136. This means that AArch32 executables cannot be executed on ARMv7 cores such
  137. as Krait.
  138. Please refer to section 4.3.19 of the Snapdragon LLVM ARM Compiler User Guide
  139. to learn about various optimization flags.
  140. LLVM's Support for GCC command line options:
  141. Most of the commonly used GCC options are supported by LLVM as well. A
  142. detailed list of options supported is listed in section 4 of the Snapdragon
  143. LLVM ARM Compiler User Guide.