[llvm] fuzz1 (PR #173702)

via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 26 21:23:59 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-transforms

Author: Justin Lebar (jlebar)

<details>
<summary>Changes</summary>

- **[NFC] Add missing `override` on function.**
- **[InstCombine] Guard foldICmpSRemConstant against zero divisors**


---
Full diff: https://github.com/llvm/llvm-project/pull/173702.diff


3 Files Affected:

- (modified) llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp (+4-4) 
- (added) llvm/test/Transforms/InstCombine/srem-zero-icmp-ult.ll (+16) 
- (modified) llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp (+1-1) 


``````````diff
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
index 7f1ced9505b9b..d23712597ff49 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -2668,17 +2668,17 @@ Instruction *InstCombinerImpl::foldICmpSRemConstant(ICmpInst &Cmp,
     const APInt *DivisorC;
     if (!match(SRem->getOperand(1), m_APInt(DivisorC)))
       return nullptr;
+    if (DivisorC->isZero())
+      return nullptr;
 
     APInt NormalizedC = C;
     if (Pred == ICmpInst::ICMP_ULT) {
-      assert(!NormalizedC.isZero() &&
-             "ult X, 0 should have been simplified already.");
+      if (NormalizedC.isZero())
+        return nullptr;
       --NormalizedC;
     }
     if (C.isNegative())
       NormalizedC.flipAllBits();
-    assert(!DivisorC->isZero() &&
-           "srem X, 0 should have been simplified already.");
     if (!NormalizedC.uge(DivisorC->abs() - 1))
       return nullptr;
 
diff --git a/llvm/test/Transforms/InstCombine/srem-zero-icmp-ult.ll b/llvm/test/Transforms/InstCombine/srem-zero-icmp-ult.ll
new file mode 100644
index 0000000000000..e0d0658deaadb
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/srem-zero-icmp-ult.ll
@@ -0,0 +1,16 @@
+; RUN: opt -passes=instcombine -S < %s | FileCheck %s
+
+define i64 @f(i1 %c) {
+entry:
+  %0 = select i1 %c, i64 3, i64 0
+  %1 = trunc i64 %0 to i8
+  %2 = sdiv i8 -1, %1
+  %3 = srem i8 -1, %2
+  %4 = icmp ult i8 %1, %3
+  %5 = zext i1 %4 to i64
+  %6 = select i1 false, i64 %0, i64 %5
+  ret i64 %6
+}
+
+; CHECK-LABEL: @f(
+; CHECK: ret i64 poison
diff --git a/llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp b/llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp
index fb5c0bf45b8cd..6b976b8960125 100644
--- a/llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp
+++ b/llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp
@@ -95,7 +95,7 @@ class LLVMFuzzerInputBuffer : public MemoryBuffer
       }
 
 
-    virtual BufferKind getBufferKind() const {
+    virtual BufferKind getBufferKind() const override {
       return MemoryBuffer_Malloc; // it's not disk-backed so I think that's
                                   // the intent ... though AFAIK it
                                   // probably came from an mmap or sbrk

``````````

</details>


https://github.com/llvm/llvm-project/pull/173702


More information about the llvm-commits mailing list