On January 30, 2015 9:18:57 PM CET, Richard Henderson <r...@redhat.com> wrote: >On 01/30/2015 12:12 PM, Mike Stump wrote: >> On Jan 30, 2015, at 9:52 AM, Jakub Jelinek <ja...@redhat.com> wrote: >>> On Fri, Jan 30, 2015 at 09:45:26AM -0800, Mike Stump wrote: >>>> I have a port that has: >>>> >>>> (insn 47 46 48 18 (parallel [ >>>> (unspec_volatile:DI [ >>>> (const_int 128 [0x80]) >>>> (const_int 6 [0x6]) >>>> ] UNSPECV_SPECIAL_OP) >>>> (set (mem/v:BLK (scratch:DI) [0 A8]) >>>> (unspec:BLK [ >>>> (mem/v:BLK (scratch:DI) [0 A8]) >>>> ] UNSPEC_MEMORY_BARRIER)) >>> >>> Why don't you just (clobber (mem/v:BLK (scratch:DI))) instead >>> of the second set in the parallel? The instruction is already >>> UNSPEC_VOLATILE, and to make the barrier effect clear a clobber >should be >>> sufficient. >> >> So, f087d65d84655bc2d5fdd4bcc6bf0fe337a39893 seems to have introduced >the current way that all the ports do this currently. So, I’d leave >this to Richard to answer. >> >> If (clobber (mem/v:BLK (scratch:DI))) works, certainly that seems >simpler than what people do now, but, then I’m left wondering, why >didn’t we do that from that start? >> > >Jakub, the current formation includes both a use and a set of all >memory. Your >clobber form would not imply a use.
What do you need the use for? Prevent all DSE before the barrier for some weird reason? Richard. > >r~