This is important for e.g. the following case:
void sync() { __syncthreads(); } void foo() { do_something(); sync(); do_something_else(): }
Without this change, if the optimizer does not inline sync() (which it
won't because syncthreads is also marked as noduplicate, for now
anyway), it is free to perform optimizations on sync() that it would not
be able to perform on syncthreads(), because sync() is not marked as
convergent.
This chagne is conservative; the optimizer will remove these attrs where
it can, see r260318, r260319.
Sorry for the goose chase...
ConstructAttributeList seems better.