Add load and store pairs to the dependence analysis of offset and width.
This fixes PR26358.
Patch by Sebastian Pop and Abderrazek Zaafrani.
Differential D17098
[AArch64] analyse dependences of ldp/stp mcrosier on Feb 10 2016, 2:09 PM. Authored by
Details Add load and store pairs to the dependence analysis of offset and width. Patch by Sebastian Pop and Abderrazek Zaafrani.
Diff Detail Event Timeline
Comment Actions Please add the non-temporal ldp/stp instructions. This should probably land after D17097. Comment Actions All of the provided tests pass on current top of trunk (i.e., without this patch). We'll need some tests that exercise the patch before it can be committed.
Comment Actions LGTM, assuming there are no correctness issues. Please only commit the st2 test as the other tests are either not related to the patch our are redundant with st2. Also, the test can be included in arm64-stp-aa.ll, rather than creating a new file.
Comment Actions I wanted to push this patch along, so I ran some correctness tests. It turns out the paired instructions aren't being scaled properly (see inline comments). After addressing those issues I'm now seeing a few regressions due to fewer stp instructions. I'm going to block this patch while I investigate.
Comment Actions The corrected version looks very similar to what I remember having implemented first, and then we found out that the scale did not match. Comment Actions Sounds good. Let me know if I've missed something. The matching scale and offsets caused a large number of correctness failures in the test-suite as well as SPEC200X in my testing. Comment Actions Chad, your changes to the patch are correct: the ARM documentation states that in the case of a pair of 32bit regs the immediate byte offset is a multiple of 4. Comment Actions Ping. Comment Actions Please rebase it. LGTM.
Comment Actions Approved per Jun and Sebastian. Jun verified the regression I was seeing no longer exists. I'll go ahead and rebase the patch and commit with Jun's suggestion to use getNumExplicitOperands(). Thanks, Jun/Sebastian. |
Please use getNumExplicitOperands().