Я новичок llvm.llvm "replaceinstwithvalue" не работает
Я пытаюсь написать пропуск llvm для оптимизации для алгебраических тождеств в функции (например, если моя функция имеет инструкцию a = b * 0, мой проход должен заменить все следующие применения «a» с помощью 0).
Итак, мой пропуск выглядит следующим образом: -
...
for (Function::iterator f_it = F.begin(), f_ite = F.end(); f_it != f_ite; ++f_it) {
for(BasicBlock::iterator b_it = f_it->begin(), b_ite = f_it->end(); b_it != b_ite; ++b_it) {
if(op->getOpcode() == Instruction::Mul) {
if(ConstantInt *CI_F = dyn_cast<ConstantInt>(&*b_it->getOperand(0))) {
if(CI_F->isZero()) {
firstop_zero = 1;
}
}
if(ConstantInt *CI_S = dyn_cast<ConstantInt>(&*b_it->getOperand(1))) {
if(CI_S->isZero()) {
secop_zero = 1;
}
}
if(first_zero || second_zero) {
errs()<<"found zero operand\n";
ReplaceInstWithValue(b_it->getParent()->getInstList(),b_it,(first_zero?(&*b_it->getOperand(1)):(&*b_it->getOperand(0))));
}
}
}
}
Я вижу, что мой комментарий «найден нулевой операнд печатается на станд-эээ, но я не могу видеть замену в результирующем. разборка Британской Колумбии.
Что я здесь отсутствует? Любая помощь искренне признателен.
большое спасибо! Praveena