[llvm] [X86] Remove redundant `cmp` before `adc` after `lzcnt` or `tzcnt` (PR #208392)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 13 03:20:14 PDT 2026
================
@@ -0,0 +1,192 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+bmi,+lzcnt | FileCheck %s --check-prefix=X64
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+bmi,+lzcnt | FileCheck %s --check-prefix=X86
+
+define i32 @remove_redundant_cmp_lzcnt_i32(i32 %0) {
+; X64-LABEL: remove_redundant_cmp_lzcnt_i32:
+; X64: # %bb.0:
+; X64-NEXT: lzcntl %edi, %eax
+; X64-NEXT: adcl $0, %eax
+; X64-NEXT: retq
+;
+; X86-LABEL: remove_redundant_cmp_lzcnt_i32:
+; X86: # %bb.0:
+; X86-NEXT: lzcntl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: adcl $0, %eax
+; X86-NEXT: retl
+ %2 = tail call i32 @llvm.ctlz.i32(i32 %0, i1 false)
+ %3 = icmp eq i32 %0, 0
----------------
RKSimon wrote:
A mixture of cases - you don't need full coverage for both lzcnt/tzcnt/i32/i64 as long as they overlap
https://github.com/llvm/llvm-project/pull/208392
More information about the llvm-commits
mailing list