Ignore:
Timestamp:
Mar 1, 2017, 4:17:24 PM (2 years ago)
Author:
nmedfort
Message:

Progress on parenthesis matching example

Location:
icGREP/icgrep-devel/icgrep/IR_Gen
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/IR_Gen/CBuilder.cpp

    r5350 r5353  
    5858    if (closeFn == nullptr) {
    5959        IntegerType * int32Ty = getInt32Ty();
    60         closeFn = cast<Function>(mMod->getOrInsertFunction("close",
    61                                                            int32Ty, int32Ty, nullptr));
     60        FunctionType * fty = FunctionType::get(int32Ty, {int32Ty}, true);
     61        closeFn = Function::Create(fty, Function::ExternalLinkage, "close", mMod);
    6262    }
    6363    return CreateCall(closeFn, {fildes});
    6464}
    65 
    66 
    6765
    6866Function * CBuilder::GetPrintf() {
    6967    Function * printf = mMod->getFunction("printf");
    7068    if (printf == nullptr) {
    71         printf = cast<Function>(mMod->getOrInsertFunction("printf"
    72                                 , FunctionType::get(getInt32Ty(), {getInt8PtrTy()}, true)
    73                                 , AttributeSet().addAttribute(getContext(), 1U, Attribute::NoAlias)));
    74 
     69        FunctionType * fty = FunctionType::get(getInt32Ty(), {getInt8PtrTy()}, true);
     70        printf = Function::Create(fty, Function::ExternalLinkage, "printf", mMod);
     71        printf->addAttribute(1, Attribute::NoAlias);
    7572    }
    7673    return printf;
     
    134131    if (malloc == nullptr) {
    135132        PointerType * const voidPtrTy = getVoidPtrTy();
    136         malloc = cast<Function>(m->getOrInsertFunction("malloc", voidPtrTy, intTy, nullptr));
     133        FunctionType * fty = FunctionType::get(voidPtrTy, {intTy}, false);
     134        malloc = Function::Create(fty, Function::ExternalLinkage, "malloc", mMod);
    137135        malloc->setCallingConv(CallingConv::C);
    138136        malloc->setDoesNotAlias(0);
     
    191189    Function * free = m->getFunction("free");
    192190    if (free == nullptr) {
    193         free = cast<Function>(getModule()->getOrInsertFunction("free", getVoidTy(), voidPtrTy, nullptr));
     191        FunctionType * fty = FunctionType::get(getVoidTy(), {voidPtrTy}, false);
     192        free = Function::Create(fty, Function::ExternalLinkage, "free", mMod);
    194193        free->setCallingConv(CallingConv::C);
    195194    }
     
    253252    if (realloc == nullptr) {
    254253        PointerType * const voidPtrTy = getVoidPtrTy();
    255         realloc = cast<Function>(m->getOrInsertFunction("realloc", voidPtrTy, voidPtrTy, intTy, nullptr));
     254        FunctionType * fty = FunctionType::get(voidPtrTy, {voidPtrTy, intTy}, false);
     255        realloc = Function::Create(fty, Function::ExternalLinkage, "realloc", mMod);
    256256        realloc->setCallingConv(CallingConv::C);
    257257        realloc->setDoesNotAlias(1);
     
    293293    Function * fOpenFunc = mMod->getFunction("fopen");
    294294    if (fOpenFunc == nullptr) {
    295         fOpenFunc = cast<Function>(mMod->getOrInsertFunction("fopen", getFILEptrTy(), getInt8Ty()->getPointerTo(), getInt8Ty()->getPointerTo(), nullptr));
     295        FunctionType * fty = FunctionType::get(getFILEptrTy(), {getInt8Ty()->getPointerTo(), getInt8Ty()->getPointerTo()}, false);
     296        fOpenFunc = Function::Create(fty, Function::ExternalLinkage, "fopen", mMod);
    296297        fOpenFunc->setCallingConv(CallingConv::C);
    297298    }
     
    302303    Function * fReadFunc = mMod->getFunction("fread");
    303304    if (fReadFunc == nullptr) {
    304         fReadFunc = cast<Function>(mMod->getOrInsertFunction("fread", getSizeTy(), getVoidPtrTy(), getSizeTy(), getSizeTy(), getFILEptrTy(), nullptr));
     305        FunctionType * fty = FunctionType::get(getSizeTy(), {getVoidPtrTy(), getSizeTy(), getSizeTy(), getFILEptrTy()}, false);
     306        fReadFunc = Function::Create(fty, Function::ExternalLinkage, "fread", mMod);
    305307        fReadFunc->setCallingConv(CallingConv::C);
    306308    }
     
    311313    Function * fWriteFunc = mMod->getFunction("fwrite");
    312314    if (fWriteFunc == nullptr) {
    313         fWriteFunc = cast<Function>(mMod->getOrInsertFunction("fwrite", getSizeTy(), getVoidPtrTy(), getSizeTy(), getSizeTy(), getFILEptrTy(), nullptr));
     315        FunctionType * fty = FunctionType::get(getSizeTy(), {getVoidPtrTy(), getSizeTy(), getSizeTy(), getFILEptrTy()}, false);
     316        fWriteFunc = Function::Create(fty, Function::ExternalLinkage, "fwrite", mMod);
    314317        fWriteFunc->setCallingConv(CallingConv::C);
    315318    }
     
    320323    Function * fCloseFunc = mMod->getFunction("fclose");
    321324    if (fCloseFunc == nullptr) {
    322         fCloseFunc = cast<Function>(mMod->getOrInsertFunction("fclose", getInt32Ty(), getFILEptrTy(), nullptr));
     325        FunctionType * fty = FunctionType::get(getInt32Ty(), {getFILEptrTy()}, false);
     326        fCloseFunc = Function::Create(fty, Function::ExternalLinkage, "fclose", mMod);
    323327        fCloseFunc->setCallingConv(CallingConv::C);
    324328    }
     
    330334    if (pthreadCreateFunc == nullptr) {
    331335        Type * pthreadTy = getSizeTy();
    332         FunctionType * funVoidPtrVoidTy = FunctionType::get(getVoidTy(), getVoidPtrTy(), false);
    333 
    334         pthreadCreateFunc = cast<Function>(mMod->getOrInsertFunction("pthread_create",
    335                                                                      getInt32Ty(),
    336                                                                      pthreadTy->getPointerTo(),
    337                                                                      getVoidPtrTy(),
    338                                                                      static_cast<Type *>(funVoidPtrVoidTy)->getPointerTo(),
    339                                                                      getVoidPtrTy(), nullptr));
     336        FunctionType * funVoidPtrVoidTy = FunctionType::get(getVoidTy(), {getVoidPtrTy()}, false);
     337        FunctionType * fty = FunctionType::get(getInt32Ty(), {pthreadTy->getPointerTo(), getVoidPtrTy(), funVoidPtrVoidTy->getPointerTo(), getVoidPtrTy()}, false);
     338        pthreadCreateFunc = Function::Create(fty, Function::ExternalLinkage, "pthread_create", mMod);
    340339        pthreadCreateFunc->setCallingConv(CallingConv::C);
    341340    }
     
    346345    Function * pthreadExitFunc = mMod->getFunction("pthread_exit");
    347346    if (pthreadExitFunc == nullptr) {
    348         pthreadExitFunc = cast<Function>(mMod->getOrInsertFunction("pthread_exit", getVoidTy(), getVoidPtrTy(), nullptr));
     347        FunctionType * fty = FunctionType::get(getVoidTy(), {getVoidPtrTy()}, false);
     348        pthreadExitFunc = Function::Create(fty, Function::ExternalLinkage, "pthread_exit", mMod);
    349349        pthreadExitFunc->addFnAttr(Attribute::NoReturn);
    350350        pthreadExitFunc->setCallingConv(CallingConv::C);
     
    356356
    357357Value * CBuilder::CreatePThreadJoinCall(Value * thread, Value * value_ptr){
    358     Type * pthreadTy = getSizeTy();
    359     Function * pthreadJoinFunc = cast<Function>(mMod->getOrInsertFunction("pthread_join",
    360                                                                        getInt32Ty(),
    361                                                                        pthreadTy,
    362                                                                        getVoidPtrTy()->getPointerTo(), nullptr));
    363     pthreadJoinFunc->setCallingConv(CallingConv::C);
     358    Function * pthreadJoinFunc = mMod->getFunction("pthread_join");
     359    if (pthreadJoinFunc == nullptr) {
     360        Type * pthreadTy = getSizeTy();
     361        FunctionType * fty = FunctionType::get(getInt32Ty(), {pthreadTy, getVoidPtrTy()->getPointerTo()}, false);
     362        pthreadJoinFunc = Function::Create(fty, Function::ExternalLinkage, "pthread_join", mMod);
     363        pthreadJoinFunc->setCallingConv(CallingConv::C);
     364    }
    364365    return CreateCall(pthreadJoinFunc, {thread, value_ptr});
    365366}
     
    367368void CBuilder::CreateAssert(Value * const assertion, StringRef failureMessage) {
    368369    if (codegen::EnableAsserts) {
    369         Module * const m = getModule();
    370         Function * function = m->getFunction("__assert");
     370        Function * function = mMod->getFunction("__assert");
    371371        if (LLVM_UNLIKELY(function == nullptr)) {
    372372            auto ip = saveIP();
    373             function = cast<Function>(m->getOrInsertFunction("__assert", getVoidTy(), getInt1Ty(), getInt8PtrTy(), getSizeTy(), nullptr));
     373            FunctionType * fty = FunctionType::get(getVoidTy(), { getInt1Ty(), getInt8PtrTy(), getSizeTy() }, false);
     374            function = Function::Create(fty, Function::PrivateLinkage, "__assert", mMod);
    374375            function->setDoesNotThrow();
    375376            function->setDoesNotAlias(2);
     
    405406
    406407void CBuilder::CreateExit(const int exitCode) {
    407     Module * const m = getModule();
    408     Function * exit = m->getFunction("exit");
     408    Function * exit = mMod->getFunction("exit");
    409409    if (LLVM_UNLIKELY(exit == nullptr)) {
    410         exit = cast<Function>(m->getOrInsertFunction("exit", getVoidTy(), getInt32Ty(), nullptr));
     410        FunctionType * fty = FunctionType::get(getVoidTy(), {getInt32Ty()}, false);
     411        exit = Function::Create(fty, Function::ExternalLinkage, "exit", mMod);
    411412        exit->setDoesNotReturn();
    412413        exit->setDoesNotThrow();
  • icGREP/icgrep-devel/icgrep/IR_Gen/CBuilder.h

    r5350 r5353  
    4343
    4444    llvm::CallInst * CreateMemZero(llvm::Value * ptr, llvm::Value * size, const unsigned alignment = 1) {
    45         return CreateMemSet(CreatePointerCast(ptr, getInt8PtrTy()), getInt8(0), size, alignment);
     45        return CreateMemSet(ptr, getInt8(0), size, alignment);
    4646    }
    4747
Note: See TracChangeset for help on using the changeset viewer.