add Utils::initExternalFunction
This commit is contained in:
@@ -1067,4 +1067,113 @@ void Utils::createExternalFunction(
|
||||
}
|
||||
}
|
||||
|
||||
void Utils::initExternalFunction(Module *pModule, IRBuilder *pBuilder) {
|
||||
std::vector<Type *> paramTypes;
|
||||
std::vector<std::string> paramNames;
|
||||
std::vector<std::vector<Value *>> paramDims;
|
||||
Type *returnType;
|
||||
std::string funcName;
|
||||
|
||||
returnType = Type::getIntType();
|
||||
funcName = "getint";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
funcName = "getch";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
paramTypes.push_back(Type::getIntType());
|
||||
paramNames.emplace_back("x");
|
||||
paramDims.push_back(std::vector<Value *>{ConstantValue::get(-1)});
|
||||
funcName = "getarray";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
returnType = Type::getFloatType();
|
||||
paramTypes.clear();
|
||||
paramNames.clear();
|
||||
paramDims.clear();
|
||||
funcName = "getfloat";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
returnType = Type::getIntType();
|
||||
paramTypes.push_back(Type::getFloatType());
|
||||
paramNames.emplace_back("x");
|
||||
paramDims.push_back(std::vector<Value *>{ConstantValue::get(-1)});
|
||||
funcName = "getfarray";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
returnType = Type::getVoidType();
|
||||
|
||||
paramTypes.clear();
|
||||
paramTypes.push_back(Type::getIntType());
|
||||
paramDims.clear();
|
||||
paramDims.emplace_back();
|
||||
funcName = "putint";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
funcName = "putch";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
paramTypes.clear();
|
||||
paramTypes.push_back(Type::getIntType());
|
||||
paramTypes.push_back(Type::getIntType());
|
||||
paramDims.clear();
|
||||
paramDims.emplace_back();
|
||||
paramDims.push_back(std::vector<Value *>{ConstantValue::get(-1)});
|
||||
paramNames.clear();
|
||||
paramNames.emplace_back("n");
|
||||
paramNames.emplace_back("a");
|
||||
funcName = "putarray";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
paramTypes.clear();
|
||||
paramTypes.push_back(Type::getFloatType());
|
||||
paramDims.clear();
|
||||
paramDims.emplace_back();
|
||||
paramNames.clear();
|
||||
paramNames.emplace_back("a");
|
||||
funcName = "putfloat";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
paramTypes.clear();
|
||||
paramTypes.push_back(Type::getIntType());
|
||||
paramTypes.push_back(Type::getFloatType());
|
||||
paramDims.clear();
|
||||
paramDims.emplace_back();
|
||||
paramDims.push_back(std::vector<Value *>{ConstantValue::get(-1)});
|
||||
paramNames.clear();
|
||||
paramNames.emplace_back("n");
|
||||
paramNames.emplace_back("a");
|
||||
funcName = "putfarray";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
paramTypes.clear();
|
||||
paramTypes.push_back(Type::getIntType());
|
||||
paramDims.clear();
|
||||
paramDims.emplace_back();
|
||||
paramNames.clear();
|
||||
paramNames.emplace_back("__LINE__");
|
||||
funcName = "starttime";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
paramTypes.clear();
|
||||
paramTypes.push_back(Type::getIntType());
|
||||
paramDims.clear();
|
||||
paramDims.emplace_back();
|
||||
paramNames.clear();
|
||||
paramNames.emplace_back("__LINE__");
|
||||
funcName = "stoptime";
|
||||
Utils::createExternalFunction(paramTypes, paramNames, paramDims, returnType,
|
||||
funcName, pModule, pBuilder);
|
||||
|
||||
}
|
||||
|
||||
} // namespace sysy
|
||||
Reference in New Issue
Block a user