rjmccall wrote:

> @rjmccall thanks for your comments. Here's a reimplementation using a single 
> loop -- the downside is that we may end up repeating the initial grouping 
> scan, if we search more than 1 Access Unit ahead and fail to find a 'good' 
> access unit. This update changes the algorithm slightly, as I realized that 
> `struct A { short a: 16; char b:8; int c;};` and `struct B { char b: 8; short 
> a:16; int c;};` should have the same (32-bit) access unit. Originally only 
> `A` got that.

Thanks.  Sorry about the delay, I'll try to take a look in the next day.

> 1. I noticed that several `CGRecordLowering` member fns could either be 
> `const` or `static` -- would you like that as a separate NFC PR?

Yes, please.

> 2. I have corrected the error about merging across zero-sized members.
> 3. It may not be obvious from GH, but this PR breaks down to 3 (or 4) 
> separate commits:
>    a) A set of test cases, marked up for the current scheme
>    b) A new Target hook indicating whether unaligned accesses are cheap
>    c) [optional] the CGRecordLowering change just mentioned
>    d) the algorithm change, which updates those tests and makes it easier to 
> see how the behaviour changes.
>    Do you want that commit structure maintained?

That sounds like good commit structure.

On the target hook, it's a shame we can't easily get this information from 
LLVM.  I believe it's already there — `TargetLowering` has an 
`allowsMisalignedMemoryAccesses` method that includes some approximation of how 
fast a particular access would be.  In practice, it seems to be quite complex 
and often specific to the type and subtarget.  Maybe it'd be worth starting a 
conversation with LLVM folks to see if this could reasonably be lifted 
somewhere we could use it?

https://github.com/llvm/llvm-project/pull/65742
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to