- Mar 30, 2021
-
-
Kadir Cetinkaya authored
Clangd drops symbols from static index whenever the dynamic index is authoritative for the file. This results in regressions when static and dynamic index contains different set of information, e.g. IncludeHeaders. After this patch, we'll choose to merge symbols from static index with dynamic one rather than just dropping. This implies correctness problems when the definition/documentation of the symbol is deleted. But seems like it is worth having in more cases. We still drop symbols if dynamic index owns the file and didn't report the symbol, which means symbol is deleted. Differential Revision: https://reviews.llvm.org/D98538
-
Raphael Isemann authored
This is apparently allowed in Objective-C so we should test this in LLDB. Reviewed By: teemperor Differential Revision: https://reviews.llvm.org/D99513
-
Raphael Isemann authored
[ObjC][CodeGen] Fix missing debug info in situations where an instance and class property have the same identifier Since the introduction of class properties in Objective-C it is possible to declare a class and an instance property with the same identifier in an interface/protocol. Right now Clang just generates debug information for whatever property comes first in the source file. The second property is ignored as it's filtered out by the set of already emitted properties (which is just using the identifier of the property to check for equivalence). I don't think generating debug info in this case was never supported as the identifier filter is in place since 7123bca7 (which precedes the introduction of class properties). This patch expands the filter to take in account identifier + whether the property is class/instance. This ensures that both properties are emitted in this special situation. Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D99512
-
Nuno Lopes authored
-
Sander de Smalen authored
We previously made a change to getUserCost to return a Invalid cost when one of the TTI costs returned '-1' (meaning 'unknown' or 'infinitely expensive'). It makes no sense to say that: shufflevector <2 x i8> %x, <2 x i8> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 3> has an invalid cost. Perhaps the cost is not known, but the IR is valid and can be code-generated. Invalid should only be used for IR that cannot possibly be code-generated and where a cost is nonsensical. With more passes now asserting that the cost must be valid, it is possible that those assertions will fail for perfectly valid IR. An incomplete cost-model probably shouldn't be a reason for the compiler to break. It's better to consider these costs as 'very expensive' and ignore them for other reasons. At some point, we should consider replacing -1 with some other mechanism. Reviewed By: paulwalker-arm, dmgreen Differential Revision: https://reviews.llvm.org/D99502
-
Bing1 Yu authored
Reviewed By: pengfei Differential Revision: https://reviews.llvm.org/D99244
-
Pavel Labath authored
This reverts commit 1b96e133 due to failures on windows.
-
Tim Renouf authored
Change-Id: I65f3edcfe5063551cad5aab0da1374c3a6ccd3a2
-
Stefan Gränitz authored
This option tells LLJIT to disable platform support explicitly: JITDylibs aren't scanned for special init/deinit symbols and no runtime API interposes are injected. It's useful in two cases: for platforms that don't have such requirements and platforms for which we have no explicit support yet and that don't work well with the generic IR platform. Reviewed By: lhames Differential Revision: https://reviews.llvm.org/D99416
-
Vitaly Buka authored
-
Markus Böck authored
Encountered a crash while running a debug build, where this code path would be taken due to a mismatch in profile coverage data versions. Without consuming the error, an assert would be triggered inside the destructor of Error. Differential Revision: https://reviews.llvm.org/D99457
-
Pavel Labath authored
This test is not useful as the functions it's testing are just returning a constant. It also fails in unoptimized builds as it's comparing character strings by address.
-
Pavel Labath authored
This is the test I mentioned in the previous commit (1b96e133), but forgot to add.
-
Pavel Labath authored
Remove the "depth" variable, as the same information can be obtained through die_index_stack.size(). Also add a test case for a one tricky case I noticed -- a unit containing only a null unit die.
-
Han Zhu authored
For a simple loop like: ``` struct S { int x; int y; char b; }; unsigned foo(S* __restrict__ a, S* b, int n) { for (int i = 0; i < n; i++) a[i] = b[i]; return sizeof(a[0]); } ``` We could eliminate the loop and convert it to a large memcpy of 12*n bytes. Currently this is not handled. Output of `opt -loop-idiom -S < memcpy_before.ll` ``` %struct.S = type { i32, i32, i8 } define dso_local i32 @_Z3fooP1SS0_i(%struct.S* noalias nocapture %a, %struct.S* nocapture readonly %b, i32 %n) local_unnamed_addr { entry: %cmp7 = icmp sgt i32 %n, 0 br i1 %cmp7, label %for.body.preheader, label %for.cond.cleanup for.body.preheader: ; preds = %entry br label %for.body for.cond.cleanup.loopexit: ; preds = %for.body br label %for.cond.cleanup for.cond.cleanup: ; preds = %for.cond.cleanup.loopexit, %entry ret i32 12 for.body: ; preds = %for.body, %for.body.preheader %i.08 = phi i32 [ %inc, %for.body ], [ 0, %for.body.preheader ] %idxprom = zext i32 %i.08 to i64 %arrayidx = getelementptr inbounds %struct.S, %struct.S* %b, i64 %idxprom %arrayidx2 = getelementptr inbounds %struct.S, %struct.S* %a, i64 %idxprom %0 = bitcast %struct.S* %arrayidx2 to i8* %1 = bitcast %struct.S* %arrayidx to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 4 dereferenceable(12) %0, i8* nonnull align 4 dereferenceable(12) %1, i64 12, i1 false) %inc = add nuw nsw i32 %i.08, 1 %cmp = icmp slt i32 %inc, %n br i1 %cmp, label %for.body, label %for.cond.cleanup.loopexit } ; Function Attrs: argmemonly nofree nosync nounwind willreturn declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #0 attributes #0 = { argmemonly nofree nosync nounwind willreturn } ``` The loop idiom pass currently only handles load and store instructions. Since struct S is too big to fit in a register, the loop body contains a memcpy intrinsic. With this change, re-run `opt -loop-idiom -S < memcpy_before.ll`. The loop memcpy is promoted to loop preheader. For this trivial case, the loop is dead and will be removed by another pass. ``` %struct.S = type { i32, i32, i8 } define dso_local i32 @_Z3fooP1SS0_i(%struct.S* noalias nocapture %a, %struct.S* nocapture readonly %b, i32 %n) local_unnamed_addr { entry: %a1 = bitcast %struct.S* %a to i8* %b2 = bitcast %struct.S* %b to i8* %cmp7 = icmp sgt i32 %n, 0 br i1 %cmp7, label %for.body.preheader, label %for.cond.cleanup for.body.preheader: ; preds = %entry %0 = zext i32 %n to i64 %1 = mul nuw nsw i64 %0, 12 call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %a1, i8* align 4 %b2, i64 %1, i1 false) br label %for.body for.cond.cleanup.loopexit: ; preds = %for.body br label %for.cond.cleanup for.cond.cleanup: ; preds = %for.cond.cleanup.loopexit, %entry ret i32 12 for.body: ; preds = %for.body, %for.body.preheader %i.08 = phi i32 [ %inc, %for.body ], [ 0, %for.body.preheader ] %idxprom = zext i32 %i.08 to i64 %arrayidx = getelementptr inbounds %struct.S, %struct.S* %b, i64 %idxprom %arrayidx2 = getelementptr inbounds %struct.S, %struct.S* %a, i64 %idxprom %2 = bitcast %struct.S* %arrayidx2 to i8* %3 = bitcast %struct.S* %arrayidx to i8* %inc = add nuw nsw i32 %i.08, 1 %cmp = icmp slt i32 %inc, %n br i1 %cmp, label %for.body, label %for.cond.cleanup.loopexit } ; Function Attrs: argmemonly nofree nosync nounwind willreturn declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #0 attributes #0 = { argmemonly nofree nosync nounwind willreturn } ``` Reviewed By: zino Differential Revision: https://reviews.llvm.org/D97667 -
Fangrui Song authored
-
Han Zhu authored
Summary: Test Plan: Reviewers: Subscribers: Tasks: Tags: Blame Revision: Differential Revision: https://phabricator.intern.facebook.com/D26380397
-
Johannes Doerfert authored
The `noinline` for non-SPMD parallel functions is probably not necessary but as long as we use it we should put it on the outermost parallel function, which is the wrapper, not the actual outlined function. Resolves PR49752 Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D99506
-
Max Kazantsev authored
-
Fangrui Song authored
The previous code may underestimate the static TLS surplus part, which may cause false positives to LeakSanitizer if a dynamically loaded module uses the surplus and there is an allocation only referenced by a thread's TLS.
-
Vitaly Buka authored
-
Vitaly Buka authored
-
Alok Kumar Sharma authored
This is needed for Fortran assumed shape arrays whose dimensions are defined as, - 'count' is taken from array descriptor passed as parameter by caller, access from descriptor is defined by type DIExpression. - 'lowerBound' is defined by callee. The current alternate way represents using upperBound in place of count, where upperBound is calculated in callee in a temp variable using lowerBound and count Representation with count (DIExpression) is not only clearer as compared to upperBound (DIVariable) but it has another advantage that variable count is accessed by being parameter has better chance of survival at higher optimization level than upperBound being local variable. Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D99335 -
Rahman Lavaee authored
Empty functions (functions with no real code) are irrelevant for propeller optimizations and their addresses sometimes conflict with other functions which obfuscates the analysis. This simple change skips the BB address map emission for such functions. Reviewed By: tmsriram Differential Revision: https://reviews.llvm.org/D99395
-
Stella Stamenova authored
This breaks the windows bots because the dependency does not exist on Windows. Per the cmake file: if(CMAKE_HOST_UNIX) add_subdirectory(LLJITWithRemoteDebugging) endif() This reverts commit bd56e91f.
-
Jun Ma authored
-
Jun Ma authored
Differential Revision: https://reviews.llvm.org/D99324
-
Jun Ma authored
Differential Revision: https://reviews.llvm.org/D99412
-
Louis Dionne authored
Download older roots from Dropbox instead of Green Dragon, which is too unreliable. Also XFAIL tests that were broken for back-deployment configurations by D98097. Differential Revision: https://reviews.llvm.org/D99359
-
Hsiangkai Wang authored
Add asm constraint 'vr' for vector registers. Add asm constraint 'vm' for vector mask registers. Differential Revision: https://reviews.llvm.org/D98616
-
Evandro Menezes authored
Differential Revision: https://reviews.llvm.org/D99557
-
Adrian Prantl authored
This commit adds debugging support for set types defined in languages such as Pascal and Modula-2. Patch by Peter McKinna! Differential Revision: https://reviews.llvm.org/D76115
-
Dave Lee authored
-
David Blaikie authored
-
Thomas Lively authored
When I updated the SIMD opcodes in f5764a86, I accidentally missed updating i8x16.popcnt. This patch fixes the omission. Differential Revision: https://reviews.llvm.org/D99536
-
Jonas Devlieghere authored
-
Huihui Zhang authored
Use SmallVector instead of SmallSet to track the context profiles mapped. Doing this can help avoid non-determinism caused by iterating over unordered containers. This bug was found with reverse iteration turning on, --extra-llvm-cmake-variables="-DLLVM_REVERSE_ITERATION=ON". Failing LLVM test profile-context-tracker-debug.ll . Reviewed By: MaskRay, wenlei Differential Revision: https://reviews.llvm.org/D99547
-