- Jun 15, 2020
-
-
Vitaly Buka authored
Move core which removes markers out of StackColoring.
-
Vitaly Buka authored
-
Vitaly Buka authored
-
Vitaly Buka authored
-
Vitaly Buka authored
-
Vitaly Buka authored
-
Vitaly Buka authored
-
Vitaly Buka authored
This allows to reuse the code in other components.
-
Vitaly Buka authored
Prepare to move ClColoring from SafeStackCode to SafeStackLayout. This will allow to reuse the code in other components.
-
Max Kazantsev authored
-
Chen Zheng authored
This patch tries to reassociate two patterns related to FMA to expose more ILP on PowerPC. // Pattern 1: // A = FADD X, Y (Leaf) // B = FMA A, M21, M22 (Prev) // C = FMA B, M31, M32 (Root) // --> // A = FMA X, M21, M22 // B = FMA Y, M31, M32 // C = FADD A, B // Pattern 2: // A = FMA X, M11, M12 (Leaf) // B = FMA A, M21, M22 (Prev) // C = FMA B, M31, M32 (Root) // --> // A = FMUL M11, M12 // B = FMA X, M21, M22 // D = FMA A, M31, M32 // C = FADD B, D Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D80175
-
Wenlei He authored
Summary: When an SCC got split due to inlining, we have two mechanisms for reprocessing the updated SCC, first is UR.UpdatedC that repeatedly rerun the new, current SCC; second is a worklist for all newly split SCCs. We can avoid rerun of the same SCC when the SCC is set to be processed by both mechanisms *back to back*. In pathological cases, such redundant rerun could cause exponential size growth due to inlining along cycles, even when there's no SCC mutation and hence convergence is not a problem. Note that it's ok to have SCC updated and rerun immediately, and also in the work list if we have actually moved an SCC to be topologically "below" the current one due to merging. In that case, we will need to revisit the current SCC after those moved SCCs. For that reason, the redundant avoidance here only targets back to back rerun of the same SCC - the case described by the now removed FIXME comment. Reviewers: chandlerc, wmi Subscribers: llvm-commits, hoy Tags: #llvm Differential Revision: https://reviews.llvm.org/D80589
-
Kang Zhang authored
Summary: We have defined MTSPR/MFSPR and MTSPR8/MFSPR8, but we only defined mtspr/mfspr InstAlias for some MTSPR/MFSPR. This patch is to add the InstAlias definitions for MTSPR8/MFSPR8, and add the some new mtspr/mfspr InstAlias we may use. Reviewed By: steven.zhang Differential Revision: https://reviews.llvm.org/D77531
-
Jez Ng authored
Summary: Fixes the build break caused by D81802.
-
Chen Zheng authored
Reviewed By: steven.zhang Differential Revision: https://reviews.llvm.org/D81006
-
Jez Ng authored
Summary: We should be reading / writing our addends / relocated addresses based on r_length, and not just based on the type of the relocation. But since only some r_length values are valid for a given reloc type, I've also added some validation. ld64 has code to allow for r_length = 0 in X86_64_RELOC_BRANCH relocs, but I'm not sure how to create such a relocation... Reviewed By: smeenai Differential Revision: https://reviews.llvm.org/D80854
-
Jez Ng authored
Summary: After {D81326} landed, some tests started failing if they did not have `-arch` specified. I think one of the reasons happened was due to the fact that we were taking a reference to a temporary value that was freed too early. Fixing that got the error to go away on my local Linux machine. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D81802 -
Simon Pilgrim authored
Reduce XMM->GPR traffic by performing bitops on the vectors, and using a single MOVMSK call. This requires us to use vectors of the same size and element width, but we can mix fp/int type equivalents with suitable bitcasting.
-
Nikita Popov authored
This was part of an older attributes implementation.
-
Nikita Popov authored
Currently, there doesn't seem to be any way to look up a Value* in a map/set indexed by AssertingVH/PoisoningVH, without creating a value handle -- which is fairly expensive, because it involves adding the value handle to the use list and immediately removing it again. Using find_as(Value *) does not work (and is in fact worse than just using find(Value *)), because it will end up creating multiple value handles during the lookup itself. For AssertingVH, address this by simply using DenseMapInfo<T *> instead of manually implementing something. The AssertingVH<T> will now get coerced to T*, rather than the other way around. For PoisoningVH, add extra overloads of getHashValue() and isEqual() that accept a T* argument. This allows using find_as(Value *) to perform efficient lookups in assertion-enabled builds. Differential Revision: https://reviews.llvm.org/D81793
-
Florian Hahn authored
Alternative approach to D80570. canCheckPtrAtRT already contains checks the figure out for which alias sets runtime checks are needed. But it currently sets CanDoRT to false for alias sets for which we cannot do RT checks but also do not need any. If we know that we do not need RT checks based on the number of reads/writes in the alias set, we can skip processing the AS. This patch also adds an assertion to ensure that DepCands does not contain more than one write from the alias set. Reviewers: Ayal, anemet, hfinkel, dmgreen Reviewed By: dmgreen Differential Revision: https://reviews.llvm.org/D80622
-
Whitney Tsang authored
is not necessary one of them. Summary: Currently LoopUnrollPass already allow loops with multiple exiting blocks, but it is only allowed when the loop latch is one of the exiting blocks. When the loop latch is not an exiting block, then only single exiting block is supported. When possible, the single loop latch or the single exiting block terminator is optimized to an unconditional branch in the unrolled loop. This patch allows loops with multiple exiting blocks even if the loop latch is not one of them. However, the optimization of exiting block terminator to unconditional branch is not done when there exists more than one exiting block. Reviewer: dmgreen, Meinersbur, etiotto, fhahn, efriedma, bmahjour Reviewed By: efriedma Subscribers: hiraditya, zzheng, llvm-commits Tag: LLVM Differential Revision: https://reviews.llvm.org/D81053
-
Matt Arsenault authored
Add some encoding checks and add a few new cases.
-
Matt Arsenault authored
Fixes bug 46285
-
Matt Arsenault authored
-
Matt Arsenault authored
-
Matt Arsenault authored
I tried to use an IR inline asm test, but that doesn't work since the inline asm handling asserts without an MVT to use.
-
Simon Pilgrim authored
This would help reduce XMM->GPR traffic for some reduction cases.
-
- Jun 14, 2020
-
-
Qiu Chaofan authored
This patch adds handling of constrained FP intrinsics about round, truncate and extend for PowerPC target, with necessary tests. Reviewed By: steven.zhang Differential Revision: https://reviews.llvm.org/D64193
-
Qiu Chaofan authored
On PowerPC, we have vnmsubfp Altivec instruction for fnmsub operation on v4f32 type. Default pattern for this instruction never works since we don't have legal fneg for v4f32 when VSX disabled. Reviewed By: steven.zhang Differential Revision: https://reviews.llvm.org/D80617
-
Qiu Chaofan authored
Current implementation of division estimation isn't correct for some cases like 1.0/0.0 (result is nan, not expected inf). And this change exposes a potential infinite loop: we use isConstOrConstSplatFP in combineRepeatedFPDivisors to look up if the divisor is some constant. But it doesn't work after legalized on some platforms. This patch restricts the method to act before LegalDAG. Reviewed By: spatel Differential Revision: https://reviews.llvm.org/D80542
-
Sanjay Patel authored
As noted in D80236 - the early-cse pass was included here before: D75145 / rG71a31688 But it got moved outside of the "extra" option there, then it got dropped while adjusting -vector-combine: rG6438ea45 rG57bb4787 So this is restoring the behavior and adding a test to prevent accidental changes again. I don't see an equivalent option for the new pass manager.
-
Joachim Protze authored
This patch allows to specify a prefix (default:empty) to be included into print-out written by callback.h. Also adding a cmake target to find the header file from other tests. Reviewed by: jdoerfert Differential Revision: https://reviews.llvm.org/D76008
-
Joachim Protze authored
Reviewed by: AndreyChurbanov Differential Revision: https://reviews.llvm.org/D81497
-
Nikita Popov authored
This class uses a mix of different indentation levels, normalize it.
-
Nikita Popov authored
When LVI is performing assume intersections, it also checks for llvm.experimental.guard intrinsics. To avoid unnecessary block scans, it first checks whether this intrinsic is declared in the module at all. I've noticed that we end up spending quite a lot of time looking up that function again and again... Avoid this by only looking it up once when LazyValueInfo is constructed. This of course assumes that we don't introduce new guard intrinsics (which is the case for all existing uses of LVI -- and even if it weren't, it would not introduce miscompiles, just potentially lose optimization power.) Differential Revision: https://reviews.llvm.org/D81796
-
David Green authored
This adds additional cast cpst tests useful for MVE, notably around half types.
-
Sanjay Patel authored
(a[0] + a[1] + a[2] + a[3]) - (b[0] + b[1] + b[2] +b[3]) --> (a[0] - b[0]) + (a[1] - b[1]) + (a[2] - b[2]) + (a[3] - b[3]) This should be the last step in solving PR43953: https://bugs.llvm.org/show_bug.cgi?id=43953 We started emitting reduction intrinsics with: D80867/ rGe50059f6 So it's a relatively easy pattern match now to re-order those ops. Also, I have not seen any complaints for the switch to intrinsics yet, so I'll propose to remove the "experimental" tag from the intrinsics soon. Differential Revision: https://reviews.llvm.org/D81491
-
Sanjay Patel authored
This is a hacky, but low-risk fix to avoid the infinite loop in PR46271: https://bugs.llvm.org/show_bug.cgi?id=46271 As discussed there, the problem is that FoldOpIntoSelect() can get into a conflict with a transform that wants to pull a 'not' op through min/max via SimplifyDemandedVectorElts(). We need to relax our matching of min/max to include undefined elements in vector constants to avoid that. Alternatively, we could improve or cripple the demanded elements analysis, but that could create even more problems. The likely better, safer alternative will be to create min/max intrinsics, so we can remove all of the hacks related to min/max matching in instcombine. Differential Revision: https://reviews.llvm.org/D81698
-
Simon Pilgrim authored
Even without PTEST, we can still efficiently perform an OR reduction as PMOVMSKB(PCMPEQB(X,0)) == 0, avoiding xmm->gpr extractions.
-