[PATCH] D87188: [InstCombine] Canonicalize SPF to abs intrinc

Dave Green via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 18 09:24:48 PST 2020


dmgreen added a comment.

Yeah. The reproducer seems to work OK with a patch something like this:

  diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
  index 35c21a0..c517286 100644                                                                     
  --- a/llvm/lib/Analysis/InstructionSimplify.cpp                                                   
  +++ b/llvm/lib/Analysis/InstructionSimplify.cpp                                                   
  @@ -4020,11 +4020,11 @@ static Value *simplifySelectWithICmpCond(Value *CondVal, Value *TrueVal,  
                                                                                                    
       // X == 0 ? abs(X) : -abs(X) --> -abs(X)                                                     
       // X == 0 ? -abs(X) : abs(X) --> abs(X)                                                      
  -    if (match(TrueVal, m_Intrinsic<Intrinsic::abs>(m_Value(X))) &&                               
  -        match(FalseVal, m_Neg(m_Intrinsic<Intrinsic::abs>(m_Specific(X)))))                      
  +    if (match(TrueVal, m_Intrinsic<Intrinsic::abs>(m_Specific(CmpLHS))) &&                       
  +        match(FalseVal, m_Neg(m_Intrinsic<Intrinsic::abs>(m_Specific(CmpLHS)))))                 
         return FalseVal;                                                                           
  -    if (match(TrueVal, m_Neg(m_Intrinsic<Intrinsic::abs>(m_Value(X)))) &&                        
  -        match(FalseVal, m_Intrinsic<Intrinsic::abs>(m_Specific(X))))                             
  +    if (match(TrueVal, m_Neg(m_Intrinsic<Intrinsic::abs>(m_Specific(CmpLHS)))) &&                
  +        match(FalseVal, m_Intrinsic<Intrinsic::abs>(m_Specific(CmpLHS))))                        
         return FalseVal;                                                                           
     }                                                                                              
                                                                                                    

(I must admit, was fully expecting this to be something wrong in the AArch64 backend. I'll leave that fix to you if you are happy to add tests and whatnot.)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D87188



More information about the llvm-commits mailing list