mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-12 10:08:07 +00:00
bugfix for optimization
This commit is contained in:
@ -585,29 +585,32 @@ size_t SplitComparesTransform::splitFPCompares(Module &M) {
|
|||||||
m_e1 = BinaryOperator::Create(Instruction::And, t_e1, ConstantInt::get(t_e1->getType(), mask_exponent));
|
m_e1 = BinaryOperator::Create(Instruction::And, t_e1, ConstantInt::get(t_e1->getType(), mask_exponent));
|
||||||
signequal_bb->getInstList().insert(signequal_bb->getTerminator()->getIterator(), m_e0);
|
signequal_bb->getInstList().insert(signequal_bb->getTerminator()->getIterator(), m_e0);
|
||||||
signequal_bb->getInstList().insert(signequal_bb->getTerminator()->getIterator(), m_e1);
|
signequal_bb->getInstList().insert(signequal_bb->getTerminator()->getIterator(), m_e1);
|
||||||
|
} else {
|
||||||
|
m_e0 = t_e0;
|
||||||
|
m_e1 = t_e1;
|
||||||
}
|
}
|
||||||
/* compare the exponents of the operands */
|
/* compare the exponents of the operands */
|
||||||
Instruction *icmp_exponent_result;
|
Instruction *icmp_exponent_result;
|
||||||
switch (FcmpInst->getPredicate()) {
|
switch (FcmpInst->getPredicate()) {
|
||||||
case CmpInst::FCMP_OEQ:
|
case CmpInst::FCMP_OEQ:
|
||||||
icmp_exponent_result =
|
icmp_exponent_result =
|
||||||
CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_EQ, t_e0, t_e1);
|
CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_EQ, m_e0, m_e1);
|
||||||
break;
|
break;
|
||||||
case CmpInst::FCMP_ONE:
|
case CmpInst::FCMP_ONE:
|
||||||
case CmpInst::FCMP_UNE:
|
case CmpInst::FCMP_UNE:
|
||||||
icmp_exponent_result =
|
icmp_exponent_result =
|
||||||
CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_NE, t_e0, t_e1);
|
CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_NE, m_e0, m_e1);
|
||||||
break;
|
break;
|
||||||
case CmpInst::FCMP_OGT:
|
case CmpInst::FCMP_OGT:
|
||||||
Instruction *icmp_exponent;
|
Instruction *icmp_exponent;
|
||||||
icmp_exponent =
|
icmp_exponent =
|
||||||
CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_UGT, t_e0, t_e1);
|
CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_UGT, m_e0, m_e1);
|
||||||
signequal_bb->getInstList().insert(signequal_bb->getTerminator()->getIterator(), icmp_exponent);
|
signequal_bb->getInstList().insert(signequal_bb->getTerminator()->getIterator(), icmp_exponent);
|
||||||
icmp_exponent_result = BinaryOperator::Create(Instruction::Xor, icmp_exponent, t_s0);
|
icmp_exponent_result = BinaryOperator::Create(Instruction::Xor, icmp_exponent, t_s0);
|
||||||
break;
|
break;
|
||||||
case CmpInst::FCMP_OLT:
|
case CmpInst::FCMP_OLT:
|
||||||
icmp_exponent =
|
icmp_exponent =
|
||||||
CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_ULT, t_e0, t_e1);
|
CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_ULT, m_e0, m_e1);
|
||||||
signequal_bb->getInstList().insert(signequal_bb->getTerminator()->getIterator(), icmp_exponent);
|
signequal_bb->getInstList().insert(signequal_bb->getTerminator()->getIterator(), icmp_exponent);
|
||||||
icmp_exponent_result = BinaryOperator::Create(Instruction::Xor, icmp_exponent, t_s0);
|
icmp_exponent_result = BinaryOperator::Create(Instruction::Xor, icmp_exponent, t_s0);
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user