W[1] is computed once. But it will contain the sum of the gradients for each of the place where it is used.
If you have W that contains 3 values.
O contains [W[1], W[1], w[1], W[2], W[3]].
And your loss is sum(O).
Then when you call backward on this loss, the gradient of O wrt this loss is [1, 1, 1, 1, 1]. And the gradient of W wrt this loss is [3, 1, 1].
So yes the gradient of W[1] is computed once.