Teach ExecutionDepsFix to recognize instructions that are already
register-dependency breaking. This is done in preparation of being
more conservative in clearance assumptions at function entry/after
function calls. In this situation, this commit gives us two benefits:
- It reduces the number of inserted dependency breaks, by reusing those that already exist (at the moment we assume all registers have significant clerance at function entry, so basically any unused register can be used for undef reads - this will no longer be the case after the above mentioned change)
- It provides a simple way to test the clearance calculation code. Right now, those tests assume that all registers have large clearance at function entry. Further, while there is a way to forcably clobber register clearance (e.g. by using inline assembly), without this change, there is no easy way to clear register clearance again. This commit provides a way to do so (since LLVM materializes constant 0s in registers using dependency breaking instructions). E.g. the LLVM IR fcmp ult double %x, 0.0, will force such an instruction (assuming that %x is unknown).
According to the guide, xorps and xorpd cannot break dependencies on pentium4, so this information should be added too.