[PATCH] D149299: [X86] Add tests for checking `isKnownNeverZero`; NFC

Noah Goldstein via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 10 09:17:13 PDT 2023


goldstein.w.n added a comment.

In D149299#4484567 <https://reviews.llvm.org/D149299#4484567>, @RKSimon wrote:

> LGTM (although I think you still need rotl/rotr coverage?)

Added `fshl` and `fshr` cases as well. But we do have:

  define i32 @rotr_known_nonzero(i32 %xx, i32 %y) {
  ; CHECK-LABEL: rotr_known_nonzero:
  ; CHECK:       # %bb.0:
  ; CHECK-NEXT:    movl %esi, %ecx
  ; CHECK-NEXT:    orl $256, %edi # imm = 0x100
  ; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
  ; CHECK-NEXT:    rorl %cl, %edi
  ; CHECK-NEXT:    testl %edi, %edi
  ; CHECK-NEXT:    je .LBB14_1
  ; CHECK-NEXT:  # %bb.2: # %cond.false
  ; CHECK-NEXT:    rep bsfl %edi, %eax
  ; CHECK-NEXT:    retq
  ; CHECK-NEXT:  .LBB14_1:
  ; CHECK-NEXT:    movl $32, %eax
  ; CHECK-NEXT:    retq
    %x = or i32 %xx, 256
    %shr = lshr i32 %x, %y
    %sub = sub i32 32, %y
    %shl = shl i32 %x, %sub
    %z = or i32 %shl, %shr
    %r = call i32 @llvm.cttz.i32(i32 %z, i1 false)
    ret i32 %r
  }
  
  define i32 @rotr_maybe_zero(i32 %x, i32 %y) {
  ; CHECK-LABEL: rotr_maybe_zero:
  ; CHECK:       # %bb.0:
  ; CHECK-NEXT:    movl %esi, %ecx
  ; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx
  ; CHECK-NEXT:    rorl %cl, %edi
  ; CHECK-NEXT:    testl %edi, %edi
  ; CHECK-NEXT:    je .LBB15_1
  ; CHECK-NEXT:  # %bb.2: # %cond.false
  ; CHECK-NEXT:    rep bsfl %edi, %eax
  ; CHECK-NEXT:    retq
  ; CHECK-NEXT:  .LBB15_1:
  ; CHECK-NEXT:    movl $32, %eax
  ; CHECK-NEXT:    retq
    %shr = lshr i32 %x, %y
    %sub = sub i32 32, %y
    %shl = shl i32 %x, %sub
    %z = or i32 %shl, %shr
    %r = call i32 @llvm.cttz.i32(i32 %z, i1 false)
    ret i32 %r
  }

Which are generating the rotate instructions at the very least.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D149299/new/

https://reviews.llvm.org/D149299



More information about the llvm-commits mailing list