According to the manual, only ds_write to gds memory increments the expcnt counter.
The counter is used to prevent changing the output VGPR before the data is written.
It's needed because export instructions (including ds_write to gds) are executed in 2 phases,
the first phase requests the required internal buses and the second phase writes the data
from the VGPR.
This is not true of lds memory, although lgkm_cnt is used for lds writes I think its only to make
sure the lds has received that data.
I don't use expcnt for lds operations in my compiler and have not seen any problems with
complex kernels using lots of lds. But now your question makes me wonder if I'm using it
correctly for gds?