-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathRELEASE_NOTES
executable file
·150 lines (114 loc) · 6.54 KB
/
RELEASE_NOTES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
The following are the changes in the 3.9.7 release of the Snapdragon LLVM ARM
C/C++ Toolchain over the 3.9.6 release.
1. Loop unroller fix for incorrect assumption of loop trip count on certain
loops
2. Fix incorrect runtime check for auto-vectorization for corner case loops
3. Bug fix for code generation for functions declared with __attribute__((naked))
4. Fix printf() implementation for floating-point numbers for ARMv6m
The following are the changes in the 3.9.6 release of the Snapdragon LLVM ARM
C/C++ Toolchain over the 3.9.5 release.
1. Correctly propagate all -mcpu options to QC Linker
2. Fix read-write position-independent (RWPI) issues
3. Disable atomic built-in implementation for target architectures that do
not support atomics
4. Linker fix for overflow detection on certain relocations
The following are the changes in the 3.9.5 release of the Snapdragon LLVM ARM
C/C++ Toolchain over the 3.9.4 release.
1. Compiler fix for invalid typecast generated by loop optimizer
2. Linker fixes
- Allow integer values to be specified in ELF PHDR flags as per ELF spec
- Support for errata 843419
- Fix crash seen with partial linking, in corner cases
- Support for "--unresolved-symbols" option
- Fix incorrect patching of AArch64 trampoline, in some cases
3. Static Analyzer fixes
- Support for whitelisting directories
- Allow blacklisting of bugs using an external file
The following are the changes in the 3.9.4 release of the Snapdragon LLVM ARM
C/C++ Toolchain over the 3.9.3 release.
1. Linker fix to correctly handle dynamic sections
2. Support for including C++ headers when using baremetal sysroot option
3. Fix for select conversion bug in the compiler
4. Support for C++17 structured bindings required to build Android
5. Static Analyzer fix for handling command lines with multiple object files
6. Correctness fix from Google for handling conditional move instructions
This is the release of Snapdragon LLVM ARM C/C++ compiler toolchain version
3.9.3 for Android. This is a cross toolchain built to run on x86 64-bit Ubuntu
Linux (versions 10.04 and later).
The Snapdragon LLVM ARM Compiler will only generate code for ARM targets and
will not generate code for any of the other targets supported by llvm.org.
Version 3.9.3 of Snapdragon LLVM ARM Compiler is based off the llvm.org 3.9
release. This Snapdragon LLVM ARM toolchain 3.9.3 release includes proprietary
features and optimizations that are not available in the llvm.org release.
The Snapdragon LLVM ARM Compiler uses the integrated assembler for assembling
and includes a full featured proprietary linker (QC Linker) for linking.
NOTE: GLIBCXX_3.4.18 or higher is required to run Snapdragon LLVM 3.9 on Ubuntu
x86 64-bit hosts; this library is typically available as part of Ubuntu
distribution or GCC-4.8 x86 distributions.
For LLVM ARM Compiler documentation requests, please get in touch with your
Qualcomm Android support point of contact.
The following are some of the key features in the 3.9.3 version compared to the
3.8 version:
1. Improved compiler warnings. Please refer to section 4.3.5.1 of the
Snapdragon LLVM ARM Compiler User Guide
2. Improved PGO feature with continued emphasis on using profiling for Android
environments
3. Several optimizations and features targeting baremetal images
This 3.9.3 release has been verified to build Android the same way as the
LLVM toolchain provided by Google does.
Basic Usage & Examples:
clang and clang++ are the C and C++ drivers respectively of Snapdragon
LLVM ARM Compiler. They require users to specify the assembler and linker
explicitly.
For Linux:
Note that clang does not use any sysroot by default. Users need to specify a
sysroot (such as GCC-4.9.0 sysroot) using the --sysroot option as described in
section 3.9 of the Snapdragon LLVM ARM Compiler User Guide.
Examples of clang driver usage on Linux:
clang -march=armv7-a -mfloat-abi=softfp -mfpu=neon -O3 -o foo foo.c
clang++ -mcpu=krait -mfloat-abi=softfp -mfpu=neon -Os -mthumb -o bar bar.cpp
clang++ -mcpu=krait -mfloat-abi=softfp -mfpu=neon \
--sysroot=</path/to/another-gcc-sysroot> -Ofast -c test.cpp
For generating executables that can be executed on ARM Linux and Android
environments, we recommend using the -static linker flag to enable generation
of static executables which do not have dependencies on runtime OS libraries.
Options:
To find out the most common options, please pass the -help flag to the clang
driver. This will report the Snapdragon LLVM ARM specific options and
general ARM options first, before listing target independent options
available in the Snapdragon LLVM ARM Compiler.
Compiler options for best performance:
For 64-bit applications, we recommend using "-Ofast -mcpu=cortex-a57" options
for best performance on Kryo and Cortex-a57 cores, and "-Ofast
-mcpu=cortex-a53" for best performance on Cortex-a53 cores.
For 32-bit, we recommend using the "-Ofast -mcpu=krait" options for best
performance of your application on Krait cores. For non-Krait 32-bit cores, we
recommend using the "-Ofast" option. If you would like to avoid the generation
of Krait specific instructions (hardware divide, fused-mac) to enable running
on a variety of ARMv7 cores, but still optimize for best performance on Krait
cores, we recommend the "-Ofast -march=armv7-a -mfpu=neon" options.
The -Ofast option enables several high performance optimizations such as
Auto-vectorizer. Please refer to section 4.3.19 of the Snapdragon LLVM ARM
Compiler User Guide for more details.
Compiler options for smallest code-size:
We recommending using the "-Osize -mthumb" options to generate the most compact
code with the Snapdragon LLVM 3.9 compiler. Please refer to section 4.3.19 of
the Snapdragon LLVM ARM Compiler User Guide for more details on the -Osize
optimization level.
Compiling for AArch64:
To compile for AArch64 (ARMv8 64-bit mode), please pass the following option to
clang:
-target aarch64-linux-gnu
Compiling for AArch32:
To compile for AArch32, please pass the following option to clang:
-target armv8-linux-gnueabi
Note that even though AArch32 ISA is fully backward compatible with ARMv7 ISA,
there are newer instructions in AArch32 ISA compared to ARMv7 ISA.
This means that AArch32 executables cannot be executed on ARMv7 cores such
as Krait.
Please refer to section 4.3.19 of the Snapdragon LLVM ARM Compiler User Guide to
learn about various optimization flags.
LLVM's Support for GCC command line options:
Most of the commonly used GCC options are supported by LLVM as well. A detailed
list of options supported is listed in section 4.3 of the Snapdragon LLVM ARM
Compiler User Guide.