Compiler-Directed Error Resilience For Reliable Computing