[clang] Ensure -mno-outline adds attributes
Before this change, `-mno-outline` and `-moutline` only controlled the
pass pipelines for the invoked compiler/linker.
The drawback of this implementation is that, when using LTO, only the
flag provided to the linker invocation is honoured (and any files which
individually use `-mno-outline` will have that flag ignored).
This change serialises the `-mno-outline` flag into each function's
IR/Bitcode, so that we can correctly disable outlining from functions in
files which disabled outlining, without affecting outlining choices for
functions from other files. This matches how other optimisation flags
are handled so the IR/Bitcode can be correctly merged during LTO.
[clang] Add clang::no_outline Attribute (#163666)
This change:
- Adds a `[[clang::no_outline]]` function attribute for C and C++. There
is no equivalent GNU syntax for this attribute, so no `__attribute__`
syntax.
- Uses the presence of `[[clang::no_outline]]` to add the `nooutline`
attribute to IR function definitions.
- Adds test for the above.
The `nooutline` attribute disables both the Machine Outliner (enabled at
Oz for some targets), and the IR Outliner (disabled by default).
Fixes #144135
[RISCV] Simplify Extension Predicates, Compatibility (#181255)
This pushes some of our simplifications to extension dependencies into
other parts of RISCVISAInfo and into the tablegen predicates.
The key affected pieces are:
- Error messages around Zcd incompatibilities now reference only `zcd`.
- We now have a big list of extensions that are rv32-only.
Avoid PAM evaluations when internal tokens
This is a protective measure against mis-administration
of server ever resulting in denial of HA NODE operations.
Revert "[TableGen] Introduce MatcherList to manage a linked list of Matchers. NFC (#177875)"
This reverts commit 39613943855e6a82b1bb4c3d16fbaf2289a5d739.
It's failing across multiple build bots.
[TableGen] Introduce MatcherList to manage a linked list of Matchers. NFC (#177875)
The previous memory management involved passing around references to the
std::unique_ptr next pointer in each Matcher. Scopes and
SwitchOpcode/SwitchType did not use std::unique_ptr internally, but
would sometimes need to have the pointers to their children moved to
temporary std::unique_ptrs that may be modified and then put back into
the Scope/Switch. Other code used manual deletion.
This patch introduces a MatcherList object that encapsulates list
management and ownership. The interface is based on std::forward_list
using the libcxx implementation for reference.
Once a Matcher is added to a MatcherList it can only be in that list or
spliced into another list. This ensures it is always owned by a list
that will be responsible for deleting it.
Scope and SwitchOpcode/Type children are now MatcherLists rather than
Matcher*. A nice side effect of this is that we no longer need a Size
[7 lines not shown]
[Hexagon] Fix APInt assertion in getBuildVectorConstInts (#181202)
Truncate the ConstantSDNode APInt value to the element bit width before
creating the ConstantInt. After type legalization, a ConstantSDNode may
have a wider type than the vector element (e.g., i32 constant for an i16
element).
[SYCL][Driver] Pass path to libsycl.so by default for SYCL compilation. (#174877)
This patch updates the default behavior for `SYCL` offload compilations.
Specifically, we now pass the path to the SYCL runtime library,
`libsycl.so`, by default to the `clang-linker-wrapper` tool, which is
responsible for linking the `SYCL` runtime library. We also add the SYCL
header include paths by default to both the SYCL host and device
compilations.