[llvm] r213551 - R600/SI: Use scratch memory for large private arrays

Tom Stellard tom at stellard.net
Tue Aug 5 07:50:25 PDT 2014


On Fri, Aug 01, 2014 at 10:00:30AM -0700, Matt Arsenault wrote:
> 
> On Aug 1, 2014, at 9:57 AM, Matt Arsenault <arsenm2 at gmail.com> wrote:
> 
> > 
> > On Aug 1, 2014, at 7:41 AM, Tom Stellard <tom at stellard.net> wrote:
> > 
> >> On Fri, Jul 25, 2014 at 10:07:06AM -0700, Matt Arsenault wrote:
> >>> 
> >>> On Jul 21, 2014, at 8:45 AM, Tom Stellard <thomas.stellard at amd.com> wrote:
> >>> 
> >>>> -; SI-PROMOTE: V_MOVRELS_B32_e32
> >>>> +; SI-PROMOTE: BUFFER_STORE_SHORT v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, s{{[0-9]+}}
> >>>> +; SI-PROMOTE: BUFFER_STORE_SHORT v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, s{{[0-9]+}}
> >>>> +; SI_PROMOTE: BUFFER_LOAD_SSHORT v{{[0-9]+}}, s[{{[0-9]+:[0-9]+}}] + v{{[0-9]+}}, s{{[0-9]+}}
> >>>> define void @short_array(i32 addrspace(1)* %out, i32 %index) {
> >>>> entry:
> >>>> %0 = alloca [2 x i16]
> >>>> @@ -139,8 +137,8 @@ entry:
> >>>> 
> >>>> ; R600: MOVA_INT
> >>> 
> >>> This adds the broken check line SI_PROMOTE
> >>> 
> >>> I’m also now more confused about what situations the register loads are used vs. LDS vs. scratch memory. This test seems like it’s storing to a scratch buffer, but loading from a register
> >> 
> >> This is a bug, it should be fixed in the attached patch.
> >> 
> >> -Tom
> >> 
> >>> _______________________________________________
> >>> llvm-commits mailing list
> >>> llvm-commits at cs.uiuc.edu
> >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >> 
> >> <0001-R600-Move-code-for-generating-REGISTER_LOAD-into-R60.patch>
> > 
> > Would it be better to just add a check for SI around this for now? It should go back to using register loads sometimes eventually
>  
> I think this would also make it slightly less painful to rebase some of my outstanding patches

I've done this in r214865.

-Tom




More information about the llvm-commits mailing list