!unconditionally_dereferenceable is similar to !dereferenceable,
but is intended for frontends for memory-safe languages where
loads can be freely moved around without impacting their
dereferenceability.
!dereferenceable used to have the same semantics as the newly
introduced !unconditionally_dereferenceable before LLVM 3.8;
it was made more conservative in r252604.
Notes:
- The dereferenceable argument attribute is close to !unconditionally_dereferenceable in semantics than !dereferenceable, should we update LangRef?
- There's no !unconditionally_dereferenceable_or_null; I'm not sure if there should be. It's not useful for my frontend and I'm not sure if it's useful for LICM either. Also, this combinatory explosion worries me.