FWIW, I think this shows yet again that we need to model the different “side-effect kinds” explicitly. Blanked read/write only/none doesn’t work. The three extra categories (argmem, inaccesible, argmem+inaccesible) are also insufficient. What we need is a side-effect
attribute:
side_effect(read:TLS,argmem; write: globals, cross-thread-registers; synchronizing("warp"))
And then we map what we have back to this rather than trying to shoehorn something into readnone/only that is not readnone/only. (Not to mention the other hacks and bugs we have because we don’t properly model cross-thread-register accesses, synchronization, …).