[llvm] r328928 - [X86] Allow i16 subtracts to be promoted if the load is on the LHS and its not being stored.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sat Mar 31 23:29:25 PDT 2018


Author: ctopper
Date: Sat Mar 31 23:29:25 2018
New Revision: 328928

URL: http://llvm.org/viewvc/llvm-project?rev=328928&view=rev
Log:
[X86] Allow i16 subtracts to be promoted if the load is on the LHS and its not being stored.

Modified:
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
    llvm/trunk/test/CodeGen/X86/promote-i16.ll

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=328928&r1=328927&r2=328928&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Sat Mar 31 23:29:25 2018
@@ -38742,12 +38742,12 @@ bool X86TargetLowering::IsDesirableToPro
   case ISD::SUB: {
     SDValue N0 = Op.getOperand(0);
     SDValue N1 = Op.getOperand(1);
-    if (!Commute && MayFoldLoad(N1))
-      return false;
     // Avoid disabling potential load folding opportunities.
-    if (MayFoldLoad(N0) && (!isa<ConstantSDNode>(N1) || MayFoldIntoStore(Op)))
+    if (MayFoldLoad(N1) &&
+        (!Commute || !isa<ConstantSDNode>(N0) || MayFoldIntoStore(Op)))
       return false;
-    if (MayFoldLoad(N1) && (!isa<ConstantSDNode>(N0) || MayFoldIntoStore(Op)))
+    if (MayFoldLoad(N0) &&
+        ((Commute && !isa<ConstantSDNode>(N1)) || MayFoldIntoStore(Op)))
       return false;
   }
   }

Modified: llvm/trunk/test/CodeGen/X86/promote-i16.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/promote-i16.ll?rev=328928&r1=328927&r2=328928&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/promote-i16.ll (original)
+++ llvm/trunk/test/CodeGen/X86/promote-i16.ll Sat Mar 31 23:29:25 2018
@@ -49,7 +49,8 @@ define signext i16 @baz(i16* %x, i16 sig
 ; X64-LABEL: baz:
 ; X64:       # %bb.0: # %entry
 ; X64-NEXT:    movzwl (%rdi), %eax
-; X64-NEXT:    subw %si, %ax
+; X64-NEXT:    subl %esi, %eax
+; X64-NEXT:    # kill: def $ax killed $ax killed $eax
 ; X64-NEXT:    retq
 entry:
   %0 = load i16, i16* %x




More information about the llvm-commits mailing list