Propagate from assignment back to global/alloca.

FPInferredTargetsAnalysis tracks assignments of functions but these assignments
may get lost if made to struct fields and the struct is reloaded later (via a
LoadInst). This will typically happen at lower optimisation levels (i.e. -O0).
To avoid this, we propagate the function being assigned back to the alloca or
global from which the fieid is loaded. This way if it the local/global is
reloaded then the assigned function is picked up.