Checking for write access in/directly


I'm currently working on a ModulePass that modifies GlobalVariables. I
have searched the documentation over and over again but I could not find
a solution to my problem.

What would be the best way to check whether my GlobalVariable is
*really* constant? By that I mean I want to know if there is write
access (directly or via pointer); I need to know that the value of my
GlobalVariable will never change throughout the program.
I would also like to know if a variable my GlobalVariable was assigned
to is used in a memory-accessing statement such as m/c/realloc, memcpy, etc.

My "workaround" so far is that I recursively check all users and uses
that might write (StoreInsts, ...), I also follow assignments (GEP,
LoadInsts, ...) and into function calls (by parsing the argument list).
While this works it is excrutiatingly slow and I can't imagine there
wouldn't be an easier way to achieve the same goal.

Am I missing something?