2014-02-01 2 views
0

Я новичок 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

ответ

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) { 
Instruction *I = *b_it; 
Value *Zeroval; 
if(op->getOpcode() == Instruction::Mul) { 
    if(ConstantInt *CI_F = dyn_cast<ConstantInt>(&*b_it->getOperand(0))) { 
    if(CI_F->isZero()) { 
     firstop_zero = 1; 
     Zeroval = CI_F; 
    } 
    } 
    if(ConstantInt *CI_S = dyn_cast<ConstantInt>(&*b_it->getOperand(1))) { 
    if(CI_S->isZero()) { 
     secop_zero = 1; 
     ZeroVal = CI_S; 
    } 
    } 
    if(first_zero || second_zero) { 
    errs()<<"found zero operand\n"; 
    I->ReplaceAlluseswith(ZeroVal); 
    } 
} 
} 

}

Смежные вопросы