Detecting Redundant Operations with LLVM