[PATCH] D101840: [InstSimplify] ctlz(x) -> 0 if x is known negative number

Craig Topper via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 4 11:43:23 PDT 2021


craig.topper added a comment.

isKnownNegative is just a wrapper around computeKnownBits. So if we are to do this in InstSimplify we might as well take the whole code that was already flagged in InstCombineCalls that can already do this and more.

  KnownBits Known = IC.computeKnownBits(Op0, 0, &II);                                                                                                                                                  
                                                                                                                                                                                                       
  // Create a mask for bits above (ctlz) or below (cttz) the first known one.                                                                                                                          
  unsigned PossibleZeros = IsTZ ? Known.countMaxTrailingZeros()                                                                                                                                        
                                : Known.countMaxLeadingZeros();                                                                                                                                        
  unsigned DefiniteZeros = IsTZ ? Known.countMinTrailingZeros()                                                                                                                                        
                                : Known.countMinLeadingZeros();                                                                                                                                        
                                                                                                                                                                                                       
  // If all bits above (ctlz) or below (cttz) the first known one are known                                                                                                                            
  // zero, this value is constant.                                                                                                                                                                     
  // FIXME: This should be in InstSimplify because we're replacing an                                                                                                                                  
  // instruction with a constant.                                                                                                                                                                      
  if (PossibleZeros == DefiniteZeros) {                                                                                                                                                                
    auto *C = ConstantInt::get(Op0->getType(), DefiniteZeros);                                                                                                                                         
    return IC.replaceInstUsesWith(II, C);                                                                                                                                                              
  }    


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

https://reviews.llvm.org/D101840



More information about the llvm-commits mailing list