Skip to content

Commit 5910e8d

Browse files
committed
[DAG] visitUDIV - call SimplifyDemandedBits to handle hidden constant foldable cases
Fixes #108728
1 parent 614a064 commit 5910e8d

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4897,6 +4897,12 @@ SDValue DAGCombiner::visitUDIV(SDNode *N) {
48974897
if (SDValue DivRem = useDivRem(N))
48984898
return DivRem;
48994899

4900+
// Simplify the operands using demanded-bits information.
4901+
// We don't have demanded bits support for UDIV so this just enables constant
4902+
// folding based on known bits.
4903+
if (SimplifyDemandedBits(SDValue(N, 0)))
4904+
return SDValue(N, 0);
4905+
49004906
return SDValue();
49014907
}
49024908

llvm/test/CodeGen/X86/pr108728.ll

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s
3+
4+
define i8 @PR108728(i1 %a0) {
5+
; CHECK-LABEL: PR108728:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: xorl %eax, %eax
8+
; CHECK-NEXT: retq
9+
%sel = select i1 %a0, i8 0, i8 1
10+
%not = xor i8 %sel, -1
11+
%udiv = udiv i8 1, %not
12+
%cnt = tail call i8 @llvm.ctpop.i8(i8 %udiv)
13+
ret i8 %cnt
14+
}

0 commit comments

Comments
 (0)