Ho scritto un passaggio per rilevare e stampare l'etichetta dei blocchi di base in una funzione, poiché desidero utilizzare ulteriormente splitBasicBlock()
. Ho scritto che in questo modo:llvm: Come ottenere l'etichetta dei blocchi di base
virtual bool runOnModule(Module &M)
{
for(Module::iterator F = M.begin(), E = M.end(); F!= E; ++F)
{
errs()<<"Function:"<<F->getName()<<"\n";
//for(Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
for (iplist<BasicBlock>::iterator iter = F->getBasicBlockList().begin();
iter != F->getBasicBlockList().end();
iter++)
{
BasicBlock* currBB = iter;
errs() << "BasicBlock: " << currBB->getName() << "\n";
}
}
return true;
}
IR del file è simile al seguente:
; <label>:63 ; preds = %43
%64 = load i32* %j, align 4
%65 = sext i32 %64 to i64
%66 = load i8** %tempdst, align 8
%67 = getelementptr inbounds i8* %66, i64 %65
store i8 -1, i8* %67, align 1
br label %73
; <label>:68 ; preds = %43
%69 = load i32* %j, align 4
%70 = sext i32 %69 to i64
%71 = load i8** %tempdst, align 8
%72 = getelementptr inbounds i8* %71, i64 %70
store i8 0, i8* %72, align 1
br label %73
; <label>:73 ; preds = %68, %63
br label %74
Tuttavia, ho ottenuto nulla l'etichetta:
Function:main
BasicBlock:
BasicBlock:
BasicBlock:
Cosa c'è di sbagliato con questi "senza nome" di base bloccare? Cosa dovrei fare?
Um ... Come dividere una delle Thes blocchi di base? – winter333
@ winter333 se hai un'altra domanda dovresti farla separatamente. – Oak