diff options
| -rw-r--r-- | llvm/lib/Fuzzer/FuzzerTraceState.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerTraceState.cpp b/llvm/lib/Fuzzer/FuzzerTraceState.cpp index 71ff499d4d3..4192ceb7e92 100644 --- a/llvm/lib/Fuzzer/FuzzerTraceState.cpp +++ b/llvm/lib/Fuzzer/FuzzerTraceState.cpp @@ -576,8 +576,12 @@ static void AddValueForStrcmp(void *caller_pc, const char *s1, const char *s2, __attribute__((target("popcnt"))) static void AddValueForCmp(void *PCptr, uint64_t Arg1, uint64_t Arg2) { + if (Arg1 == Arg2) + return; uintptr_t PC = reinterpret_cast<uintptr_t>(PCptr); - VP.AddValue((PC & 4095) | (__builtin_popcountl(Arg1 ^ Arg2) << 12)); + uint64_t ArgDistance = __builtin_popcountl(Arg1 ^ Arg2) - 1; // [0,63] + uintptr_t Idx = (PC & 4095) | (ArgDistance << 12); + VP.AddValue(Idx); } } // namespace fuzzer |

