#
fb0f7288 |
| 08-Dec-2020 |
Zequan Wu <zequanwu@google.com> |
[Clang] Make nomerge attribute a function attribute as well as a statement attribute.
Differential Revision: https://reviews.llvm.org/D92800
|
#
c36f31c4 |
| 15-Dec-2020 |
Rong Xu <xur@google.com> |
[PGO] remove unintentional code in early commit
Remove unintentional code in commit 54e03d [PGO] Verify BFI counts after loading profile data.
|
#
54e03d03 |
| 14-Dec-2020 |
Rong Xu <xur@google.com> |
[PGO] Verify BFI counts after loading profile data
This patch adds the functionality to compare BFI counts with real profile counts right after reading the profile. It will print remarks under -Rpas
[PGO] Verify BFI counts after loading profile data
This patch adds the functionality to compare BFI counts with real profile counts right after reading the profile. It will print remarks under -Rpass-analysis=pgo, or the internal option -pass-remarks-analysis=pgo.
Differential Revision: https://reviews.llvm.org/D91813
show more ...
|
#
1ab9327d |
| 05-Dec-2020 |
Fangrui Song <i@maskray.me> |
[TargetMachine][CodeGenModule] Delete unneeded ppc32 special case from shouldAssumeDSOLocal
PPCMCInstLower does not actually call shouldAssumeDSOLocal for ppc32 so this is dead. Actually Clang ppc32
[TargetMachine][CodeGenModule] Delete unneeded ppc32 special case from shouldAssumeDSOLocal
PPCMCInstLower does not actually call shouldAssumeDSOLocal for ppc32 so this is dead. Actually Clang ppc32 does produce a pair of absolute relocations which match GCC.
This also fixes a comment (R_PPC_COPY and R_PPC64_COPY do exist).
show more ...
|
#
0cbf61be |
| 03-Dec-2020 |
Nico Weber <thakis@chromium.org> |
[mac/arm] Fix rtti codegen tests when running on an arm mac
shouldRTTIBeUnique() returns false for iOS64CXXABI, which causes RTTI objects to be emitted hidden. Update two tests that didn't expect th
[mac/arm] Fix rtti codegen tests when running on an arm mac
shouldRTTIBeUnique() returns false for iOS64CXXABI, which causes RTTI objects to be emitted hidden. Update two tests that didn't expect this to happen for the default triple.
Also rename iOS64CXXABI to AppleARM64CXXABI, since it's used for arm64-apple-macos triples too.
Part of PR46644.
Differential Revision: https://reviews.llvm.org/D91904
show more ...
|
#
e42021d5 |
| 23-Nov-2020 |
Ben Dunbobbin <Ben.Dunbobbin@sony.com> |
[Clang][-fvisibility-from-dllstorageclass] Set DSO Locality from final visibility
Ensure that the DSO Locality of the globals in the IR is derived from their final visibility when using -fvisibility
[Clang][-fvisibility-from-dllstorageclass] Set DSO Locality from final visibility
Ensure that the DSO Locality of the globals in the IR is derived from their final visibility when using -fvisibility-from-dllstorageclass.
To accomplish this we reset the DSO locality of globals (before setting their visibility from their dllstorageclass) at the end of IRGen in Clang. This removes any effects that visibility options or annotations may have had on the DSO locality.
The resulting DSO locality of the globals will be pessimistic w.r.t. to the normal compiler IRGen.
Differential Revision: https://reviews.llvm.org/D91779
show more ...
|
#
17497ec5 |
| 19-Nov-2020 |
Xiangling Liao <Xiangling.Liao@ibm.com> |
[AIX][FE] Support constructor/destructor attribute
Support attribute((constructor)) and attribute((destructor)) on AIX
Differential Revision: https://reviews.llvm.org/D90892
|
#
f4c6080a |
| 18-Nov-2020 |
Nick Desaulniers <ndesaulniers@google.com> |
Revert "[IR] add fn attr for no_stack_protector; prevent inlining on mismatch"
This reverts commit b7926ce6d7a83cdf70c68d82bc3389c04009b841.
Going with a simpler approach.
|
#
b637148e |
| 21-Sep-2020 |
Richard Smith <richard@metafoo.co.uk> |
[c++20] For P0732R2 / P1907R1: Basic code generation and name mangling support for non-type template parameters of class type and template parameter objects.
The Itanium side of this follows the app
[c++20] For P0732R2 / P1907R1: Basic code generation and name mangling support for non-type template parameters of class type and template parameter objects.
The Itanium side of this follows the approach I proposed in https://github.com/itanium-cxx-abi/cxx-abi/issues/47 on 2020-09-06.
The MSVC side of this was determined empirically by observing MSVC's output.
Differential Revision: https://reviews.llvm.org/D89998
show more ...
|
#
d093401a |
| 09-Nov-2020 |
Tyker <tyker1@outlook.com> |
[NFC] Remove string parameter of annotation attribute from AST childs. this simplifies using annotation attributes when using clang as library
|
#
8930032f |
| 08-Nov-2020 |
Simon Pilgrim <llvm-dev@redking.me.uk> |
Don't dereference a dyn_cast<> result - use cast<> instead. NFCI.
We were relying on the dyn_cast<> succeeding - better use cast<> and have it assert that its the correct type than dereference a nul
Don't dereference a dyn_cast<> result - use cast<> instead. NFCI.
We were relying on the dyn_cast<> succeeding - better use cast<> and have it assert that its the correct type than dereference a null result.
show more ...
|
#
d2e7dca5 |
| 05-Nov-2020 |
Jan Ole Hüser <j.hueser@beckhoff.de> |
[CodeGen] Fix Bug 47499: __unaligned extension inconsistent behaviour with C and C++
For the language C++ the keyword __unaligned (a Microsoft extension) had no effect on pointers.
The reason, why
[CodeGen] Fix Bug 47499: __unaligned extension inconsistent behaviour with C and C++
For the language C++ the keyword __unaligned (a Microsoft extension) had no effect on pointers.
The reason, why there was a difference between C and C++ for the keyword __unaligned: For C, the Method getAsCXXREcordDecl() returns nullptr. That guarantees that hasUnaligned() is called. If the language is C++, it is not guaranteed, that hasUnaligend() is called and evaluated.
Here are some links:
The Bug: https://bugs.llvm.org/show_bug.cgi?id=47499 Thread on the cfe-dev mailing list: http://lists.llvm.org/pipermail/cfe-dev/2020-September/066783.html Diff, that introduced the check hasUnaligned() in getNaturalTypeAlignment(): https://reviews.llvm.org/D30166
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D90630
show more ...
|
#
7ad6010f |
| 03-Nov-2020 |
Ben Dunbobbin <Ben.Dunbobbin@sony.com> |
Fix - [Clang] Add the ability to map DLL storage class to visibility
415f7ee883 had a silly typo introduced when I inlined some code into a loop from its own function.
Original commit message:
For
Fix - [Clang] Add the ability to map DLL storage class to visibility
415f7ee883 had a silly typo introduced when I inlined some code into a loop from its own function.
Original commit message:
For PlayStation we offer source code compatibility with Microsoft's dllimport/export annotations; however, our file format is based on ELF.
To support this we translate from DLL storage class to ELF visibility at the end of codegen in Clang.
Other toolchains have used similar strategies (e.g. see the documentation for this ARM toolchain:
https://developer.arm.com/documentation/dui0530/i/migrating-from-rvct-v3-1-to-rvct-v4-0/changes-to-symbol-visibility-between-rvct-v3-1-and-rvct-v4-0)
This patch adds the ability to perform this translation. Options are provided to support customizing the mapping behaviour.
Differential Revision: https://reviews.llvm.org/D89970
show more ...
|
#
abd8cd91 |
| 28-Oct-2020 |
Yaxun (Sam) Liu <yaxun.liu@amd.com> |
[CUDA][HIP] Fix linkage for -fgpu-rdc
Currently for explicit template function instantiation in CUDA/HIP device compilation clang emits instantiated kernel with external linkage and instantiated dev
[CUDA][HIP] Fix linkage for -fgpu-rdc
Currently for explicit template function instantiation in CUDA/HIP device compilation clang emits instantiated kernel with external linkage and instantiated device function with internal linkage.
This is fine for -fno-gpu-rdc since there is only one TU.
However this causes duplicate symbols for kernels for -fgpu-rdc if the same instantiation happen in multiple TU. Or missing symbols if a device function calls an explicitly instantiated template function in a different TU.
To make explicit template function instantiation work for -fgpu-rdc we need to follow the C++ linkage paradigm, i.e. use weak_odr linkage.
Differential Revision: https://reviews.llvm.org/D90311
show more ...
|
#
ae9231ca |
| 02-Nov-2020 |
Ben Dunbobbin <Ben.Dunbobbin@sony.com> |
Reland - [Clang] Add the ability to map DLL storage class to visibility
415f7ee883 had LIT test failures on any build where the clang executable was not called "clang". I have adjusted the LIT CHECK
Reland - [Clang] Add the ability to map DLL storage class to visibility
415f7ee883 had LIT test failures on any build where the clang executable was not called "clang". I have adjusted the LIT CHECKs to remove the binary name to fix this.
Original commit message:
For PlayStation we offer source code compatibility with Microsoft's dllimport/export annotations; however, our file format is based on ELF.
To support this we translate from DLL storage class to ELF visibility at the end of codegen in Clang.
Other toolchains have used similar strategies (e.g. see the documentation for this ARM toolchain:
https://developer.arm.com/documentation/dui0530/i/migrating-from-rvct-v3-1-to-rvct-v4-0/changes-to-symbol-visibility-between-rvct-v3-1-and-rvct-v4-0)
This patch adds the ability to perform this translation. Options are provided to support customizing the mapping behaviour.
Differential Revision: https://reviews.llvm.org/D89970
show more ...
|
#
5024d3aa |
| 02-Nov-2020 |
Ben Dunbobbin <Ben.Dunbobbin@sony.com> |
Revert "[Clang] Add the ability to map DLL storage class to visibility"
This reverts commit 415f7ee8836944942d8beb70e982e95a312866a7.
The added tests were failing on the build bots!
|
#
415f7ee8 |
| 02-Nov-2020 |
Ben Dunbobbin <Ben.Dunbobbin@sony.com> |
[Clang] Add the ability to map DLL storage class to visibility
For PlayStation we offer source code compatibility with Microsoft's dllimport/export annotations; however, our file format is based on
[Clang] Add the ability to map DLL storage class to visibility
For PlayStation we offer source code compatibility with Microsoft's dllimport/export annotations; however, our file format is based on ELF.
To support this we translate from DLL storage class to ELF visibility at the end of codegen in Clang.
Other toolchains have used similar strategies (e.g. see the documentation for this ARM toolchain:
https://developer.arm.com/documentation/dui0530/i/migrating-from-rvct-v3-1-to-rvct-v4-0/changes-to-symbol-visibility-between-rvct-v3-1-and-rvct-v4-0)
This patch adds the ability to perform this translation. Options are provided to support customizing the mapping behaviour.
Differential Revision: https://reviews.llvm.org/D89970
show more ...
|
#
0949f96d |
| 29-Sep-2020 |
Teresa Johnson <tejohnson@google.com> |
[MemProf] Pass down memory profile name with optional path from clang
Similar to -fprofile-generate=, add -fmemory-profile= which takes a directory path. This is passed down to LLVM via a new module
[MemProf] Pass down memory profile name with optional path from clang
Similar to -fprofile-generate=, add -fmemory-profile= which takes a directory path. This is passed down to LLVM via a new module flag metadata. LLVM in turn provides this name to the runtime via the new __memprof_profile_filename variable.
Additionally, always pass a default filename (in $cwd if a directory name is not specified vi the = form of the option). This is also consistent with the behavior of the PGO instrumentation. Since the memory profiles will generally be fairly large, it doesn't make sense to dump them to stderr. Also, importantly, the memory profiles will eventually be dumped in a compact binary format, which is another reason why it does not make sense to send these to stderr by default.
Change the existing memprof tests to specify log_path=stderr when that was being relied on.
Depends on D89086.
Differential Revision: https://reviews.llvm.org/D89087
show more ...
|
#
c8f84bd0 |
| 26-Oct-2020 |
Nick Desaulniers <ndesaulniers@google.com> |
[Clang][CodeGen] fix failed assertion
Ensure we can emit symbol aliases via function attribute even when function signatures contain incomplete types.
Via bugreport: https://reviews.llvm.org/D66492
[Clang][CodeGen] fix failed assertion
Ensure we can emit symbol aliases via function attribute even when function signatures contain incomplete types.
Via bugreport: https://reviews.llvm.org/D66492#2350947
Reviewed By: erichkeane
Differential Revision: https://reviews.llvm.org/D90073
show more ...
|
#
d3205bbc |
| 26-Oct-2020 |
Tyker <tyker1@outlook.com> |
[Annotation] Allows annotation to carry some additional constant arguments.
This allows using annotation in a much more contexts than it currently has. especially when annotation with template or co
[Annotation] Allows annotation to carry some additional constant arguments.
This allows using annotation in a much more contexts than it currently has. especially when annotation with template or constexpr.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D88645
show more ...
|
#
2e204e23 |
| 29-Sep-2020 |
Melanie Blower <melanie.blower@intel.com> |
[clang] Enable support for #pragma STDC FENV_ACCESS
Reviewers: rjmccall, rsmith, sepavloff
Differential Revision: https://reviews.llvm.org/D87528
|
#
b7926ce6 |
| 23-Oct-2020 |
Nick Desaulniers <ndesaulniers@google.com> |
[IR] add fn attr for no_stack_protector; prevent inlining on mismatch
It's currently ambiguous in IR whether the source language explicitly did not want a stack a stack protector (in C, via function
[IR] add fn attr for no_stack_protector; prevent inlining on mismatch
It's currently ambiguous in IR whether the source language explicitly did not want a stack a stack protector (in C, via function attribute no_stack_protector) or doesn't care for any given function.
It's common for code that manipulates the stack via inline assembly or that has to set up its own stack canary (such as the Linux kernel) would like to avoid stack protectors in certain functions. In this case, we've been bitten by numerous bugs where a callee with a stack protector is inlined into an __attribute__((__no_stack_protector__)) caller, which generally breaks the caller's assumptions about not having a stack protector. LTO exacerbates the issue.
While developers can avoid this by putting all no_stack_protector functions in one translation unit together and compiling those with -fno-stack-protector, it's generally not very ergonomic or as ergonomic as a function attribute, and still doesn't work for LTO. See also: https://lore.kernel.org/linux-pm/20200915172658.1432732-1-rkir@google.com/ https://lore.kernel.org/lkml/20200918201436.2932360-30-samitolvanen@google.com/T/#u
Typically, when inlining a callee into a caller, the caller will be upgraded in its level of stack protection (see adjustCallerSSPLevel()). By adding an explicit attribute in the IR when the function attribute is used in the source language, we can now identify such cases and prevent inlining. Block inlining when the callee and caller differ in the case that one contains `nossp` when the other has `ssp`, `sspstrong`, or `sspreq`.
Fixes pr/47479.
Reviewed By: void
Differential Revision: https://reviews.llvm.org/D87956
show more ...
|
#
ba4768c9 |
| 21-Sep-2020 |
Richard Smith <richard@metafoo.co.uk> |
[c++20] For P0732R2 / P1907R1: Basic frontend support for class types as non-type template parameters.
Create a unique TemplateParamObjectDecl instance for each such value, representing the globally
[c++20] For P0732R2 / P1907R1: Basic frontend support for class types as non-type template parameters.
Create a unique TemplateParamObjectDecl instance for each such value, representing the globally unique template parameter object to which the template parameter refers.
No IR generation support yet; that will follow in a separate patch.
show more ...
|
#
0628bea5 |
| 19-Oct-2020 |
Hans Wennborg <hans@chromium.org> |
Revert "[PM/CC1] Add -f[no-]split-cold-code CC1 option to toggle splitting"
This broke Chromium's PGO build, it seems because hot-cold-splitting got turned on unintentionally. See comment on the cod
Revert "[PM/CC1] Add -f[no-]split-cold-code CC1 option to toggle splitting"
This broke Chromium's PGO build, it seems because hot-cold-splitting got turned on unintentionally. See comment on the code review for repro etc.
> This patch adds -f[no-]split-cold-code CC1 options to clang. This allows > the splitting pass to be toggled on/off. The current method of passing > `-mllvm -hot-cold-split=true` to clang isn't ideal as it may not compose > correctly (say, with `-O0` or `-Oz`). > > To implement the -fsplit-cold-code option, an attribute is applied to > functions to indicate that they may be considered for splitting. This > removes some complexity from the old/new PM pipeline builders, and > behaves as expected when LTO is enabled. > > Co-authored by: Saleem Abdulrasool <compnerd@compnerd.org> > Differential Revision: https://reviews.llvm.org/D57265 > Reviewed By: Aditya Kumar, Vedant Kumar > Reviewers: Teresa Johnson, Aditya Kumar, Fedor Sergeev, Philip Pfaffe, Vedant Kumar
This reverts commit 273c299d5d649a0222fbde03c9a41e41913751b4.
show more ...
|
#
273c299d |
| 13-Oct-2020 |
Vedant Kumar <vsk@apple.com> |
[PM/CC1] Add -f[no-]split-cold-code CC1 option to toggle splitting
This patch adds -f[no-]split-cold-code CC1 options to clang. This allows the splitting pass to be toggled on/off. The current metho
[PM/CC1] Add -f[no-]split-cold-code CC1 option to toggle splitting
This patch adds -f[no-]split-cold-code CC1 options to clang. This allows the splitting pass to be toggled on/off. The current method of passing `-mllvm -hot-cold-split=true` to clang isn't ideal as it may not compose correctly (say, with `-O0` or `-Oz`).
To implement the -fsplit-cold-code option, an attribute is applied to functions to indicate that they may be considered for splitting. This removes some complexity from the old/new PM pipeline builders, and behaves as expected when LTO is enabled.
Co-authored by: Saleem Abdulrasool <compnerd@compnerd.org> Differential Revision: https://reviews.llvm.org/D57265 Reviewed By: Aditya Kumar, Vedant Kumar Reviewers: Teresa Johnson, Aditya Kumar, Fedor Sergeev, Philip Pfaffe, Vedant Kumar
show more ...
|