In addition to target-dependent attributes, we can also preserve a
white-listed subset of target independent function attributes. The white-list
excludes problematic attributes, most prominently:
- attributes related to memory accesses, as alloca instructions could be moved in/out of the extracted block
- control-flow dependent attributes, like no_return or thunk, as the relerelevant instructions might or might not get extracted.
Thanks @efriedma and @aemerson for providing a set of attributes that cannot be
propagated.