Conversion of LLVM intrinsic functions into functions from the standard C library.
More...
|
| LLVMIntrinsicConverter (ShPtr< Module > module) |
| Constructs a new converter. More...
|
|
void | performConversion () |
| Performs the conversion of LLVM intrinsic functions into functions from the standard C library. More...
|
|
bool | isIntrinsicFunc (ShPtr< Function > func) const |
| Returns true if the given function is an LLVM intrinsic function, false otherwise. More...
|
|
void | convertIntrinsicFuncName (ShPtr< Function > func) |
| If supported, converts the given LLVM intrinsic function's name into an appropriate name of a standard-C-library function. More...
|
|
void | renameIntrinsicFunc (ShPtr< Function > func, const std::string &newName) |
| Renames the given LLVM intrinsic function. More...
|
|
void | renameFloatIntrinsicFunc (ShPtr< Function > func, const std::string &baseName) |
| Renames the given LLVM floating-point intrinsic function. More...
|
|
void | trimLastNArgsAndParams (ShPtr< CallExpr > expr, ShPtr< Function > func, unsigned m, unsigned n) |
| Removes the last n arguments from expr and the last n parameters from the function declaration func. More...
|
|
|
virtual void | visit (ShPtr< CallExpr > expr) override |
|
virtual void | visit (ShPtr< GlobalVarDef > varDef) override |
|
virtual void | visit (ShPtr< Function > func) override |
|
virtual void | visit (ShPtr< AssignStmt > stmt) override |
|
virtual void | visit (ShPtr< BreakStmt > stmt) override |
|
virtual void | visit (ShPtr< CallStmt > stmt) override |
|
virtual void | visit (ShPtr< ContinueStmt > stmt) override |
|
virtual void | visit (ShPtr< EmptyStmt > stmt) override |
|
virtual void | visit (ShPtr< ForLoopStmt > stmt) override |
|
virtual void | visit (ShPtr< UForLoopStmt > stmt) override |
|
virtual void | visit (ShPtr< GotoStmt > stmt) override |
|
virtual void | visit (ShPtr< IfStmt > stmt) override |
|
virtual void | visit (ShPtr< ReturnStmt > stmt) override |
|
virtual void | visit (ShPtr< SwitchStmt > stmt) override |
|
virtual void | visit (ShPtr< UnreachableStmt > stmt) override |
|
virtual void | visit (ShPtr< VarDefStmt > stmt) override |
|
virtual void | visit (ShPtr< WhileLoopStmt > stmt) override |
|
virtual void | visit (ShPtr< AddOpExpr > expr) override |
|
virtual void | visit (ShPtr< AddressOpExpr > expr) override |
|
virtual void | visit (ShPtr< AndOpExpr > expr) override |
|
virtual void | visit (ShPtr< ArrayIndexOpExpr > expr) override |
|
virtual void | visit (ShPtr< AssignOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitAndOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitOrOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitShlOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitShrOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitXorOpExpr > expr) override |
|
virtual void | visit (ShPtr< CallExpr > expr) override |
|
virtual void | visit (ShPtr< CommaOpExpr > expr) override |
|
virtual void | visit (ShPtr< DerefOpExpr > expr) override |
|
virtual void | visit (ShPtr< DivOpExpr > expr) override |
|
virtual void | visit (ShPtr< EqOpExpr > expr) override |
|
virtual void | visit (ShPtr< GtEqOpExpr > expr) override |
|
virtual void | visit (ShPtr< GtOpExpr > expr) override |
|
virtual void | visit (ShPtr< LtEqOpExpr > expr) override |
|
virtual void | visit (ShPtr< LtOpExpr > expr) override |
|
virtual void | visit (ShPtr< ModOpExpr > expr) override |
|
virtual void | visit (ShPtr< MulOpExpr > expr) override |
|
virtual void | visit (ShPtr< NegOpExpr > expr) override |
|
virtual void | visit (ShPtr< NeqOpExpr > expr) override |
|
virtual void | visit (ShPtr< NotOpExpr > expr) override |
|
virtual void | visit (ShPtr< OrOpExpr > expr) override |
|
virtual void | visit (ShPtr< StructIndexOpExpr > expr) override |
|
virtual void | visit (ShPtr< SubOpExpr > expr) override |
|
virtual void | visit (ShPtr< TernaryOpExpr > expr) override |
|
virtual void | visit (ShPtr< Variable > var) override |
|
virtual void | visit (ShPtr< BitCastExpr > expr) override |
|
virtual void | visit (ShPtr< ExtCastExpr > expr) override |
|
virtual void | visit (ShPtr< FPToIntCastExpr > expr) override |
|
virtual void | visit (ShPtr< IntToFPCastExpr > expr) override |
|
virtual void | visit (ShPtr< IntToPtrCastExpr > expr) override |
|
virtual void | visit (ShPtr< PtrToIntCastExpr > expr) override |
|
virtual void | visit (ShPtr< TruncCastExpr > expr) override |
|
virtual void | visit (ShPtr< ConstArray > constant) override |
|
virtual void | visit (ShPtr< ConstBool > constant) override |
|
virtual void | visit (ShPtr< ConstFloat > constant) override |
|
virtual void | visit (ShPtr< ConstInt > constant) override |
|
virtual void | visit (ShPtr< ConstNullPointer > constant) override |
|
virtual void | visit (ShPtr< ConstString > constant) override |
|
virtual void | visit (ShPtr< ConstStruct > constant) override |
|
virtual void | visit (ShPtr< ConstSymbol > constant) override |
|
virtual void | visit (ShPtr< ArrayType > type) override |
|
virtual void | visit (ShPtr< FloatType > type) override |
|
virtual void | visit (ShPtr< IntType > type) override |
|
virtual void | visit (ShPtr< PointerType > type) override |
|
virtual void | visit (ShPtr< StringType > type) override |
|
virtual void | visit (ShPtr< StructType > type) override |
|
virtual void | visit (ShPtr< FunctionType > type) override |
|
virtual void | visit (ShPtr< VoidType > type) override |
|
virtual void | visit (ShPtr< UnknownType > type) override |
|
virtual void | visit (ShPtr< GlobalVarDef > varDef) override |
|
virtual void | visit (ShPtr< Function > func) override |
|
virtual void | visit (ShPtr< AssignStmt > stmt) override |
|
virtual void | visit (ShPtr< BreakStmt > stmt) override |
|
virtual void | visit (ShPtr< CallStmt > stmt) override |
|
virtual void | visit (ShPtr< ContinueStmt > stmt) override |
|
virtual void | visit (ShPtr< EmptyStmt > stmt) override |
|
virtual void | visit (ShPtr< ForLoopStmt > stmt) override |
|
virtual void | visit (ShPtr< UForLoopStmt > stmt) override |
|
virtual void | visit (ShPtr< GotoStmt > stmt) override |
|
virtual void | visit (ShPtr< IfStmt > stmt) override |
|
virtual void | visit (ShPtr< ReturnStmt > stmt) override |
|
virtual void | visit (ShPtr< SwitchStmt > stmt) override |
|
virtual void | visit (ShPtr< UnreachableStmt > stmt) override |
|
virtual void | visit (ShPtr< VarDefStmt > stmt) override |
|
virtual void | visit (ShPtr< WhileLoopStmt > stmt) override |
|
virtual void | visit (ShPtr< AddOpExpr > expr) override |
|
virtual void | visit (ShPtr< AddressOpExpr > expr) override |
|
virtual void | visit (ShPtr< AndOpExpr > expr) override |
|
virtual void | visit (ShPtr< ArrayIndexOpExpr > expr) override |
|
virtual void | visit (ShPtr< AssignOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitAndOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitOrOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitShlOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitShrOpExpr > expr) override |
|
virtual void | visit (ShPtr< BitXorOpExpr > expr) override |
|
virtual void | visit (ShPtr< CommaOpExpr > expr) override |
|
virtual void | visit (ShPtr< DerefOpExpr > expr) override |
|
virtual void | visit (ShPtr< DivOpExpr > expr) override |
|
virtual void | visit (ShPtr< EqOpExpr > expr) override |
|
virtual void | visit (ShPtr< GtEqOpExpr > expr) override |
|
virtual void | visit (ShPtr< GtOpExpr > expr) override |
|
virtual void | visit (ShPtr< LtEqOpExpr > expr) override |
|
virtual void | visit (ShPtr< LtOpExpr > expr) override |
|
virtual void | visit (ShPtr< ModOpExpr > expr) override |
|
virtual void | visit (ShPtr< MulOpExpr > expr) override |
|
virtual void | visit (ShPtr< NegOpExpr > expr) override |
|
virtual void | visit (ShPtr< NeqOpExpr > expr) override |
|
virtual void | visit (ShPtr< NotOpExpr > expr) override |
|
virtual void | visit (ShPtr< OrOpExpr > expr) override |
|
virtual void | visit (ShPtr< StructIndexOpExpr > expr) override |
|
virtual void | visit (ShPtr< SubOpExpr > expr) override |
|
virtual void | visit (ShPtr< TernaryOpExpr > expr) override |
|
virtual void | visit (ShPtr< Variable > var) override |
|
virtual void | visit (ShPtr< BitCastExpr > expr) override |
|
virtual void | visit (ShPtr< ExtCastExpr > expr) override |
|
virtual void | visit (ShPtr< FPToIntCastExpr > expr) override |
|
virtual void | visit (ShPtr< IntToFPCastExpr > expr) override |
|
virtual void | visit (ShPtr< IntToPtrCastExpr > expr) override |
|
virtual void | visit (ShPtr< PtrToIntCastExpr > expr) override |
|
virtual void | visit (ShPtr< TruncCastExpr > expr) override |
|
virtual void | visit (ShPtr< ConstArray > constant) override |
|
virtual void | visit (ShPtr< ConstBool > constant) override |
|
virtual void | visit (ShPtr< ConstFloat > constant) override |
|
virtual void | visit (ShPtr< ConstInt > constant) override |
|
virtual void | visit (ShPtr< ConstNullPointer > constant) override |
|
virtual void | visit (ShPtr< ConstString > constant) override |
|
virtual void | visit (ShPtr< ConstStruct > constant) override |
|
virtual void | visit (ShPtr< ConstSymbol > constant) override |
|
virtual void | visit (ShPtr< ArrayType > type) override |
|
virtual void | visit (ShPtr< FloatType > type) override |
|
virtual void | visit (ShPtr< IntType > type) override |
|
virtual void | visit (ShPtr< PointerType > type) override |
|
virtual void | visit (ShPtr< StringType > type) override |
|
virtual void | visit (ShPtr< StructType > type) override |
|
virtual void | visit (ShPtr< FunctionType > type) override |
|
virtual void | visit (ShPtr< VoidType > type) override |
|
virtual void | visit (ShPtr< UnknownType > type) override |
|
| OrderedAllVisitor (bool visitSuccessors=true, bool visitNestedStmts=true) |
| Constructs a new visitor. More...
|
|
virtual void | visitStmt (ShPtr< Statement > stmt, bool visitSuccessors=true, bool visitNestedStmts=true) |
| Visits the given statement, and possibly its successors or nested statements. More...
|
|
void | restart (bool visitSuccessors=true, bool visitNestedStmts=true) |
| "Restarts" the visitor so it is in the state like it was when it was created. More...
|
|
bool | makeAccessedAndCheckIfAccessed (ShPtr< Type > type) |
| Makes the given type accessed. More...
|
|
virtual | ~Visitor ()=default |
|
| Visitor ()=default |
|
| NonCopyable (const NonCopyable &)=delete |
|
NonCopyable & | operator= (const NonCopyable &)=delete |
|
| NonCopyable ()=default |
|
| ~NonCopyable ()=default |
|
Conversion of LLVM intrinsic functions into functions from the standard C library.
LLVM intrinsic functions are of the following format (see http://llvm.org/docs/LangRef.html#intrinsics):
llvm.FUNCNAME.SPECIFICATIONS
Definition: itanium_ast_ctypes_parser.h:12
where FUNCNAME
is the name of a function and SPECIFICATIONS
are some additional specifications.
For example, the following function is an LLVM's intrinsic variant of the standard memcpy()
function from C:
declare
void @
llvm.memcpy.p0i8.p0i8.i32(i8* nocapture,
i8* nocapture, i32, i32, i1) nounwind
Unlike the C version, this one takes 5 parameters, where the last two specify alignment and volatileness. We convert this function into
void *memcpy(void *dest, const void *src, size_t n);
Hence, we drop the last two parameters.
The convert() function of this class performs this conversion. The following LLVM intrinsics are converted:
-
llvm.memcpy.* (arguments/parameters are decreased from 5 to 3)
-
llvm.trap (converted into abort)
This class implements the "static helper" (or "library") design pattern (it has just static functions and no public instances can be created).