diff options
Diffstat (limited to 'lib/Module')
-rw-r--r-- | lib/Module/LowerSwitch.cpp | 14 | ||||
-rw-r--r-- | lib/Module/RaiseAsm.cpp | 6 |
2 files changed, 12 insertions, 8 deletions
diff --git a/lib/Module/LowerSwitch.cpp b/lib/Module/LowerSwitch.cpp index 84b04b24..f8473156 100644 --- a/lib/Module/LowerSwitch.cpp +++ b/lib/Module/LowerSwitch.cpp @@ -70,9 +70,8 @@ void LowerSwitchPass::switchConvert(CaseItr begin, CaseItr end, // iterate through all the cases, creating a new BasicBlock for each for (CaseItr it = begin; it < end; ++it) { - BasicBlock *newBlock = BasicBlock::Create(F->getContext(), "NodeBlock"); - Function::iterator FI = origBlock->getIterator(); - F->getBasicBlockList().insert(++FI, newBlock); + BasicBlock *newBlock = BasicBlock::Create(F->getContext(), "NodeBlock", F); + Builder.SetInsertPoint(newBlock); auto cmpValue = Builder.CreateICmpEQ(value, it->value, "case.cmp"); Builder.CreateCondBr(cmpValue, it->block, curHead); @@ -106,10 +105,10 @@ void LowerSwitchPass::processSwitchInst(SwitchInst *SI) { // Create a new, empty default block so that the new hierarchy of // if-then statements go to this and the PHI nodes are happy. - BasicBlock* newDefault = BasicBlock::Create(F->getContext(), "newDefault"); + BasicBlock *newDefault = + BasicBlock::Create(F->getContext(), "newDefault", F, defaultBlock); llvm::IRBuilder<> Builder(newDefault); - F->getBasicBlockList().insert(defaultBlock->getIterator(), newDefault); Builder.CreateBr(defaultBlock); // If there is an entry in any PHI nodes for the default edge, make sure @@ -132,11 +131,10 @@ void LowerSwitchPass::processSwitchInst(SwitchInst *SI) { // the if comparisons will happen in the same order // as the cases appear in the switch std::reverse(cases.begin(), cases.end()); - - switchConvert(cases.begin(), cases.end(), switchValue, origBlock, newDefault); + switchConvert(cases.begin(), cases.end(), switchValue, origBlock, newDefault); // We are now done with the switch instruction, so delete it - origBlock->getInstList().erase(SI); + SI->eraseFromParent(); } } diff --git a/lib/Module/RaiseAsm.cpp b/lib/Module/RaiseAsm.cpp index ec447bc4..799218c9 100644 --- a/lib/Module/RaiseAsm.cpp +++ b/lib/Module/RaiseAsm.cpp @@ -91,8 +91,14 @@ bool RaiseAsmPass::runOnModule(Module &M) { klee_warning("Warning: unable to select target: %s", Err.c_str()); TLI = 0; } else { +#if LLVM_VERSION_CODE >= LLVM_VERSION(16, 0) + TM = Target->createTargetMachine(TargetTriple, "", "", TargetOptions(), + std::nullopt); +#else TM = Target->createTargetMachine(TargetTriple, "", "", TargetOptions(), None); +#endif + TLI = TM->getSubtargetImpl(*(M.begin()))->getTargetLowering(); triple = llvm::Triple(TargetTriple); |