Trident is a tool to analytically model the Silent-Data Corruption (SDC) rate of a program, to replace expensive fault injection experiments. Please refer to our papers at DSN 2018 for more details (links in the README)
I'm sorry to say that I don't understand the fourth step in the preparation of Trident.What would I do for choosing the LLVM IR instructions?And when I run the ./test,the log file "fi_breakdown.txt" didnot update the probabilities of SDC,Benign,Crash and breakdown.It just equals to the log file "fi_breakdown.txt" generated in ./inst_count.
I'm sorry to say that I don't understand the fourth step in the preparation of Trident.What would I do for choosing the LLVM IR instructions?And when I run the ./test,the log file "fi_breakdown.txt" didnot update the probabilities of SDC,Benign,Crash and breakdown.It just equals to the log file "fi_breakdown.txt" generated in ./inst_count.
I found this code has the ability to make instruction duplication and duplication check.
But when I tried this, I found there may be some check functions used in the DuplicationCheck pass are not defined.
Is it defined in the file "sync_check.ll"? And where should I find it ?
Besides, how can I generate the "select_set_file" needed by the DuplicationCheck pass?
Thanks.
I happen to be doing the same research,and found this awesome job.
This code runs very well, but I still met some errors about some test cases, for example, the 'susan' in Mibench.
Now I just make some null check, and dropped the error data, but I don't know if it will affect the analysis result.
The errors I met is as follows:
In file $Trident-master/llvm-2.9/lib/Transforms/CmpProfileValue/Hello.cpp,line 123 and 124: // // Convert float to double FPExtInst* convertInst1 = new FPExtInst(cmpInst->getOperand(0), Type::getDoubleTy(appModule->getContext()), "convt1", instPos); FPExtInst* convertInst2 = new FPExtInst(cmpInst->getOperand(1), Type::getDoubleTy(appModule->getContext()), "convt2", instPos);
fails the assertion " assert(castIsValid(getOpcode(), S, Ty) && "Illegal FPExt");"at some time.
In file $Trident-master/llvm-2.9/lib/Transforms/StaticInstModeling/Hello.cpp, line 143: printf("%ld call %s: %.6f, %.6f, %.6f\n", curInstIndex, dyn_cast<CallInst>(curInst)->getCalledFunction()->getName(), curNode->accumPR, curNode->accumMR, curNode->accumCR);
will report error some times.