[llvm-commits] [llvm] r106693 - in /llvm/trunk: lib/Target/ARM/ARMBaseInstrInfo.cpp lib/Target/ARM/ARMBaseInstrInfo.h test/CodeGen/ARM/lsr-on-unrolled-loops.ll
Jakob Stoklund Olesen
stoklund at 2pi.dk
Thu Jun 24 11:04:23 PDT 2010
On Jun 23, 2010, at 4:46 PM, Dale Johannesen wrote:
>
> On Jun 23, 2010, at 4:00 PMPDT, Bill Wendling wrote:
>
>> Author: void
>> Date: Wed Jun 23 18:00:16 2010
>> New Revision: 106693
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=106693&view=rev
>> Log:
>> We are missing opportunites to use ldm. Take code like this:
>>
>> void t(int *cp0, int *cp1, int *dp, int fmd) {
>> int c0, c1, d0, d1, d2, d3;
>> c0 = (*cp0++ & 0xffff) | ((*cp1++ << 16) & 0xffff0000);
>> c1 = (*cp0++ & 0xffff) | ((*cp1++ << 16) & 0xffff0000);
>> /* ... */
>> }
>
> You can't combine volatile loads, is there a check for this?
Yes, the ARMLoadStoreOptimizer checks for that.
Unaligned LDM/STM is also not allowed.
> I'm also wondering if interference could be a problem, where one
> pointer points to the other one. I think it's OK as long as there are
> no stores, as in the example.
Only loads off the same DAG chain are scheduled together. So if the DAG chains are correct we should be fine.
More information about the llvm-commits
mailing list