Skip to content

Commit 72ef809

Browse files
committed
Okay
1 parent 80abf99 commit 72ef809

File tree

2 files changed

+13
-18
lines changed

2 files changed

+13
-18
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -590,18 +590,15 @@ static Instruction *foldCttzCtlz(IntrinsicInst &II, InstCombinerImpl &IC) {
590590

591591
// cttz(Pow2) -> Log2(Pow2)
592592
// ctlz(Pow2) -> BitWidth - 1 - Log2(Pow2)
593-
if (IsTZ) {
594-
if (auto *R = IC.tryGetLog2(Op0, match(Op1, m_One()))) {
595-
if (IsTZ)
596-
return IC.replaceInstUsesWith(II, R);
597-
BinaryOperator *BO = BinaryOperator::CreateSub(
598-
ConstantInt::get(R->getType(),
599-
R->getType()->getScalarSizeInBits() - 1),
600-
R);
601-
BO->setHasNoSignedWrap();
602-
BO->setHasNoUnsignedWrap();
603-
return BO;
604-
}
593+
if (auto *R = IC.tryGetLog2(Op0, match(Op1, m_One()))) {
594+
if (IsTZ)
595+
return IC.replaceInstUsesWith(II, R);
596+
BinaryOperator *BO = BinaryOperator::CreateSub(
597+
ConstantInt::get(R->getType(), R->getType()->getScalarSizeInBits() - 1),
598+
R);
599+
BO->setHasNoSignedWrap();
600+
BO->setHasNoUnsignedWrap();
601+
return BO;
605602
}
606603

607604
KnownBits Known = IC.computeKnownBits(Op0, 0, &II);

llvm/test/Transforms/InstCombine/cttz.ll

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -353,9 +353,8 @@ define i8 @fold_ctz_log2_maybe_z_okay(i8 %x, i8 %y, i1 %c) {
353353

354354
define i8 @fold_clz_log2(i8 %x) {
355355
; CHECK-LABEL: @fold_clz_log2(
356-
; CHECK-NEXT: [[P2:%.*]] = shl nuw i8 1, [[X:%.*]]
357-
; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.umin.i8(i8 [[P2]], i8 32)
358-
; CHECK-NEXT: [[R:%.*]] = call range(i8 2, 9) i8 @llvm.ctlz.i8(i8 [[V]], i1 true)
356+
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[X:%.*]], i8 5)
357+
; CHECK-NEXT: [[R:%.*]] = xor i8 [[TMP1]], 7
359358
; CHECK-NEXT: ret i8 [[R]]
360359
;
361360
%p2 = shl i8 1, %x
@@ -382,9 +381,8 @@ define i8 @fold_clz_log2_multiuse_fail(i8 %x) {
382381

383382
define i9 @fold_clz_log2_i9(i9 %x) {
384383
; CHECK-LABEL: @fold_clz_log2_i9(
385-
; CHECK-NEXT: [[P2:%.*]] = shl nuw i9 1, [[X:%.*]]
386-
; CHECK-NEXT: [[V:%.*]] = call i9 @llvm.umin.i9(i9 [[P2]], i9 32)
387-
; CHECK-NEXT: [[R:%.*]] = call range(i9 3, 10) i9 @llvm.ctlz.i9(i9 [[V]], i1 true)
384+
; CHECK-NEXT: [[TMP1:%.*]] = call i9 @llvm.umin.i9(i9 [[X:%.*]], i9 5)
385+
; CHECK-NEXT: [[R:%.*]] = sub nuw nsw i9 8, [[TMP1]]
388386
; CHECK-NEXT: ret i9 [[R]]
389387
;
390388
%p2 = shl i9 1, %x

0 commit comments

Comments
 (0)