#
5d9de5f4 |
| 07-Jun-2022 |
Mitch Phillips <31459023+hctim@users.noreply.github.com> |
[NFC] Clang-format parts of D126929 and D126100
|
Revision tags: llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1 |
|
#
42861faa |
| 29-Mar-2022 |
Augie Fackler <augie@google.com> |
attributes: introduce allockind attr for describing allocator fn behavior
I chose to encode the allockind information in a string constant because otherwise we would get a bit of an explosion of key
attributes: introduce allockind attr for describing allocator fn behavior
I chose to encode the allockind information in a string constant because otherwise we would get a bit of an explosion of keywords to deal with the possible permutations of allocation function types.
I'm not sure that CodeGen.h is the correct place for this enum, but it seemed to kind of match the UWTableKind enum so I put it in the same place. Constructive suggestions on a better location most certainly encouraged.
Differential Revision: https://reviews.llvm.org/D123088
show more ...
|
#
bb353df5 |
| 12-May-2022 |
Fangrui Song <i@maskray.me> |
[Bitcode] Simplify code after FUNC_CODE_BLOCKADDR_USERS changes (D124878)
Switch to the more common `Constant && !GlobalValue` test. Use the more common `Worklist/Visited` variable names.
|
#
6baaad74 |
| 10-May-2022 |
Wende Tan <twd2.me@gmail.com> |
[Bitcode] Include indirect users of BlockAddresses in bitcode
The original fix (commit 23ec5782c3cc) of https://github.com/llvm/llvm-project/issues/52787 only adds `Function`s that have `Instruction
[Bitcode] Include indirect users of BlockAddresses in bitcode
The original fix (commit 23ec5782c3cc) of https://github.com/llvm/llvm-project/issues/52787 only adds `Function`s that have `Instruction`s that directly use `BlockAddress`es into the bitcode (`FUNC_CODE_BLOCKADDR_USERS`).
However, in either @rickyz's original reproducing code:
``` void f(long);
__attribute__((noinline)) static void fun(long x) { f(x + 1); }
void repro(void) { fun(({ label: (long)&&label; })); } ```
``` ... define dso_local void @repro() #0 { entry: br label %label
label: ; preds = %entry tail call fastcc void @fun() ret void }
define internal fastcc void @fun() unnamed_addr #1 { entry: tail call void @f(i64 add (i64 ptrtoint (i8* blockaddress(@repro, %label) to i64), i64 1)) #3 ret void } ... ```
or the xfs and overlayfs in the Linux kernel, `BlockAddress`es (e.g., `i8* blockaddress(@repro, %label)`) may first compose `ConstantExpr`s (e.g., `i64 ptrtoint (i8* blockaddress(@repro, %label) to i64)`) and then used by `Instruction`s. This case is not handled by the original fix.
This patch adds *indirect* users of `BlockAddress`es, i.e., the `Instruction`s using some `Constant`s which further use the `BlockAddress`es, into the bitcode as well, by doing depth-first searches.
Fixes: https://github.com/llvm/llvm-project/issues/52787 Fixes: 23ec5782c3cc ("[Bitcode] materialize Functions early when BlockAddress taken")
Reviewed By: nickdesaulniers
Differential Revision: https://reviews.llvm.org/D124878
show more ...
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2 |
|
#
a907d36c |
| 24-Feb-2022 |
Augie Fackler <augie@google.com> |
Attributes: add a new `allocptr` attribute
This continues the push away from hard-coded knowledge about functions towards attributes. We'll use this to annotate free(), realloc() and cousins and obv
Attributes: add a new `allocptr` attribute
This continues the push away from hard-coded knowledge about functions towards attributes. We'll use this to annotate free(), realloc() and cousins and obviate the hard-coded list of free functions.
Differential Revision: https://reviews.llvm.org/D123083
show more ...
|
#
e6f44a3c |
| 14-Apr-2022 |
Chris Bieneman <chris.bieneman@me.com> |
Add PointerType analysis for DirectX backend
As implemented this patch assumes that Typed pointer support remains in the llvm::PointerType class, however this could be modified to use a different su
Add PointerType analysis for DirectX backend
As implemented this patch assumes that Typed pointer support remains in the llvm::PointerType class, however this could be modified to use a different subclass of llvm::Type that could be disallowed from use in other contexts.
This does not rely on inserting typed pointers into the Module, it just uses the llvm::PointerType class to track and unique types.
Fixes #54918
Reviewed By: kuhar
Differential Revision: https://reviews.llvm.org/D122268
show more ...
|
#
6c69427e |
| 13-Apr-2022 |
Ilia Diachkov <iliya.diyachkov@intel.com> |
[SPIR-V](3/6) Add MC layer, object file support, and InstPrinter
The patch adds SPIRV-specific MC layer implementation, SPIRV object file support and SPIRVInstPrinter.
Differential Revision: https:
[SPIR-V](3/6) Add MC layer, object file support, and InstPrinter
The patch adds SPIRV-specific MC layer implementation, SPIRV object file support and SPIRVInstPrinter.
Differential Revision: https://reviews.llvm.org/D116462
Authors: Aleksandr Bezzubikov, Lewis Crawford, Ilia Diachkov, Michal Paszkowski, Andrey Tretyakov, Konrad Trifunovic
Co-authored-by: Aleksandr Bezzubikov <zuban32s@gmail.com> Co-authored-by: Ilia Diachkov <iliya.diyachkov@intel.com> Co-authored-by: Michal Paszkowski <michal.paszkowski@outlook.com> Co-authored-by: Andrey Tretyakov <andrey1.tretyakov@intel.com> Co-authored-by: Konrad Trifunovic <konrad.trifunovic@intel.com>
show more ...
|
#
eab6e94f |
| 06-Apr-2022 |
Chih-Ping Chen <chih-ping.chen@intel.com> |
[DebugInfo] Add a TargetFuncName field in DISubprogram for specifying DW_AT_trampoline as a string. Also update the signature of DIBuilder::createFunction to reflect this addition.
Differential Revi
[DebugInfo] Add a TargetFuncName field in DISubprogram for specifying DW_AT_trampoline as a string. Also update the signature of DIBuilder::createFunction to reflect this addition.
Differential Revision: https://reviews.llvm.org/D123697
show more ...
|
#
23ec5782 |
| 12-Apr-2022 |
Nick Desaulniers <ndesaulniers@google.com> |
[Bitcode] materialize Functions early when BlockAddress taken
IRLinker builds a work list of functions to materialize, then moves them from a source module to a destination module one at a time.
Th
[Bitcode] materialize Functions early when BlockAddress taken
IRLinker builds a work list of functions to materialize, then moves them from a source module to a destination module one at a time.
This is a problem for blockaddress Constants, since they need not refer to the function they are used in; IPSCCP is quite good at sinking these constants deep into other functions when passed as arguments.
This would lead to curious errors during LTO: ld.lld: error: Never resolved function from blockaddress ... based on the ordering of function definitions in IR.
The problem was that IRLinker would basically do:
for function f in worklist: materialize f splice f from source module to destination module
in one pass, with Functions being lazily added to the running worklist. This confuses BitcodeReader, which cannot disambiguate whether a blockaddress is referring to a function which has not yet been parsed ("materialized") or is simply empty because its body was spliced out. This causes BitcodeReader to insert Functions into its BasicBlockFwdRefs list incorrectly, as it will never re-materialize an already materialized (but spliced out) function.
Because of the possibility that blockaddress Constants may appear in Functions other than the ones they reference, this patch adds a new bitcode function code FUNC_CODE_BLOCKADDR_USERS that is a simple list of Functions that contain BlockAddress Constants that refer back to this Function, rather then the Function they are scoped in. We then materialize those functions when materializing `f` from the example loop above. This might over-materialize Functions should the user of BitcodeReader ultimately decide not to link those Functions, but we can at least now we can avoid this ordering related issue with blockaddresses.
Fixes: https://github.com/llvm/llvm-project/issues/52787 Fixes: https://github.com/ClangBuiltLinux/linux/issues/1215
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D120781
show more ...
|
#
330268ba |
| 04-Apr-2022 |
Argyrios Kyrtzidis <kyrtzidis@apple.com> |
[Support/Hash functions] Change the `final()` and `result()` of the hashing functions to return an array of bytes
Returning `std::array<uint8_t, N>` is better ergonomics for the hashing functions us
[Support/Hash functions] Change the `final()` and `result()` of the hashing functions to return an array of bytes
Returning `std::array<uint8_t, N>` is better ergonomics for the hashing functions usage, instead of a `StringRef`:
* When returning `StringRef`, client code is "jumping through hoops" to do string manipulations instead of dealing with fixed array of bytes directly, which is more natural * Returning `std::array<uint8_t, N>` avoids the need for the hasher classes to keep a field just for the purpose of wrapping it and returning it as a `StringRef`
As part of this patch also:
* Introduce `TruncatedBLAKE3` which is useful for using BLAKE3 as the hasher type for `HashBuilder` with non-default hash sizes. * Make `MD5Result` inherit from `std::array<uint8_t, 16>` which improves & simplifies its API.
Differential Revision: https://reviews.llvm.org/D123100
show more ...
|
#
9130e471 |
| 19-Mar-2022 |
Chris Bieneman <cbieneman@microsoft.com> |
Add DXContainer
DXIL is wrapped in a container format defined by the DirectX 11 specification. Codebases differ in calling this format either DXBC or DXILContainer.
Since eventually we want to add
Add DXContainer
DXIL is wrapped in a container format defined by the DirectX 11 specification. Codebases differ in calling this format either DXBC or DXILContainer.
Since eventually we want to add support for DXBC as a target architecture and the format is used by DXBC and DXIL, I've termed it DXContainer here.
Most of the changes in this patch are just adding cases to switch statements to address warnings.
Reviewed By: pete
Differential Revision: https://reviews.llvm.org/D122062
show more ...
|
#
40d7d2ed |
| 23-Mar-2022 |
Nikita Popov <npopov@redhat.com> |
[Bitcode] Check for live uses of llvm.cmdline/embedded.module
The one use check here is very misleading: At this point we should actually have no uses, because the only possible use in llvm.used was
[Bitcode] Check for live uses of llvm.cmdline/embedded.module
The one use check here is very misleading: At this point we should actually have no uses, because the only possible use in llvm.used was already dropped. But because the use in llvm.used is generally bitcasted, we end up still having one dead use here.
What we actually want to check is that there are no live uses, for which a helper has recently been added.
show more ...
|
#
a0d2b0aa |
| 11-Mar-2022 |
Nikita Popov <npopov@redhat.com> |
[Bitcode] Clarify that extractvalue/insertvalue constexprs are not supported
Bitcode currently cannot encode these. Throw a more obvious error in this case, rather than failing an operand count asse
[Bitcode] Clarify that extractvalue/insertvalue constexprs are not supported
Bitcode currently cannot encode these. Throw a more obvious error in this case, rather than failing an operand count assertion.
show more ...
|
#
b1901086 |
| 11-Mar-2022 |
Nikita Popov <npopov@redhat.com> |
[Bitcode] Encode alloca address space
Since D101045, allocas are no longer required to be part of the default alloca address space. There may be allocas in multiple different address spaces. However
[Bitcode] Encode alloca address space
Since D101045, allocas are no longer required to be part of the default alloca address space. There may be allocas in multiple different address spaces. However, the bitcode reader would simply assume the default alloca address space, resulting in either an error or incorrect IR.
Add an optional record for allocas which encodes the address space.
show more ...
|
Revision tags: llvmorg-14.0.0-rc1, llvmorg-15-init |
|
#
d664c4b7 |
| 21-Jan-2022 |
Augie Fackler <augie@google.com> |
Attributes: add a new allocalign attribute
This will let us start moving away from hard-coded attributes in MemoryBuiltins.cpp and put the knowledge about various attribute functions in the compiler
Attributes: add a new allocalign attribute
This will let us start moving away from hard-coded attributes in MemoryBuiltins.cpp and put the knowledge about various attribute functions in the compilers that emit those calls where it probably belongs.
Differential Revision: https://reviews.llvm.org/D117921
show more ...
|
#
17ce89fa |
| 01-Mar-2022 |
Tong Zhang <ztong0001@gmail.com> |
[SanitizerBounds] Add support for NoSanitizeBounds function
Currently adding attribute no_sanitize("bounds") isn't disabling -fsanitize=local-bounds (also enabled in -fsanitize=bounds). The Clang fr
[SanitizerBounds] Add support for NoSanitizeBounds function
Currently adding attribute no_sanitize("bounds") isn't disabling -fsanitize=local-bounds (also enabled in -fsanitize=bounds). The Clang frontend handles fsanitize=array-bounds which can already be disabled by no_sanitize("bounds"). However, instrumentation added by the BoundsChecking pass in the middle-end cannot be disabled by the attribute.
The fix is very similar to D102772 that added the ability to selectively disable sanitizer pass on certain functions.
In this patch, if no_sanitize("bounds") is provided, an additional function attribute (NoSanitizeBounds) is attached to IR to let the BoundsChecking pass know we want to disable local-bounds checking. In order to support this feature, the IR is extended (similar to D102772) to make Clang able to preserve the information and let BoundsChecking pass know bounds checking is disabled for certain function.
Reviewed By: melver
Differential Revision: https://reviews.llvm.org/D119816
show more ...
|
#
7aaf024d |
| 01-Feb-2022 |
Fangrui Song <i@maskray.me> |
[BitcodeWriter] Fix cases of some functions
`WriteIndexToFile` is used by external projects so I do not touch it.
|
#
85dfe19b |
| 01-Feb-2022 |
Fangrui Song <i@maskray.me> |
[ModuleUtils] Move EmbedBufferInModule to LLVMTransformsUtils
D116542 adds EmbedBufferInModule which introduces a layer violation (https://llvm.org/docs/CodingStandards.html#library-layering). See 2
[ModuleUtils] Move EmbedBufferInModule to LLVMTransformsUtils
D116542 adds EmbedBufferInModule which introduces a layer violation (https://llvm.org/docs/CodingStandards.html#library-layering). See 2d5f857a1eaf5f7a806d12953c79b96ed8952da8 for detail.
EmbedBufferInModule does not use BitcodeWriter functionality and should be moved LLVMTransformsUtils. While here, change the function case to the prevailing convention.
It seems that EmbedBufferInModule just follows the steps of EmbedBitcodeInModule. EmbedBitcodeInModule calls WriteBitcodeToFile but has IR update operations which ideally should be refactored to another library.
Reviewed By: jhuber6
Differential Revision: https://reviews.llvm.org/D118666
show more ...
|
#
4a780aa1 |
| 31-Jan-2022 |
Joseph Huber <jhuber6@vols.utk.edu> |
[LLVM] Resolve layer violation in BitcodeWriter
Summary: The changes introduced in D116542 added a dependency on TransformUtils to use the `appendToCompilerUsed` method. This created a circular depe
[LLVM] Resolve layer violation in BitcodeWriter
Summary: The changes introduced in D116542 added a dependency on TransformUtils to use the `appendToCompilerUsed` method. This created a circular dependency. This patch simply copies the needed function locally to remove the dependency.
show more ...
|
Revision tags: llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
#
551b1774 |
| 03-Dec-2021 |
Joseph Huber <jhuber6@vols.utk.edu> |
[OpenMP] Add a flag for embedding a file into the module
This patch adds support for a flag `-fembed-offload-binary` to embed a file as an ELF section in the output by placing it in a global variabl
[OpenMP] Add a flag for embedding a file into the module
This patch adds support for a flag `-fembed-offload-binary` to embed a file as an ELF section in the output by placing it in a global variable. This can be used to bundle offloading files with the host binary so it can be accessed by the linker. The section is named using the `-fembed-offload-section` option.
Depends on D116541
Reviewed By: JonChesterfield
Differential Revision: https://reviews.llvm.org/D116542
show more ...
|
#
28bfa57a |
| 18-Jan-2022 |
Chih-Ping Chen <chih-ping.chen@intel.com> |
[DebugInfo] Add stringLocationExp field to DIStringType
DIStringType is used to encode the debug info of a character object in Fortran. A Fortran deferred-length character object is typically implem
[DebugInfo] Add stringLocationExp field to DIStringType
DIStringType is used to encode the debug info of a character object in Fortran. A Fortran deferred-length character object is typically implemented as a pair of the following two pieces of info: An address of the raw storage of the characters, and the length of the object. The stringLocationExp field contains the DIExpression to get to the raw storage.
This patch also enables the emission of DW_AT_data_location attribute in a DW_TAG_string_type debug info entry based on stringLocationExp in DIStringType.
A test is also added to ensure that the bitcode reader is backward compatible with the old DIStringType format.
Differential Revision: https://reviews.llvm.org/D117586
show more ...
|
#
aa97bc11 |
| 21-Jan-2022 |
Nikita Popov <npopov@redhat.com> |
[NFC] Remove uses of PointerType::getElementType()
Instead use either Type::getPointerElementType() or Type::getNonOpaquePointerElementType().
This is part of D117885, in preparation for deprecatin
[NFC] Remove uses of PointerType::getElementType()
Instead use either Type::getPointerElementType() or Type::getNonOpaquePointerElementType().
This is part of D117885, in preparation for deprecating the API.
show more ...
|
#
62b16825 |
| 30-Dec-2021 |
Roman Lebedev <lebedev.ri@gmail.com> |
[Opaqueptrs][IR Serialization] Improve inlineasm [de]serialization
The bitcode reader expected that the pointers are typed, so that it can extract the function type for the assembly so `bitc::CST_CO
[Opaqueptrs][IR Serialization] Improve inlineasm [de]serialization
The bitcode reader expected that the pointers are typed, so that it can extract the function type for the assembly so `bitc::CST_CODE_INLINEASM` did not explicitly store said function type.
I'm not really sure how the upgrade path will look for existing bitcode, but i think we can easily support opaque pointers going forward, by simply storing the function type.
Reviewed By: #opaque-pointers, nikic
Differential Revision: https://reviews.llvm.org/D116341
show more ...
|
Revision tags: llvmorg-13.0.1-rc1, llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2 |
|
#
5dc8aaac |
| 10-Aug-2021 |
Sami Tolvanen <samitolvanen@google.com> |
[llvm][IR] Add no_cfi constant
With Control-Flow Integrity (CFI), the LowerTypeTests pass replaces function references with CFI jump table references, which is a problem for low-level code that need
[llvm][IR] Add no_cfi constant
With Control-Flow Integrity (CFI), the LowerTypeTests pass replaces function references with CFI jump table references, which is a problem for low-level code that needs the address of the actual function body.
For example, in the Linux kernel, the code that sets up interrupt handlers needs to take the address of the interrupt handler function instead of the CFI jump table, as the jump table may not even be mapped into memory when an interrupt is triggered.
This change adds the no_cfi constant type, which wraps function references in a value that LowerTypeTestsModule::replaceCfiUses does not replace.
Link: https://github.com/ClangBuiltLinux/linux/issues/1353
Reviewed By: nickdesaulniers, pcc
Differential Revision: https://reviews.llvm.org/D108478
show more ...
|
#
09a704c5 |
| 10-Dec-2021 |
Mingming Liu <mingmingl@google.com> |
[LTO] Ignore unreachable virtual functions in WPD in hybrid LTO.
Differential Revision: https://reviews.llvm.org/D115492
|