[llvm] [InstCombine] Lower flag check pattern to use a bitmask-shift (PR #169557)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 2 21:25:33 PST 2025
================
@@ -3119,6 +3119,127 @@ static Instruction *matchFunnelShift(Instruction &Or, InstCombinerImpl &IC) {
return nullptr;
}
+static Value *combineOrOfImmCmpToBitExtract(Instruction &Or,
+ InstCombiner::BuilderTy &Builder,
+ const DataLayout &DL) {
+
+ auto isICmpEqImm = [](Value *N, ConstantInt *&Imm, Value *&X) -> bool {
+ if (X)
+ return match(N, m_OneUse(m_SpecificICmp(ICmpInst::ICMP_EQ, m_Specific(X),
+ m_ConstantInt(Imm))));
+
+ return match(N, m_OneUse(m_SpecificICmp(ICmpInst::ICMP_EQ, m_Value(X),
+ m_ConstantInt(Imm))));
+ };
+
+ // %srl = lshr %bitmap, %X
+ // %icmp = icmp ult %X, %max_value
+ // %trunc = trunc %srl to i1
+ // %sel = select %icmp, %trunc, false
+ auto CreateBitExtractSeq = [&](APInt BitMap, APInt MaxValue,
+ Value *X) -> Value * {
+ LLVMContext &Context = Or.getContext();
+
+ // %srl = lshr %bitmap, %X
+ // It is okay for the shift amount to be truncated because
+ // if information is lost then it is garunteed to fail the bounds
----------------
topperc wrote:
```suggestion
// if information is lost then it is guaranteed to fail the bounds
```
https://github.com/llvm/llvm-project/pull/169557
More information about the llvm-commits
mailing list