hasPoisonGeneratingMetadata is used by ValueTracking function
canCreateUndefOrPoison, if both poison generating metadata and
!noundef exists, then this instruction can not create undef or poison
actually.
But I am not sure if it is correct since !noundef can be dropped. If we
first do the transform based on !noundef, then we drop it in other
transforms, does it still correct?