| #
f22fbe3a |
| 13-Apr-2020 |
Christopher Tetreault <[email protected]> |
Clean up usages of asserting vector getters in Type
Summary: Remove usages of asserting vector getters in Type in preparation for the VectorType refactor. The existence of these functions complicate
Clean up usages of asserting vector getters in Type
Summary: Remove usages of asserting vector getters in Type in preparation for the VectorType refactor. The existence of these functions complicates the refactor while adding little value.
Reviewers: sdesmalen, efriedma, krememek
Reviewed By: sdesmalen, efriedma
Subscribers: dexonsmith, Charusso, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D77257
show more ...
|
| #
878d9601 |
| 08-Apr-2020 |
Raul Tambre <[email protected]> |
[clang][CodeGen] Handle throw expression in conditional operator constant folding
Summary: We're smart and do constant folding when emitting conditional operators. Thus we emit the live value as a l
[clang][CodeGen] Handle throw expression in conditional operator constant folding
Summary: We're smart and do constant folding when emitting conditional operators. Thus we emit the live value as a lvalue. This doesn't work if the live value is a throw expression. Handle this by emitting the throw and returning the dead value as the lvalue.
Fixes PR28184.
Reviewers: rsmith
Reviewed By: rsmith
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D77502
show more ...
|
| #
1ee6ec2b |
| 31-Mar-2020 |
Eli Friedman <[email protected]> |
Remove "mask" operand from shufflevector.
Instead, represent the mask as out-of-line data in the instruction. This should be more efficient in the places that currently use getShuffleVector(), and p
Remove "mask" operand from shufflevector.
Instead, represent the mask as out-of-line data in the instruction. This should be more efficient in the places that currently use getShuffleVector(), and paves the way for further changes to add new shuffles for scalable vectors.
This doesn't change the syntax in textual IR. And I don't currently plan to change the bitcode encoding in this patch, although we'll probably need to do something once we extend shufflevector for scalable types.
I expect that once this is finished, we can then replace the raw "mask" with something more appropriate for scalable vectors. Not sure exactly what this looks like at the moment, but there are a few different ways we could handle it. Maybe we could try to describe specific shuffles. Or maybe we could define it in terms of a function to convert a fixed-length array into an appropriate scalable vector, using a "step", or something like that.
Differential Revision: https://reviews.llvm.org/D72467
show more ...
|
| #
f18233da |
| 18-Mar-2020 |
Richard Smith <[email protected]> |
Fix -fsanitize=array-bound to treat T[0] union members as flexible array members regardless of whether they're the last member of the union.
|
| #
4cf01ed7 |
| 18-Mar-2020 |
Michael Liao <[email protected]> |
[hip] Revise `GlobalDecl` constructors. NFC.
Summary: - https://reviews.llvm.org/D68578 revises the `GlobalDecl` constructors to ensure all GPU kernels have `ReferenceKenelKind` initialized prop
[hip] Revise `GlobalDecl` constructors. NFC.
Summary: - https://reviews.llvm.org/D68578 revises the `GlobalDecl` constructors to ensure all GPU kernels have `ReferenceKenelKind` initialized properly with an explicit constructor and static one. But, there are lots of places using the implicit constructor triggering the assertion on non-GPU kernels. That's found in compilation of many tests and workloads. - Fixing all of them may change more code and, more importantly, all of them assumes the default kernel reference kind. This patch changes that constructor to tell `CUDAGlobalAttr` and construct `GlobalDecl` properly.
Reviewers: yaxunl
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D76344
show more ...
|
| #
40568fec |
| 10-Mar-2020 |
Akira Hatanaka <[email protected]> |
[CodeGen] Emit destructor calls to destruct compound literals
Fix a bug in IRGen where it wasn't destructing compound literals in C that are ObjC pointer arrays or non-trivial structs. Also diagnose
[CodeGen] Emit destructor calls to destruct compound literals
Fix a bug in IRGen where it wasn't destructing compound literals in C that are ObjC pointer arrays or non-trivial structs. Also diagnose jumps that enter or exit the lifetime of the compound literals.
rdar://problem/51867864
Differential Revision: https://reviews.llvm.org/D64464
show more ...
|
| #
22c457a8 |
| 05-Mar-2020 |
Yaxun (Sam) Liu <[email protected]> |
[HIP] Fix device stub name
HIP emits a device stub function for each kernel in host code.
The HIP debugger requires device stub function to have a different unmangled name as the kernel.
Currently
[HIP] Fix device stub name
HIP emits a device stub function for each kernel in host code.
The HIP debugger requires device stub function to have a different unmangled name as the kernel.
Currently the name of the device stub function is the mangled name with a postfix .stub. However, this does not work with the HIP debugger since the unmangled name is the same as the kernel.
This patch adds prefix __device__stub__ to the unmangled name of the device stub before mangling, therefore the device stub function has a valid mangled name which is different than the device kernel name. The device side kernel name is kept unchanged. kernels with extern "C" also gets the prefix added to the corresponding device stub function.
Differential Revision: https://reviews.llvm.org/D68578
show more ...
|
| #
29e1a16b |
| 05-Mar-2020 |
Yaxun (Sam) Liu <[email protected]> |
[NFC] Let mangler accept GlobalDecl
Differential Revision: https://reviews.llvm.org/D75700
|
| #
86565c13 |
| 27-Feb-2020 |
Reid Kleckner <[email protected]> |
Avoid SourceManager.h include in RawCommentList.h, add missing incs
SourceManager.h includes FileManager.h, which is expensive due to dependencies on LLVM FS headers.
Remove dead BeforeThanCompare
Avoid SourceManager.h include in RawCommentList.h, add missing incs
SourceManager.h includes FileManager.h, which is expensive due to dependencies on LLVM FS headers.
Remove dead BeforeThanCompare specialization.
Sink ASTContext::addComment to cpp file.
This reduces the time to compile a file that does nothing but include ASTContext.h from ~3.4s to ~2.8s for me.
Saves these includes: 219 - ../clang/include/clang/Basic/SourceManager.h 204 - ../clang/include/clang/Basic/FileSystemOptions.h 204 - ../clang/include/clang/Basic/FileManager.h 165 - ../llvm/include/llvm/Support/VirtualFileSystem.h 164 - ../llvm/include/llvm/Support/SourceMgr.h 164 - ../llvm/include/llvm/Support/SMLoc.h 161 - ../llvm/include/llvm/Support/Path.h 141 - ../llvm/include/llvm/ADT/BitVector.h 128 - ../llvm/include/llvm/Support/MemoryBuffer.h 124 - ../llvm/include/llvm/Support/FileSystem.h 124 - ../llvm/include/llvm/Support/Chrono.h 124 - .../MSVCSTL/include/stack 122 - ../llvm/include/llvm-c/Types.h 122 - ../llvm/include/llvm/Support/NativeFormatting.h 122 - ../llvm/include/llvm/Support/FormatProviders.h 122 - ../llvm/include/llvm/Support/CBindingWrapping.h 122 - .../MSVCSTL/include/xtimec.h 122 - .../MSVCSTL/include/ratio 122 - .../MSVCSTL/include/chrono 121 - ../llvm/include/llvm/Support/FormatVariadicDetails.h 118 - ../llvm/include/llvm/Support/MD5.h 109 - .../MSVCSTL/include/deque 105 - ../llvm/include/llvm/Support/Host.h 105 - ../llvm/include/llvm/Support/Endian.h
Reviewed By: aaron.ballman, hans
Differential Revision: https://reviews.llvm.org/D75279
show more ...
|
| #
9d869180 |
| 07-Feb-2020 |
Diogo Sampaio <[email protected]> |
[ARM] Follow AACPS for preserving number of loads/stores of volatile bit-fields
Summary: Following the AAPCS, every store to a volatile bit-field requires to generate one load of that field, even if
[ARM] Follow AACPS for preserving number of loads/stores of volatile bit-fields
Summary: Following the AAPCS, every store to a volatile bit-field requires to generate one load of that field, even if all the bits are going to be replaced. This patch allows the user to opt-in in following such rule, whenever the a.
AAPCS Release 2019Q1.1 (https://static.docs.arm.com/ihi0042/g/aapcs32.pdf) section 8.1 Data Types, page 35, paragraph: Volatile bit-fields – preserving number and width of container accesses
``` When a volatile bit-field is written, and its container does not overlap with any non-bit-field member, its container must be read exactly once and written exactly once using the access width appropriate to the type of the container. The two accesses are not atomic.
```
Reviewers: lebedev.ri, ostannard, jfb, eli.friedman
Reviewed By: jfb
Subscribers: rsmith, rjmccall, dexonsmith, kristof.beyls, jfb, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D67399
show more ...
|
| #
9271cab2 |
| 02-Feb-2020 |
Yonghong Song <[email protected]> |
[BPF] use base lvalue type for preserve_{struct,union}_access_index metadata
Linux commit https://github.com/torvalds/linux/commit/1cf5b23988ea0086a252a5c8b005b075f1e9b030#diff-289313b9fec99c6f0ac
[BPF] use base lvalue type for preserve_{struct,union}_access_index metadata
Linux commit https://github.com/torvalds/linux/commit/1cf5b23988ea0086a252a5c8b005b075f1e9b030#diff-289313b9fec99c6f0acfea19d9cfd949 uses "#pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)" to apply CO-RE relocations to all records including the following pattern: #pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record) typedef struct { int a; } __t; #pragma clang attribute pop int test(__t *arg) { return arg->a; }
The current approach to use struct type in the relocation record will result in an anonymous struct, which make later type matching difficult in bpf loader. In fact, current BPF backend will fail the above program with assertion: clang: ../lib/Target/BPF/BPFAbstractMemberAccess.cpp:796: ... Assertion `TypeName.size()' failed.
The patch use the base lvalue type for the "base" value to annotate preservee_{struct,union}_access_index intrinsics. In the above example, the type will be "__t" which preserved the type name.
Differential Revision: https://reviews.llvm.org/D73900
show more ...
|
| #
0130b6cb |
| 01-Feb-2020 |
Richard Smith <[email protected]> |
Don't assume a reference refers to at least sizeof(T) bytes.
When T is a class type, only nvsize(T) bytes need be accessible through the reference. We had matching bugs in the application of the der
Don't assume a reference refers to at least sizeof(T) bytes.
When T is a class type, only nvsize(T) bytes need be accessible through the reference. We had matching bugs in the application of the dereferenceable attribute and in -fsanitize=undefined.
show more ...
|
| #
adcd0268 |
| 28-Jan-2020 |
Benjamin Kramer <[email protected]> |
Make llvm::StringRef to std::string conversions explicit.
This is how it should've been and brings it more in line with std::string_view. There should be no functional change here.
This is mostly m
Make llvm::StringRef to std::string conversions explicit.
This is how it should've been and brings it more in line with std::string_view. There should be no functional change here.
This is mostly mechanical from a custom clang-tidy check, with a lot of manual fixups. It uncovers a lot of minor inefficiencies.
This doesn't actually modify StringRef yet, I'll do that in a follow-up.
show more ...
|
| #
2147703b |
| 21-Jan-2020 |
Diogo Sampaio <[email protected]> |
Revert "[ARM] Follow AACPS standard for volatile bit-fields access width"
This reverts commit 6a24339a45246b66bd3de88cc9c6a5b5e77c0645. Submitted using ide button by mistake
|
| #
6a24339a |
| 21-Jan-2020 |
Diogo Sampaio <[email protected]> |
[ARM] Follow AACPS standard for volatile bit-fields access width
Summary: This patch resumes the work of D16586. According to the AAPCS, volatile bit-fields should be accessed using containers of th
[ARM] Follow AACPS standard for volatile bit-fields access width
Summary: This patch resumes the work of D16586. According to the AAPCS, volatile bit-fields should be accessed using containers of the widht of their declarative type. In such case: ``` struct S1 { short a : 1; } ``` should be accessed using load and stores of the width (sizeof(short)), where now the compiler does only load the minimum required width (char in this case). However, as discussed in D16586, that could overwrite non-volatile bit-fields, which conflicted with C and C++ object models by creating data race conditions that are not part of the bit-field, e.g. ``` struct S2 { short a; int b : 16; } ``` Accessing `S2.b` would also access `S2.a`.
The AAPCS Release 2019Q1.1 (https://static.docs.arm.com/ihi0042/g/aapcs32.pdf) section 8.1 Data Types, page 35, "Volatile bit-fields - preserving number and width of container accesses" has been updated to avoid conflict with the C++ Memory Model. Now it reads in the note: ``` This ABI does not place any restrictions on the access widths of bit-fields where the container overlaps with a non-bit-field member. This is because the C/C++ memory model defines these as being separate memory locations, which can be accessed by two threads simultaneously. For this reason, compilers must be permitted to use a narrower memory access width (including splitting the access into multiple instructions) to avoid writing to a different memory location. ```
I've updated the patch D16586 to follow such behavior by verifying that we only change volatile bit-field access when: - it won't overlap with any other non-bit-field member - we only access memory inside the bounds of the record
Regarding the number of memory accesses, that should be preserved, that will be implemented by D67399.
Reviewers: rsmith, rjmccall, eli.friedman, ostannard
Subscribers: ostannard, kristof.beyls, cfe-commits, carwil, olista01
Tags: #clang
Differential Revision: https://reviews.llvm.org/D72932
show more ...
|
| #
d437fba8 |
| 16-Jan-2020 |
serge-sans-paille <[email protected]> |
Reapply Allow system header to provide their own implementation of some builtin
This reverts commit 3d210ed3d1880c615776b07d1916edb400c245a6.
See https://reviews.llvm.org/D71082 for the patch and d
Reapply Allow system header to provide their own implementation of some builtin
This reverts commit 3d210ed3d1880c615776b07d1916edb400c245a6.
See https://reviews.llvm.org/D71082 for the patch and discussion that make it possible to reapply this patch.
show more ...
|
| #
3d210ed3 |
| 15-Jan-2020 |
Amy Huang <[email protected]> |
Revert "Allow system header to provide their own implementation of some builtin"
This reverts commit 921f871ac438175ca8fcfcafdfcfac4d7ddf3905 because it causes libc++ code to trigger __warn_memset_z
Revert "Allow system header to provide their own implementation of some builtin"
This reverts commit 921f871ac438175ca8fcfcafdfcfac4d7ddf3905 because it causes libc++ code to trigger __warn_memset_zero_len.
See https://reviews.llvm.org/D71082.
show more ...
|
| #
16c53ffc |
| 11-Jan-2020 |
Simon Pilgrim <[email protected]> |
Fix "pointer is null" static analyzer warnings. NFCI.
Use castAs<> instead of getAs<> since the pointer is dereferenced immediately below and castAs will perform the null assertion for us.
|
|
Revision tags: llvmorg-9.0.1, llvmorg-9.0.1-rc3, llvmorg-9.0.1-rc2 |
|
| #
921f871a |
| 05-Dec-2019 |
serge-sans-paille <[email protected]> |
Allow system header to provide their own implementation of some builtin
If a system header provides an (inline) implementation of some of their function, clang still matches on the function name and
Allow system header to provide their own implementation of some builtin
If a system header provides an (inline) implementation of some of their function, clang still matches on the function name and generate the appropriate llvm builtin, e.g. memcpy. This behavior is in line with glibc recommendation « users may not provide their own version of symbols » but doesn't account for the fact that glibc itself can provide inline version of some functions.
It is the case for the memcpy function when -D_FORTIFY_SOURCE=1 is on. In that case an inline version of memcpy calls __memcpy_chk, a function that performs extra runtime checks. Clang currently ignores the inline version and thus provides no runtime check.
This code fixes the issue by detecting functions whose name is a builtin name but also have an inline implementation.
Differential Revision: https://reviews.llvm.org/D71082
show more ...
|
| #
7b518dcb |
| 06-Jan-2020 |
Alexey Bataev <[email protected]> |
[OPENMP50]Support lastprivate conditional updates in inc/dec unary ops.
Added support for checking of updates of variables used in unary pre(pos) inc/dec expressions.
|
| #
a58da1a2 |
| 27-Dec-2019 |
Alexey Bataev <[email protected]> |
[OPENMP50]Codegen for lastprivate conditional list items.
Added codegen support for lastprivate conditional. According to the standard, if when the conditional modifier appears on the clause, if an
[OPENMP50]Codegen for lastprivate conditional list items.
Added codegen support for lastprivate conditional. According to the standard, if when the conditional modifier appears on the clause, if an assignment to a list item is encountered in the construct then the original list item is assigned the value that is assigned to the new list item in the sequentially last iteration or lexically last section in which such an assignment is encountered. We look for the assignment operations and check if the left side references lastprivate conditional variable. Then the next code is emitted: if (last_iv_a <= iv) { last_iv_a = iv; last_a = lp_a; }
At the end the implicit barrier is generated to wait for the end of all threads and then in the check for the last iteration the private copy is assigned the last value.
if (last_iter) { lp_a = last_a; // <--- new code a = lp_a; // <--- store of private value to the original variable. }
show more ...
|
| #
0860db96 |
| 19-Dec-2019 |
Alexey Bataev <[email protected]> |
[OPENMP50]Codegen for nontemporal clause.
Summary: Basic codegen for the declarations marked as nontemporal. Also, if the base declaration in the member expression is marked as nontemporal, lvalue f
[OPENMP50]Codegen for nontemporal clause.
Summary: Basic codegen for the declarations marked as nontemporal. Also, if the base declaration in the member expression is marked as nontemporal, lvalue for member decl access inherits nonteporal flag from the base lvalue.
Reviewers: rjmccall, hfinkel, jdoerfert
Subscribers: guansong, arphaman, caomhin, kkwli0, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D71708
show more ...
|
| #
d8136f14 |
| 29-Nov-2019 |
Akira Hatanaka <[email protected]> |
[CodeGen][ObjC] Emit a primitive store to store a __strong field in ExpandTypeFromArgs
This fixes a bug in IRGen where a call to `llvm.objc.storeStrong` was being emitted to initialize a __strong fi
[CodeGen][ObjC] Emit a primitive store to store a __strong field in ExpandTypeFromArgs
This fixes a bug in IRGen where a call to `llvm.objc.storeStrong` was being emitted to initialize a __strong field of an uninitialized temporary struct, which caused crashes at runtime.
rdar://problem/51807365
show more ...
|
| #
f139ae3d |
| 03-Dec-2019 |
Akira Hatanaka <[email protected]> |
[NFC] Pass a reference to CodeGenFunction to methods of LValue and AggValueSlot
This reapplies 8a5b7c35709d9ce1f44a99f0c5b084bf2696ea17 after a null dereference bug in CGOpenMPRuntime::emitUserDefin
[NFC] Pass a reference to CodeGenFunction to methods of LValue and AggValueSlot
This reapplies 8a5b7c35709d9ce1f44a99f0c5b084bf2696ea17 after a null dereference bug in CGOpenMPRuntime::emitUserDefinedMapper.
Original commit message:
This is needed for the pointer authentication work we plan to do in the near future.
https://github.com/apple/llvm-project/blob/a63a81bd9911f87a0b5dcd5bdd7ccdda7124af87/clang/docs/PointerAuthentication.rst
show more ...
|
| #
9f37c0e7 |
| 03-Dec-2019 |
Akira Hatanaka <[email protected]> |
Revert "[NFC] Pass a reference to CodeGenFunction to methods of LValue and"
This reverts commit 8a5b7c35709d9ce1f44a99f0c5b084bf2696ea17. This seems to have broken UBSan because of a null dereferenc
Revert "[NFC] Pass a reference to CodeGenFunction to methods of LValue and"
This reverts commit 8a5b7c35709d9ce1f44a99f0c5b084bf2696ea17. This seems to have broken UBSan because of a null dereference.
show more ...
|