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.
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.