- Dec 10, 2020
-
-
Krzysztof Parzyszek authored
Introduce HexagonVectorCombine as a helper class for vector-related optimizations.
-
Duncan P. N. Exon Smith authored
-
Saleem Abdulrasool authored
Rather than creating a series of associated calls and ensuring that everything is lined up, use a table driven approach that ensures that they two always stay in sync.
-
Nawrin Sultana authored
This patch adds new API __kmpc_taskloop_5 to accomadate strict modifier (introduced in OpenMP 5.1) in num_tasks and grainsize clause. Differential Revision: https://reviews.llvm.org/D92352
-
Duncan P. N. Exon Smith authored
This parameter is always set to `None`. Remove it. Differential Revision: https://reviews.llvm.org/D90889
-
Matt Morehouse authored
The wrapper clears shadow for optval and optlen when written. Reviewed By: stephan.yichao.zhao, vitalybuka Differential Revision: https://reviews.llvm.org/D92961
-
Rahul Joshi authored
- Remove some unused types from the Shape dialect - Fix from_extent_tensor to only allow 1D index tensors - Fix assuming_yield to only allow shape.assuming as the parent op. - Fix some documentation typos and reword some things. Differential Revision: https://reviews.llvm.org/D92901
-
Jason Molenda authored
When the architecture from the returned plist differs from the architecture lldb will pick when loading the binary file, lldb will reject the binary as not matching. We are working with UUID's in this case, so an architecture is not disambiguating anything; it just opens this possibility for failing to load the specified binary. Stop reading the architecture from the plist. <rdar://problem/71612561> Differential revision: https://reviews.llvm.org/D92692
-
Duncan P. N. Exon Smith authored
Migrate ObjCMT.cpp from using `const FileEntry*` to `FileEntryRef`. This is one of the blockers for changing `SourceManager` to use `FileEntryRef`. This adds an initial version of `SourceManager::getFileEntryRefForID`, which uses to `FileEntry::getLastRef`; after `SourceManager` switches, `SourceManager::getFileEntryForID` will need to call this function. This also adds uses of `FileEntryRef` as a key in a `DenseMap`, and a call to `hash_value(Optional)` in `DenseMapInfo<EditEntry>`; support for these were added in prep commits. Differential Revision: https://reviews.llvm.org/D92678
-
Peter Collingbourne authored
Normally compilers will allocate space for struct fields even if the field is an empty struct. Use the [[no_unique_address]] attribute to suppress that behavior. This attribute that was introduced in C++20, but compilers that do not support [[no_unique_address]] will ignore it since it uses C++11 attribute syntax. Differential Revision: https://reviews.llvm.org/D92966
-
Scott Linder authored
Avoids spurious newlines showing up in the output when emitting assembly via MC. Reviewed By: MaskRay, arsenm Differential Revision: https://reviews.llvm.org/D92690
-
Craig Topper authored
[X86] Use APInt::isSignedIntN instead of isIntN for 64-bit ANDs in X86DAGToDAGISel::IsProfitableToFold Pretty sure we meant to be checking signed 32 immediates here rather than unsigned 32 bit. I suspect I messed this up because in MathExtras.h we have isIntN and isUIntN so isIntN differs in signedness depending on whether you're using APInt or plain integers. This fixes a case where we didn't fold a constant created by shrinkAndImmediate. Since shrinkAndImmediate doesn't topologically sort constants it creates, we can fail to convert the Constant to a TargetConstant. This leads to very strange behavior later. Fixes PR48458.
-
Reid Kleckner authored
Pointed out by Ryan Prichard
-
Tres Popp authored
This is to prevent assertion failures on scf.if and shape.assuming operations where this is not enough information currently to handle any aliasing information. Differential Revision: https://reviews.llvm.org/D92963
-
Fangrui Song authored
-DENABLE_EXPERIMENTAL_NEW_PASS_MANAGER=on configured LLD and LLVMgold.so will use the new pass manager by default. Add an option to use the legacy pass manager. This will also be used by the Clang driver when -fno-new-pass-manager (D92915) / -fno-experimental-new-pass-manager is set. Reviewed By: aeubanks, tejohnson Differential Revision: https://reviews.llvm.org/D92916
-
Duncan P. N. Exon Smith authored
Use `FileManager::getVirtualFileRef` to get the virtual file for stdin, and add an overload of `SourceManager::overrideFileContents` that takes a `FileEntryRef`, migrating `CompilerInstance::InitializeSourceManager`. Differential Revision: https://reviews.llvm.org/D92680
-
Yuanfang Chen authored
Also remove the module triple of clang/test/CodeGenObjC/arc.ll, the commandline tripe is all it needs.
-
Scott Linder authored
Revert part of https://reviews.llvm.org/D92084 to make it simpler to start consuming the EndOfStatement token within AMDGPU's ParseInstruction in a future patch. This also brings us back to what every other target currently does. A future change to move the position back to the end of the statement would likely need to audit all of the AMDGPUOperand SMLoc ranges, and determine the SMLoc for the last character of the last operand. Reviewed By: dp Differential Revision: https://reviews.llvm.org/D92960
-
Matt Morehouse authored
The wrapper clears shadow for anything written by recvmsg. Reviewed By: stephan.yichao.zhao Differential Revision: https://reviews.llvm.org/D92949
-
Sam Clegg authored
Followup to https://reviews.llvm.org/D91769 which added support for names globals. Differential Revision: https://reviews.llvm.org/D92909
-
Mircea Trofin authored
Differential Revision: https://reviews.llvm.org/D92943
-
Kirill Bobyrev authored
Figuring out whether the server is responding and debugging issues with remote index setup is no easy task: add verbose logging for client side RPC requests to relieve some pain. Reviewed By: sammccall Differential Revision: https://reviews.llvm.org/D92181
-
Sergei Grechanik authored
This patch fixes a bug that allowed vectorizing of loops with loads and stores having indexing functions varying along different memory dimensions. Reviewed By: aartbik, dcaballe Differential Revision: https://reviews.llvm.org/D92702
-
Peyton, Jonathan L authored
KMP_AFFINITY=norespect was triggering an error because the underlying process affinity mask was not updated to include the entire machine. The Windows documentation states that the thread affinities must be subsets of the process affinity. This patch also moves the printing (for KMP_AFFINITY=verbose) of whether the initial mask was respected out of each topology detection function and to one location where the initial affinity mask is read. Differential Revision: https://reviews.llvm.org/D92587
-
Peyton, Jonathan L authored
Remove the user id component to the shm segment name and just use the pid like before. Differential Revision: https://reviews.llvm.org/D92660
-
Gabor Marton authored
CXXDeductionGuideDecl with a local typedef has its own copy of the TypedefDecl with the CXXDeductionGuideDecl as the DeclContext of that TypedefDecl. ``` template <typename T> struct A { typedef T U; A(U, T); }; A a{(int)0, (int)0}; ``` Related discussion on cfe-dev: http://lists.llvm.org/pipermail/cfe-dev/2020-November/067252.html Without this fix, when we import the CXXDeductionGuideDecl (via VisitFunctionDecl) then before creating the Decl we must import the FunctionType. However, the first parameter's type is the afore mentioned local typedef. So, we then start importing the TypedefDecl whose DeclContext is the CXXDeductionGuideDecl itself. The infinite loop is formed. ``` #0 clang::ASTNodeImporter::VisitCXXDeductionGuideDecl(clang::CXXDeductionGuideDecl*) clang/lib/AST/ASTImporter.cpp:3543:0 #1 clang::declvisitor::Base<std::add_pointer, clang::ASTNodeImporter, llvm::Expected<clang::Decl*> >::Visit(clang::Decl*) /home/egbomrt/WORK/llvm5/build/debug/tools/clang/include/clang/AST/DeclNodes.inc:405:0 #2 clang::ASTImporter::ImportImpl(clang::Decl*) clang/lib/AST/ASTImporter.cpp:8038:0 #3 clang::ASTImporter::Import(clang::Decl*) clang/lib/AST/ASTImporter.cpp:8200:0 #4 clang::ASTImporter::ImportContext(clang::DeclContext*) clang/lib/AST/ASTImporter.cpp:8297:0 #5 clang::ASTNodeImporter::ImportDeclContext(clang::Decl*, clang::DeclContext*&, clang::DeclContext*&) clang/lib/AST/ASTImporter.cpp:1852:0 #6 clang::ASTNodeImporter::ImportDeclParts(clang::NamedDecl*, clang::DeclContext*&, clang::DeclContext*&, clang::DeclarationName&, clang::NamedDecl*&, clang::SourceLocation&) clang/lib/AST/ASTImporter.cpp:1628:0 #7 clang::ASTNodeImporter::VisitTypedefNameDecl(clang::TypedefNameDecl*, bool) clang/lib/AST/ASTImporter.cpp:2419:0 #8 clang::ASTNodeImporter::VisitTypedefDecl(clang::TypedefDecl*) clang/lib/AST/ASTImporter.cpp:2500:0 #9 clang::declvisitor::Base<std::add_pointer, clang::ASTNodeImporter, llvm::Expected<clang::Decl*> >::Visit(clang::Decl*) /home/egbomrt/WORK/llvm5/build/debug/tools/clang/include/clang/AST/DeclNodes.inc:315:0 #10 clang::ASTImporter::ImportImpl(clang::Decl*) clang/lib/AST/ASTImporter.cpp:8038:0 #11 clang::ASTImporter::Import(clang::Decl*) clang/lib/AST/ASTImporter.cpp:8200:0 #12 llvm::Expected<clang::TypedefNameDecl*> clang::ASTNodeImporter::import<clang::TypedefNameDecl>(clang::TypedefNameDecl*) clang/lib/AST/ASTImporter.cpp:165:0 #13 clang::ASTNodeImporter::VisitTypedefType(clang::TypedefType const*) clang/lib/AST/ASTImporter.cpp:1304:0 #14 clang::TypeVisitor<clang::ASTNodeImporter, llvm::Expected<clang::QualType> >::Visit(clang::Type const*) /home/egbomrt/WORK/llvm5/build/debug/tools/clang/include/clang/AST/TypeNodes.inc:74:0 #15 clang::ASTImporter::Import(clang::QualType) clang/lib/AST/ASTImporter.cpp:8071:0 #16 llvm::Expected<clang::QualType> clang::ASTNodeImporter::import<clang::QualType>(clang::QualType const&) clang/lib/AST/ASTImporter.cpp:179:0 #17 clang::ASTNodeImporter::VisitFunctionProtoType(clang::FunctionProtoType const*) clang/lib/AST/ASTImporter.cpp:1244:0 #18 clang::TypeVisitor<clang::ASTNodeImporter, llvm::Expected<clang::QualType> >::Visit(clang::Type const*) /home/egbomrt/WORK/llvm5/build/debug/tools/clang/include/clang/AST/TypeNodes.inc:47:0 #19 clang::ASTImporter::Import(clang::QualType) clang/lib/AST/ASTImporter.cpp:8071:0 #20 llvm::Expected<clang::QualType> clang::ASTNodeImporter::import<clang::QualType>(clang::QualType const&) clang/lib/AST/ASTImporter.cpp:179:0 #21 clang::QualType clang::ASTNodeImporter::importChecked<clang::QualType>(llvm::Error&, clang::QualType const&) clang/lib/AST/ASTImporter.cpp:198:0 #22 clang::ASTNodeImporter::VisitFunctionDecl(clang::FunctionDecl*) clang/lib/AST/ASTImporter.cpp:3313:0 #23 clang::ASTNodeImporter::VisitCXXDeductionGuideDecl(clang::CXXDeductionGuideDecl*) clang/lib/AST/ASTImporter.cpp:3543:0 ``` The fix is to first create the TypedefDecl and only then start to import the DeclContext. Basically, we could do this during the import of all other Decls (not just for typedefs). But it seems, there is only one another AST construct that has a similar cycle: a struct defined as a function parameter: ``` int struct_in_proto(struct data_t{int a;int b;} *d); ``` In that case, however, we had decided to return simply with an error back then because that seemed to be a very rare construct. Differential Revision: https://reviews.llvm.org/D92209 -
Richard Smith authored
-
Richard Smith authored
This attribute permits a typedef to be associated with a class template specialization as a preferred way of naming that class template specialization. This permits us to specify that (for example) the preferred way to express 'std::basic_string<char>' is as 'std::string'. The attribute is applied to the various class templates in libc++ that have corresponding well-known typedef names. This is a re-commit. The previous commit was reverted because it exposed a pre-existing bug that has since been fixed / worked around; see PR48434. Differential Revision: https://reviews.llvm.org/D91311
-
Richard Smith authored
Ensure that we can deserialize a TypedefType even while in the middle of deserializing its TypedefDecl, by removing the need to look at the TypedefDecl while constructing the TypedefType. This fixes all the currently-known failures for PR48434, but it's not a complete fix, because we can still trigger deserialization cycles, which are not supposed to happen.
-
Fangrui Song authored
-
Duncan P. N. Exon Smith authored
Add a `FileEntryRef` overload of `SourceManager::translateFile`, and migrate `ParseDirective` in VerifyDiagnosticConsumer.cpp to use it and the corresponding overload of `createFileID`. No functionality change here. Differential Revision: https://reviews.llvm.org/D92699
-
Peter Collingbourne authored
Quarantines have always been broken when MTE is enabled because the quarantine batch allocator fails to reset tags that may have been left behind by a user allocation. This was only noticed when running the Scudo unit tests with Scudo as the system allocator because quarantines are turned off by default on Android and the test binary turns them on by defining __scudo_default_options, which affects the system allocator as well. Differential Revision: https://reviews.llvm.org/D92881
-
Peter Collingbourne authored
Separate the IRG part from the STZG part since we will need to use the latter on its own for some upcoming changes. Differential Revision: https://reviews.llvm.org/D92880
-
Florian Hahn authored
Add builtins required to implement vcmla and rotated variants from the ACLE Reviewed By: t.p.northover Differential Revision: https://reviews.llvm.org/D92929
-
Jon Chesterfield authored
-
Michael Munday authored
Regenerated using: ./llvm/utils/update_llc_test_checks.py -u llvm/test/CodeGen/RISCV/*.ll This has added comments to spill-related instructions and added @plt to some symbols. Differential Revision: https://reviews.llvm.org/D92841
-
Jianzhou Zhao authored
************* * The problem ************* See motivation examples in compiler-rt/test/dfsan/pair.cpp. The current DFSan always uses a 16bit shadow value for a variable with any type by combining all shadow values of all bytes of the variable. So it cannot distinguish two fields of a struct: each field's shadow value equals the combined shadow value of all fields. This introduces an overtaint issue. Consider a parsing function std::pair<char*, int> get_token(char* p); where p points to a buffer to parse, the returned pair includes the next token and the pointer to the position in the buffer after the token. If the token is tainted, then both the returned pointer and int ar tainted. If the parser keeps on using get_token for the rest parsing, all the following outputs are tainted because of the tainted pointer. The CL is the first change to address the issue. ************************** * The proposed improvement ************************** Eventually all fields and indices have their own shadow values in variables and memory. For example, variables with type {i1, i3}, [2 x i1], {[2 x i4], i8}, [2 x {i1, i1}] have shadow values with type {i16, i16}, [2 x i16], {[2 x i16], i16}, [2 x {i16, i16}] correspondingly; variables with primary type still have shadow values i16. *************************** * An potential implementation plan *************************** The idea is to adopt the change incrementially. 1) This CL Support field-level accuracy at variables/args/ret in TLS mode, load/store/alloca still use combined shadow values. After the alloca promotion and SSA construction phases (>=-O1), we assume alloca and memory operations are reduced. So if struct variables do not relate to memory, their tracking is accurate at field level. 2) Support field-level accuracy at alloca 3) Support field-level accuracy at load/store These two should make O0 and real memory access work. 4) Support vector if necessary. 5) Support Args mode if necessary. 6) Support passing more accurate shadow values via custom functions if necessary. *************** * About this CL. *************** The CL did the following 1) extended TLS arg/ret to work with aggregate types. This is similar to what MSan does. 2) implemented how to map between an original type/value/zero-const to its shadow type/value/zero-const. 3) extended (insert|extract)value to use field/index-level progagation. 4) for other instructions, propagation rules are combining inputs by or. The CL converts between aggragate and primary shadow values at the cases. 5) Custom function interfaces also need such a conversion because all existing custom functions use i16. It is unclear whether custome functions need more accurate shadow propagation yet. 6) Added test cases for aggregate type related cases. Reviewed-by: morehouse Differential Revision: https://reviews.llvm.org/D92261 -
Jon Chesterfield authored
-
Jon Chesterfield authored
-
Reid Kleckner authored
Swiftcall does it's own target-independent argument type classification, since it is not designed to be ABI compatible with anything local on the target that isn't LLVM-based. This means it never uses inalloca. However, we have duplicate logic for checking for inalloca parameters that runs before call argument setup. This logic needs to know ahead of time if inalloca will be used later, and we can't move the CGFunctionInfo calculation earlier. This change gets the calling convention from either the FunctionProtoType or ObjCMethodDecl, checks if it is swift, and if so skips the stackbase setup. Depends on D92883. Differential Revision: https://reviews.llvm.org/D92944
-