diff options
author | hexcoder- <heiko@hexco.de> | 2019-12-27 20:13:00 +0100 |
---|---|---|
committer | hexcoder- <heiko@hexco.de> | 2019-12-27 20:13:00 +0100 |
commit | 064cd3315c2c31a26eef5fd0f70d6fd2c77ef0f8 (patch) | |
tree | e4b684a04fea1176b8927af7662a3fa3779b0b3c | |
parent | 29bbe0aebe10019fc6cc60bcc4dfd99050bfadf8 (diff) | |
download | afl++-064cd3315c2c31a26eef5fd0f70d6fd2c77ef0f8.tar.gz |
fix issue #155 AFL_LLVM_LAF_SPLIT_FLOATS breaks bogofilter
added some forgotten floating point comparison types
-rw-r--r-- | llvm_mode/split-compares-pass.so.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm_mode/split-compares-pass.so.cc b/llvm_mode/split-compares-pass.so.cc index db884cde..eeac4a55 100644 --- a/llvm_mode/split-compares-pass.so.cc +++ b/llvm_mode/split-compares-pass.so.cc @@ -470,7 +470,9 @@ size_t SplitComparesTransform::splitFPCompares(Module &M) { if (selectcmpInst->getPredicate() == CmpInst::FCMP_OEQ || selectcmpInst->getPredicate() == CmpInst::FCMP_ONE || selectcmpInst->getPredicate() == CmpInst::FCMP_UNE || + selectcmpInst->getPredicate() == CmpInst::FCMP_UGT || selectcmpInst->getPredicate() == CmpInst::FCMP_OGT || + selectcmpInst->getPredicate() == CmpInst::FCMP_ULT || selectcmpInst->getPredicate() == CmpInst::FCMP_OLT) { auto op0 = selectcmpInst->getOperand(0); @@ -655,6 +657,7 @@ size_t SplitComparesTransform::splitFPCompares(Module &M) { CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_NE, m_e0, m_e1); break; case CmpInst::FCMP_OGT: + case CmpInst::FCMP_UGT: Instruction *icmp_exponent; icmp_exponent = CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_UGT, m_e0, m_e1); @@ -664,6 +667,7 @@ size_t SplitComparesTransform::splitFPCompares(Module &M) { BinaryOperator::Create(Instruction::Xor, icmp_exponent, t_s0); break; case CmpInst::FCMP_OLT: + case CmpInst::FCMP_ULT: icmp_exponent = CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_ULT, m_e0, m_e1); signequal_bb->getInstList().insert( @@ -755,6 +759,7 @@ size_t SplitComparesTransform::splitFPCompares(Module &M) { CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_NE, t_f0, t_f1); break; case CmpInst::FCMP_OGT: + case CmpInst::FCMP_UGT: Instruction *icmp_fraction; icmp_fraction = CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_UGT, t_f0, t_f1); @@ -764,6 +769,7 @@ size_t SplitComparesTransform::splitFPCompares(Module &M) { BinaryOperator::Create(Instruction::Xor, icmp_fraction, t_s0); break; case CmpInst::FCMP_OLT: + case CmpInst::FCMP_ULT: icmp_fraction = CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_ULT, t_f0, t_f1); middle_bb->getInstList().insert( @@ -802,6 +808,7 @@ size_t SplitComparesTransform::splitFPCompares(Module &M) { PN->addIncoming(icmp_fraction_result, middle_bb); break; case CmpInst::FCMP_OGT: + case CmpInst::FCMP_UGT: /* if op1 is negative goto true branch, else go on comparing */ PN->addIncoming(t_s1, bb); @@ -809,6 +816,7 @@ size_t SplitComparesTransform::splitFPCompares(Module &M) { PN->addIncoming(icmp_fraction_result, middle_bb); break; case CmpInst::FCMP_OLT: + case CmpInst::FCMP_ULT: /* if op0 is negative goto true branch, else go on comparing */ PN->addIncoming(t_s0, bb); |