add Utils::initExternalFunction

This commit is contained in:
rain2133
2025-06-22 14:14:02 +08:00
parent 4828c18f96
commit d90330af3f
3 changed files with 120 additions and 10 deletions

View File

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