Commit e8cf7b80a7cb26ed6aa3959d2d07ae28ee6cd0de

Authored by Josh Klontz
1 parent 58e3dd0e

llvm bug fixes

Showing 1 changed file with 22 additions and 15 deletions
sdk/plugins/llvm.cpp
@@ -129,14 +129,14 @@ struct MatrixBuilder : public Matrix @@ -129,14 +129,14 @@ struct MatrixBuilder : public Matrix
129 setHash(other.getHash()); 129 setHash(other.getHash());
130 } 130 }
131 131
132 - void allocate() const { 132 + void allocateCode() const {
133 Function *malloc = TheModule->getFunction("malloc"); 133 Function *malloc = TheModule->getFunction("malloc");
134 if (!malloc) { 134 if (!malloc) {
135 PointerType *mallocReturn = Type::getInt8PtrTy(getGlobalContext()); 135 PointerType *mallocReturn = Type::getInt8PtrTy(getGlobalContext());
136 std::vector<Type*> mallocParams; 136 std::vector<Type*> mallocParams;
137 mallocParams.push_back(Type::getInt32Ty(getGlobalContext())); 137 mallocParams.push_back(Type::getInt32Ty(getGlobalContext()));
138 FunctionType* mallocType = FunctionType::get(mallocReturn, mallocParams, false); 138 FunctionType* mallocType = FunctionType::get(mallocReturn, mallocParams, false);
139 - malloc = Function::Create(mallocType, GlobalValue::ExternalLinkage, "malloc"); 139 + malloc = Function::Create(mallocType, GlobalValue::ExternalLinkage, "malloc", TheModule);
140 malloc->setCallingConv(CallingConv::C); 140 malloc->setCallingConv(CallingConv::C);
141 } 141 }
142 142
@@ -392,7 +392,7 @@ private: @@ -392,7 +392,7 @@ private:
392 392
393 BasicBlock *getKernel = BasicBlock::Create(getGlobalContext(), "get_kernel", function); 393 BasicBlock *getKernel = BasicBlock::Create(getGlobalContext(), "get_kernel", function);
394 BasicBlock *preallocate = BasicBlock::Create(getGlobalContext(), "preallocate", function); 394 BasicBlock *preallocate = BasicBlock::Create(getGlobalContext(), "preallocate", function);
395 - Value *hashTest = builder.CreateICmpNE(mb.getHash(), kernelHash, "hash_fail_test"); 395 + Value *hashTest = builder.CreateICmpNE(mb.getHash(), builder.CreateLoad(kernelHash), "hash_fail_test");
396 builder.CreateCondBr(hashTest, getKernel, preallocate); 396 builder.CreateCondBr(hashTest, getKernel, preallocate);
397 397
398 builder.SetInsertPoint(getKernel); 398 builder.SetInsertPoint(getKernel);
@@ -401,12 +401,19 @@ private: @@ -401,12 +401,19 @@ private:
401 builder.CreateBr(preallocate); 401 builder.CreateBr(preallocate);
402 builder.SetInsertPoint(preallocate); 402 builder.SetInsertPoint(preallocate);
403 Value *kernelSize = buildPreallocate(mb, nb); 403 Value *kernelSize = buildPreallocate(mb, nb);
404 - nb.allocate();  
405 404
  405 + BasicBlock *allocate = BasicBlock::Create(getGlobalContext(), "allocate", function);
  406 + builder.CreateBr(allocate);
  407 + builder.SetInsertPoint(allocate);
  408 + nb.allocateCode();
  409 +
  410 + BasicBlock *callKernel = BasicBlock::Create(getGlobalContext(), "call_kernel", function);
  411 + builder.CreateBr(callKernel);
  412 + builder.SetInsertPoint(callKernel);
406 builder.CreateCall3(builder.CreateLoad(kernelFunction), src, dst, kernelSize); 413 builder.CreateCall3(builder.CreateLoad(kernelFunction), src, dst, kernelSize);
407 builder.CreateRetVoid(); 414 builder.CreateRetVoid();
408 415
409 - // optimize(function); 416 + optimize(function);
410 return kernel; 417 return kernel;
411 } 418 }
412 419
@@ -991,7 +998,7 @@ class LLVMInitializer : public Initializer @@ -991,7 +998,7 @@ class LLVMInitializer : public Initializer
991 TheFunctionPassManager->add(createDeadInstEliminationPass()); 998 TheFunctionPassManager->add(createDeadInstEliminationPass());
992 999
993 TheExtraFunctionPassManager = new FunctionPassManager(TheModule); 1000 TheExtraFunctionPassManager = new FunctionPassManager(TheModule);
994 -// TheExtraFunctionPassManager->add(createPrintFunctionPass("--------------------------------------------------------------------------------", &errs())); 1001 + TheExtraFunctionPassManager->add(createPrintFunctionPass("--------------------------------------------------------------------------------", &errs()));
995 // TheExtraFunctionPassManager->add(createLoopUnrollPass(INT_MAX,8)); 1002 // TheExtraFunctionPassManager->add(createLoopUnrollPass(INT_MAX,8));
996 1003
997 TheMatrixStruct = StructType::create("Matrix", 1004 TheMatrixStruct = StructType::create("Matrix",
@@ -1010,17 +1017,17 @@ class LLVMInitializer : public Initializer @@ -1010,17 +1017,17 @@ class LLVMInitializer : public Initializer
1010 kernel->project(src, dst); 1017 kernel->project(src, dst);
1011 qDebug() << dst.m(); 1018 qDebug() << dst.m();
1012 1019
1013 - src.m() = (Mat_<qint32>(2,2) << -1, -3, 9, 27);  
1014 - kernel->project(src, dst);  
1015 - qDebug() << dst.m(); 1020 +// src.m() = (Mat_<qint32>(2,2) << -1, -3, 9, 27);
  1021 +// kernel->project(src, dst);
  1022 +// qDebug() << dst.m();
1016 1023
1017 - src.m() = (Mat_<float>(2,2) << -1.5, -2.5, 3.5, 4.5);  
1018 - kernel->project(src, dst);  
1019 - qDebug() << dst.m(); 1024 +// src.m() = (Mat_<float>(2,2) << -1.5, -2.5, 3.5, 4.5);
  1025 +// kernel->project(src, dst);
  1026 +// qDebug() << dst.m();
1020 1027
1021 - src.m() = (Mat_<double>(2,2) << 1.75, 2.75, -3.75, -4.75);  
1022 - kernel->project(src, dst);  
1023 - qDebug() << dst.m(); 1028 +// src.m() = (Mat_<double>(2,2) << 1.75, 2.75, -3.75, -4.75);
  1029 +// kernel->project(src, dst);
  1030 +// qDebug() << dst.m();
1024 } 1031 }
1025 1032
1026 void finalize() const 1033 void finalize() const