[llvm] r354234 - [X86] In FP_TO_INTHelper, when moving data from SSE register to X87 register file via the stack, use the same stack slot we use for the integer conversion.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 17 11:23:50 PST 2019


Author: ctopper
Date: Sun Feb 17 11:23:49 2019
New Revision: 354234

URL: http://llvm.org/viewvc/llvm-project?rev=354234&view=rev
Log:
[X86] In FP_TO_INTHelper, when moving data from SSE register to X87 register file via the stack, use the same stack slot we use for the integer conversion.

No need for a separate stack slot. The lifetimes don't overlap.

Also fix the MachinePointerInfo for the final load after the integer conversion to indicate it came from the stack slot.

Modified:
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
    llvm/trunk/test/CodeGen/X86/scalar-fp-to-i64.ll
    llvm/trunk/test/CodeGen/X86/vec_cast3.ll

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=354234&r1=354233&r2=354234&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Sun Feb 17 11:23:49 2019
@@ -18104,7 +18104,7 @@ X86TargetLowering::FP_TO_INTHelper(SDVal
   // We lower FP->int64 into FISTP64 followed by a load from a temporary
   // stack slot.
   MachineFunction &MF = DAG.getMachineFunction();
-  unsigned MemSize = DstTy.getSizeInBits()/8;
+  unsigned MemSize = DstTy.getStoreSize();
   int SSFI = MF.getFrameInfo().CreateStackObject(MemSize, MemSize, false);
   SDValue StackSlot = DAG.getFrameIndex(SSFI, PtrVT);
 
@@ -18160,37 +18160,33 @@ X86TargetLowering::FP_TO_INTHelper(SDVal
     Value = DAG.getSelect(DL, TheVT, Cmp, Value, Sub);
   }
 
+  MachinePointerInfo MPI = MachinePointerInfo::getFixedStack(MF, SSFI);
+
   // FIXME This causes a redundant load/store if the SSE-class value is already
   // in memory, such as if it is on the callstack.
   if (isScalarFPTypeInSSEReg(TheVT)) {
     assert(DstTy == MVT::i64 && "Invalid FP_TO_SINT to lower!");
-    Chain = DAG.getStore(Chain, DL, Value, StackSlot,
-                         MachinePointerInfo::getFixedStack(MF, SSFI));
+    Chain = DAG.getStore(Chain, DL, Value, StackSlot, MPI);
     SDVTList Tys = DAG.getVTList(TheVT, MVT::Other);
     SDValue Ops[] = { Chain, StackSlot };
 
     unsigned FLDSize = TheVT.getStoreSize();
     assert(FLDSize <= MemSize && "Stack slot not big enough");
-    MachineMemOperand *MMO =
-        MF.getMachineMemOperand(MachinePointerInfo::getFixedStack(MF, SSFI),
-                                MachineMemOperand::MOLoad, FLDSize, FLDSize);
+    MachineMemOperand *MMO = MF.getMachineMemOperand(
+        MPI, MachineMemOperand::MOLoad, FLDSize, FLDSize);
     Value = DAG.getMemIntrinsicNode(X86ISD::FLD, DL, Tys, Ops, TheVT, MMO);
     Chain = Value.getValue(1);
-    SSFI = MF.getFrameInfo().CreateStackObject(MemSize, MemSize, false);
-    StackSlot = DAG.getFrameIndex(SSFI, PtrVT);
   }
 
   // Build the FP_TO_INT*_IN_MEM
-  MachineMemOperand *MMO =
-      MF.getMachineMemOperand(MachinePointerInfo::getFixedStack(MF, SSFI),
-                              MachineMemOperand::MOStore, MemSize, MemSize);
+  MachineMemOperand *MMO = MF.getMachineMemOperand(
+      MPI, MachineMemOperand::MOStore, MemSize, MemSize);
   SDValue Ops[] = { Chain, Value, StackSlot };
   SDValue FIST = DAG.getMemIntrinsicNode(X86ISD::FP_TO_INT_IN_MEM, DL,
                                          DAG.getVTList(MVT::Other),
                                          Ops, DstTy, MMO);
 
-  SDValue Res = DAG.getLoad(Op.getValueType(), SDLoc(Op), FIST, StackSlot,
-                            MachinePointerInfo());
+  SDValue Res = DAG.getLoad(Op.getValueType(), SDLoc(Op), FIST, StackSlot, MPI);
 
   // If we need an unsigned fixup, XOR the result with adjust.
   if (UnsignedFixup)

Modified: llvm/trunk/test/CodeGen/X86/scalar-fp-to-i64.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/scalar-fp-to-i64.ll?rev=354234&r1=354233&r2=354234&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/scalar-fp-to-i64.ll (original)
+++ llvm/trunk/test/CodeGen/X86/scalar-fp-to-i64.ll Sun Feb 17 11:23:49 2019
@@ -85,14 +85,14 @@ define i64 @f_to_u64(float %a) nounwind
 ; AVX512F_32_WIN-NEXT:    pushl %ebp
 ; AVX512F_32_WIN-NEXT:    movl %esp, %ebp
 ; AVX512F_32_WIN-NEXT:    andl $-8, %esp
-; AVX512F_32_WIN-NEXT:    subl $16, %esp
+; AVX512F_32_WIN-NEXT:    subl $8, %esp
 ; AVX512F_32_WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
 ; AVX512F_32_WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
 ; AVX512F_32_WIN-NEXT:    vcmpltss %xmm1, %xmm0, %k1
 ; AVX512F_32_WIN-NEXT:    vsubss %xmm1, %xmm0, %xmm2
 ; AVX512F_32_WIN-NEXT:    vmovss %xmm0, %xmm0, %xmm2 {%k1}
-; AVX512F_32_WIN-NEXT:    vmovss %xmm2, {{[0-9]+}}(%esp)
-; AVX512F_32_WIN-NEXT:    flds {{[0-9]+}}(%esp)
+; AVX512F_32_WIN-NEXT:    vmovss %xmm2, (%esp)
+; AVX512F_32_WIN-NEXT:    flds (%esp)
 ; AVX512F_32_WIN-NEXT:    fisttpll (%esp)
 ; AVX512F_32_WIN-NEXT:    xorl %edx, %edx
 ; AVX512F_32_WIN-NEXT:    vucomiss %xmm0, %xmm1
@@ -106,14 +106,14 @@ define i64 @f_to_u64(float %a) nounwind
 ;
 ; AVX512F_32_LIN-LABEL: f_to_u64:
 ; AVX512F_32_LIN:       # %bb.0:
-; AVX512F_32_LIN-NEXT:    subl $20, %esp
+; AVX512F_32_LIN-NEXT:    subl $12, %esp
 ; AVX512F_32_LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
 ; AVX512F_32_LIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
 ; AVX512F_32_LIN-NEXT:    vcmpltss %xmm1, %xmm0, %k1
 ; AVX512F_32_LIN-NEXT:    vsubss %xmm1, %xmm0, %xmm2
 ; AVX512F_32_LIN-NEXT:    vmovss %xmm0, %xmm0, %xmm2 {%k1}
-; AVX512F_32_LIN-NEXT:    vmovss %xmm2, {{[0-9]+}}(%esp)
-; AVX512F_32_LIN-NEXT:    flds {{[0-9]+}}(%esp)
+; AVX512F_32_LIN-NEXT:    vmovss %xmm2, (%esp)
+; AVX512F_32_LIN-NEXT:    flds (%esp)
 ; AVX512F_32_LIN-NEXT:    fisttpll (%esp)
 ; AVX512F_32_LIN-NEXT:    xorl %edx, %edx
 ; AVX512F_32_LIN-NEXT:    vucomiss %xmm0, %xmm1
@@ -121,7 +121,7 @@ define i64 @f_to_u64(float %a) nounwind
 ; AVX512F_32_LIN-NEXT:    shll $31, %edx
 ; AVX512F_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
 ; AVX512F_32_LIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_LIN-NEXT:    addl $20, %esp
+; AVX512F_32_LIN-NEXT:    addl $12, %esp
 ; AVX512F_32_LIN-NEXT:    retl
 ;
 ; SSE3_32_WIN-LABEL: f_to_u64:
@@ -129,7 +129,7 @@ define i64 @f_to_u64(float %a) nounwind
 ; SSE3_32_WIN-NEXT:    pushl %ebp
 ; SSE3_32_WIN-NEXT:    movl %esp, %ebp
 ; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $16, %esp
+; SSE3_32_WIN-NEXT:    subl $8, %esp
 ; SSE3_32_WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
 ; SSE3_32_WIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
 ; SSE3_32_WIN-NEXT:    movaps %xmm0, %xmm2
@@ -141,8 +141,8 @@ define i64 @f_to_u64(float %a) nounwind
 ; SSE3_32_WIN-NEXT:    subss %xmm1, %xmm0
 ; SSE3_32_WIN-NEXT:    andnps %xmm0, %xmm3
 ; SSE3_32_WIN-NEXT:    orps %xmm3, %xmm2
-; SSE3_32_WIN-NEXT:    movss %xmm2, {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    flds {{[0-9]+}}(%esp)
+; SSE3_32_WIN-NEXT:    movss %xmm2, (%esp)
+; SSE3_32_WIN-NEXT:    flds (%esp)
 ; SSE3_32_WIN-NEXT:    fisttpll (%esp)
 ; SSE3_32_WIN-NEXT:    setbe %dl
 ; SSE3_32_WIN-NEXT:    shll $31, %edx
@@ -154,7 +154,7 @@ define i64 @f_to_u64(float %a) nounwind
 ;
 ; SSE3_32_LIN-LABEL: f_to_u64:
 ; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $20, %esp
+; SSE3_32_LIN-NEXT:    subl $12, %esp
 ; SSE3_32_LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
 ; SSE3_32_LIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
 ; SSE3_32_LIN-NEXT:    movaps %xmm0, %xmm2
@@ -166,14 +166,14 @@ define i64 @f_to_u64(float %a) nounwind
 ; SSE3_32_LIN-NEXT:    subss %xmm1, %xmm0
 ; SSE3_32_LIN-NEXT:    andnps %xmm0, %xmm3
 ; SSE3_32_LIN-NEXT:    orps %xmm3, %xmm2
-; SSE3_32_LIN-NEXT:    movss %xmm2, {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    flds {{[0-9]+}}(%esp)
+; SSE3_32_LIN-NEXT:    movss %xmm2, (%esp)
+; SSE3_32_LIN-NEXT:    flds (%esp)
 ; SSE3_32_LIN-NEXT:    fisttpll (%esp)
 ; SSE3_32_LIN-NEXT:    setbe %dl
 ; SSE3_32_LIN-NEXT:    shll $31, %edx
 ; SSE3_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
 ; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    addl $20, %esp
+; SSE3_32_LIN-NEXT:    addl $12, %esp
 ; SSE3_32_LIN-NEXT:    retl
 ;
 ; SSE3_64-LABEL: f_to_u64:
@@ -194,7 +194,7 @@ define i64 @f_to_u64(float %a) nounwind
 ; SSE2_32_WIN-NEXT:    pushl %ebp
 ; SSE2_32_WIN-NEXT:    movl %esp, %ebp
 ; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $24, %esp
+; SSE2_32_WIN-NEXT:    subl $16, %esp
 ; SSE2_32_WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
 ; SSE2_32_WIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
 ; SSE2_32_WIN-NEXT:    movaps %xmm0, %xmm2
@@ -226,7 +226,7 @@ define i64 @f_to_u64(float %a) nounwind
 ;
 ; SSE2_32_LIN-LABEL: f_to_u64:
 ; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $28, %esp
+; SSE2_32_LIN-NEXT:    subl $20, %esp
 ; SSE2_32_LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
 ; SSE2_32_LIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
 ; SSE2_32_LIN-NEXT:    movaps %xmm0, %xmm2
@@ -252,7 +252,7 @@ define i64 @f_to_u64(float %a) nounwind
 ; SSE2_32_LIN-NEXT:    shll $31, %edx
 ; SSE2_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
 ; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT:    addl $28, %esp
+; SSE2_32_LIN-NEXT:    addl $20, %esp
 ; SSE2_32_LIN-NEXT:    retl
 ;
 ; SSE2_64-LABEL: f_to_u64:
@@ -388,10 +388,10 @@ define i64 @f_to_s64(float %a) nounwind
 ; AVX512F_32_WIN-NEXT:    pushl %ebp
 ; AVX512F_32_WIN-NEXT:    movl %esp, %ebp
 ; AVX512F_32_WIN-NEXT:    andl $-8, %esp
-; AVX512F_32_WIN-NEXT:    subl $16, %esp
+; AVX512F_32_WIN-NEXT:    subl $8, %esp
 ; AVX512F_32_WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512F_32_WIN-NEXT:    vmovss %xmm0, {{[0-9]+}}(%esp)
-; AVX512F_32_WIN-NEXT:    flds {{[0-9]+}}(%esp)
+; AVX512F_32_WIN-NEXT:    vmovss %xmm0, (%esp)
+; AVX512F_32_WIN-NEXT:    flds (%esp)
 ; AVX512F_32_WIN-NEXT:    fisttpll (%esp)
 ; AVX512F_32_WIN-NEXT:    movl (%esp), %eax
 ; AVX512F_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
@@ -401,14 +401,14 @@ define i64 @f_to_s64(float %a) nounwind
 ;
 ; AVX512F_32_LIN-LABEL: f_to_s64:
 ; AVX512F_32_LIN:       # %bb.0:
-; AVX512F_32_LIN-NEXT:    subl $20, %esp
+; AVX512F_32_LIN-NEXT:    subl $12, %esp
 ; AVX512F_32_LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512F_32_LIN-NEXT:    vmovss %xmm0, {{[0-9]+}}(%esp)
-; AVX512F_32_LIN-NEXT:    flds {{[0-9]+}}(%esp)
+; AVX512F_32_LIN-NEXT:    vmovss %xmm0, (%esp)
+; AVX512F_32_LIN-NEXT:    flds (%esp)
 ; AVX512F_32_LIN-NEXT:    fisttpll (%esp)
 ; AVX512F_32_LIN-NEXT:    movl (%esp), %eax
 ; AVX512F_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_LIN-NEXT:    addl $20, %esp
+; AVX512F_32_LIN-NEXT:    addl $12, %esp
 ; AVX512F_32_LIN-NEXT:    retl
 ;
 ; SSE3_32_WIN-LABEL: f_to_s64:
@@ -416,10 +416,10 @@ define i64 @f_to_s64(float %a) nounwind
 ; SSE3_32_WIN-NEXT:    pushl %ebp
 ; SSE3_32_WIN-NEXT:    movl %esp, %ebp
 ; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $16, %esp
+; SSE3_32_WIN-NEXT:    subl $8, %esp
 ; SSE3_32_WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE3_32_WIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    flds {{[0-9]+}}(%esp)
+; SSE3_32_WIN-NEXT:    movss %xmm0, (%esp)
+; SSE3_32_WIN-NEXT:    flds (%esp)
 ; SSE3_32_WIN-NEXT:    fisttpll (%esp)
 ; SSE3_32_WIN-NEXT:    movl (%esp), %eax
 ; SSE3_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
@@ -429,14 +429,14 @@ define i64 @f_to_s64(float %a) nounwind
 ;
 ; SSE3_32_LIN-LABEL: f_to_s64:
 ; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $20, %esp
+; SSE3_32_LIN-NEXT:    subl $12, %esp
 ; SSE3_32_LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE3_32_LIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    flds {{[0-9]+}}(%esp)
+; SSE3_32_LIN-NEXT:    movss %xmm0, (%esp)
+; SSE3_32_LIN-NEXT:    flds (%esp)
 ; SSE3_32_LIN-NEXT:    fisttpll (%esp)
 ; SSE3_32_LIN-NEXT:    movl (%esp), %eax
 ; SSE3_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE3_32_LIN-NEXT:    addl $20, %esp
+; SSE3_32_LIN-NEXT:    addl $12, %esp
 ; SSE3_32_LIN-NEXT:    retl
 ;
 ; SSE3_64-LABEL: f_to_s64:
@@ -449,7 +449,7 @@ define i64 @f_to_s64(float %a) nounwind
 ; SSE2_32_WIN-NEXT:    pushl %ebp
 ; SSE2_32_WIN-NEXT:    movl %esp, %ebp
 ; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $24, %esp
+; SSE2_32_WIN-NEXT:    subl $16, %esp
 ; SSE2_32_WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
 ; SSE2_32_WIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
 ; SSE2_32_WIN-NEXT:    flds {{[0-9]+}}(%esp)
@@ -468,7 +468,7 @@ define i64 @f_to_s64(float %a) nounwind
 ;
 ; SSE2_32_LIN-LABEL: f_to_s64:
 ; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $28, %esp
+; SSE2_32_LIN-NEXT:    subl $20, %esp
 ; SSE2_32_LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
 ; SSE2_32_LIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
 ; SSE2_32_LIN-NEXT:    flds {{[0-9]+}}(%esp)
@@ -481,7 +481,7 @@ define i64 @f_to_s64(float %a) nounwind
 ; SSE2_32_LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
 ; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE2_32_LIN-NEXT:    addl $28, %esp
+; SSE2_32_LIN-NEXT:    addl $20, %esp
 ; SSE2_32_LIN-NEXT:    retl
 ;
 ; SSE2_64-LABEL: f_to_s64:
@@ -575,14 +575,14 @@ define i64 @d_to_u64(double %a) nounwind
 ; AVX512F_32_WIN-NEXT:    pushl %ebp
 ; AVX512F_32_WIN-NEXT:    movl %esp, %ebp
 ; AVX512F_32_WIN-NEXT:    andl $-8, %esp
-; AVX512F_32_WIN-NEXT:    subl $16, %esp
+; AVX512F_32_WIN-NEXT:    subl $8, %esp
 ; AVX512F_32_WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
 ; AVX512F_32_WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero
 ; AVX512F_32_WIN-NEXT:    vcmpltsd %xmm1, %xmm0, %k1
 ; AVX512F_32_WIN-NEXT:    vsubsd %xmm1, %xmm0, %xmm2
 ; AVX512F_32_WIN-NEXT:    vmovsd %xmm0, %xmm0, %xmm2 {%k1}
-; AVX512F_32_WIN-NEXT:    vmovsd %xmm2, {{[0-9]+}}(%esp)
-; AVX512F_32_WIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; AVX512F_32_WIN-NEXT:    vmovsd %xmm2, (%esp)
+; AVX512F_32_WIN-NEXT:    fldl (%esp)
 ; AVX512F_32_WIN-NEXT:    fisttpll (%esp)
 ; AVX512F_32_WIN-NEXT:    xorl %edx, %edx
 ; AVX512F_32_WIN-NEXT:    vucomisd %xmm0, %xmm1
@@ -596,14 +596,14 @@ define i64 @d_to_u64(double %a) nounwind
 ;
 ; AVX512F_32_LIN-LABEL: d_to_u64:
 ; AVX512F_32_LIN:       # %bb.0:
-; AVX512F_32_LIN-NEXT:    subl $20, %esp
+; AVX512F_32_LIN-NEXT:    subl $12, %esp
 ; AVX512F_32_LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
 ; AVX512F_32_LIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero
 ; AVX512F_32_LIN-NEXT:    vcmpltsd %xmm1, %xmm0, %k1
 ; AVX512F_32_LIN-NEXT:    vsubsd %xmm1, %xmm0, %xmm2
 ; AVX512F_32_LIN-NEXT:    vmovsd %xmm0, %xmm0, %xmm2 {%k1}
-; AVX512F_32_LIN-NEXT:    vmovsd %xmm2, {{[0-9]+}}(%esp)
-; AVX512F_32_LIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; AVX512F_32_LIN-NEXT:    vmovsd %xmm2, (%esp)
+; AVX512F_32_LIN-NEXT:    fldl (%esp)
 ; AVX512F_32_LIN-NEXT:    fisttpll (%esp)
 ; AVX512F_32_LIN-NEXT:    xorl %edx, %edx
 ; AVX512F_32_LIN-NEXT:    vucomisd %xmm0, %xmm1
@@ -611,7 +611,7 @@ define i64 @d_to_u64(double %a) nounwind
 ; AVX512F_32_LIN-NEXT:    shll $31, %edx
 ; AVX512F_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
 ; AVX512F_32_LIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_LIN-NEXT:    addl $20, %esp
+; AVX512F_32_LIN-NEXT:    addl $12, %esp
 ; AVX512F_32_LIN-NEXT:    retl
 ;
 ; SSE3_32_WIN-LABEL: d_to_u64:
@@ -619,7 +619,7 @@ define i64 @d_to_u64(double %a) nounwind
 ; SSE3_32_WIN-NEXT:    pushl %ebp
 ; SSE3_32_WIN-NEXT:    movl %esp, %ebp
 ; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $16, %esp
+; SSE3_32_WIN-NEXT:    subl $8, %esp
 ; SSE3_32_WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
 ; SSE3_32_WIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
 ; SSE3_32_WIN-NEXT:    movapd %xmm0, %xmm2
@@ -631,8 +631,8 @@ define i64 @d_to_u64(double %a) nounwind
 ; SSE3_32_WIN-NEXT:    subsd %xmm1, %xmm0
 ; SSE3_32_WIN-NEXT:    andnpd %xmm0, %xmm3
 ; SSE3_32_WIN-NEXT:    orpd %xmm3, %xmm2
-; SSE3_32_WIN-NEXT:    movsd %xmm2, {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; SSE3_32_WIN-NEXT:    movsd %xmm2, (%esp)
+; SSE3_32_WIN-NEXT:    fldl (%esp)
 ; SSE3_32_WIN-NEXT:    fisttpll (%esp)
 ; SSE3_32_WIN-NEXT:    setbe %dl
 ; SSE3_32_WIN-NEXT:    shll $31, %edx
@@ -644,7 +644,7 @@ define i64 @d_to_u64(double %a) nounwind
 ;
 ; SSE3_32_LIN-LABEL: d_to_u64:
 ; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $20, %esp
+; SSE3_32_LIN-NEXT:    subl $12, %esp
 ; SSE3_32_LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
 ; SSE3_32_LIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
 ; SSE3_32_LIN-NEXT:    movapd %xmm0, %xmm2
@@ -656,14 +656,14 @@ define i64 @d_to_u64(double %a) nounwind
 ; SSE3_32_LIN-NEXT:    subsd %xmm1, %xmm0
 ; SSE3_32_LIN-NEXT:    andnpd %xmm0, %xmm3
 ; SSE3_32_LIN-NEXT:    orpd %xmm3, %xmm2
-; SSE3_32_LIN-NEXT:    movsd %xmm2, {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; SSE3_32_LIN-NEXT:    movsd %xmm2, (%esp)
+; SSE3_32_LIN-NEXT:    fldl (%esp)
 ; SSE3_32_LIN-NEXT:    fisttpll (%esp)
 ; SSE3_32_LIN-NEXT:    setbe %dl
 ; SSE3_32_LIN-NEXT:    shll $31, %edx
 ; SSE3_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
 ; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    addl $20, %esp
+; SSE3_32_LIN-NEXT:    addl $12, %esp
 ; SSE3_32_LIN-NEXT:    retl
 ;
 ; SSE3_64-LABEL: d_to_u64:
@@ -684,7 +684,7 @@ define i64 @d_to_u64(double %a) nounwind
 ; SSE2_32_WIN-NEXT:    pushl %ebp
 ; SSE2_32_WIN-NEXT:    movl %esp, %ebp
 ; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $24, %esp
+; SSE2_32_WIN-NEXT:    subl $16, %esp
 ; SSE2_32_WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
 ; SSE2_32_WIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
 ; SSE2_32_WIN-NEXT:    movapd %xmm0, %xmm2
@@ -716,7 +716,7 @@ define i64 @d_to_u64(double %a) nounwind
 ;
 ; SSE2_32_LIN-LABEL: d_to_u64:
 ; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $28, %esp
+; SSE2_32_LIN-NEXT:    subl $20, %esp
 ; SSE2_32_LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
 ; SSE2_32_LIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
 ; SSE2_32_LIN-NEXT:    movapd %xmm0, %xmm2
@@ -742,7 +742,7 @@ define i64 @d_to_u64(double %a) nounwind
 ; SSE2_32_LIN-NEXT:    shll $31, %edx
 ; SSE2_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
 ; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT:    addl $28, %esp
+; SSE2_32_LIN-NEXT:    addl $20, %esp
 ; SSE2_32_LIN-NEXT:    retl
 ;
 ; SSE2_64-LABEL: d_to_u64:
@@ -878,10 +878,10 @@ define i64 @d_to_s64(double %a) nounwind
 ; AVX512F_32_WIN-NEXT:    pushl %ebp
 ; AVX512F_32_WIN-NEXT:    movl %esp, %ebp
 ; AVX512F_32_WIN-NEXT:    andl $-8, %esp
-; AVX512F_32_WIN-NEXT:    subl $16, %esp
+; AVX512F_32_WIN-NEXT:    subl $8, %esp
 ; AVX512F_32_WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512F_32_WIN-NEXT:    vmovsd %xmm0, {{[0-9]+}}(%esp)
-; AVX512F_32_WIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; AVX512F_32_WIN-NEXT:    vmovsd %xmm0, (%esp)
+; AVX512F_32_WIN-NEXT:    fldl (%esp)
 ; AVX512F_32_WIN-NEXT:    fisttpll (%esp)
 ; AVX512F_32_WIN-NEXT:    movl (%esp), %eax
 ; AVX512F_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
@@ -891,14 +891,14 @@ define i64 @d_to_s64(double %a) nounwind
 ;
 ; AVX512F_32_LIN-LABEL: d_to_s64:
 ; AVX512F_32_LIN:       # %bb.0:
-; AVX512F_32_LIN-NEXT:    subl $20, %esp
+; AVX512F_32_LIN-NEXT:    subl $12, %esp
 ; AVX512F_32_LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512F_32_LIN-NEXT:    vmovsd %xmm0, {{[0-9]+}}(%esp)
-; AVX512F_32_LIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; AVX512F_32_LIN-NEXT:    vmovsd %xmm0, (%esp)
+; AVX512F_32_LIN-NEXT:    fldl (%esp)
 ; AVX512F_32_LIN-NEXT:    fisttpll (%esp)
 ; AVX512F_32_LIN-NEXT:    movl (%esp), %eax
 ; AVX512F_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_LIN-NEXT:    addl $20, %esp
+; AVX512F_32_LIN-NEXT:    addl $12, %esp
 ; AVX512F_32_LIN-NEXT:    retl
 ;
 ; SSE3_32_WIN-LABEL: d_to_s64:
@@ -906,10 +906,10 @@ define i64 @d_to_s64(double %a) nounwind
 ; SSE3_32_WIN-NEXT:    pushl %ebp
 ; SSE3_32_WIN-NEXT:    movl %esp, %ebp
 ; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $16, %esp
+; SSE3_32_WIN-NEXT:    subl $8, %esp
 ; SSE3_32_WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE3_32_WIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; SSE3_32_WIN-NEXT:    movsd %xmm0, (%esp)
+; SSE3_32_WIN-NEXT:    fldl (%esp)
 ; SSE3_32_WIN-NEXT:    fisttpll (%esp)
 ; SSE3_32_WIN-NEXT:    movl (%esp), %eax
 ; SSE3_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
@@ -919,14 +919,14 @@ define i64 @d_to_s64(double %a) nounwind
 ;
 ; SSE3_32_LIN-LABEL: d_to_s64:
 ; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $20, %esp
+; SSE3_32_LIN-NEXT:    subl $12, %esp
 ; SSE3_32_LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE3_32_LIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; SSE3_32_LIN-NEXT:    movsd %xmm0, (%esp)
+; SSE3_32_LIN-NEXT:    fldl (%esp)
 ; SSE3_32_LIN-NEXT:    fisttpll (%esp)
 ; SSE3_32_LIN-NEXT:    movl (%esp), %eax
 ; SSE3_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE3_32_LIN-NEXT:    addl $20, %esp
+; SSE3_32_LIN-NEXT:    addl $12, %esp
 ; SSE3_32_LIN-NEXT:    retl
 ;
 ; SSE3_64-LABEL: d_to_s64:
@@ -939,7 +939,7 @@ define i64 @d_to_s64(double %a) nounwind
 ; SSE2_32_WIN-NEXT:    pushl %ebp
 ; SSE2_32_WIN-NEXT:    movl %esp, %ebp
 ; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $24, %esp
+; SSE2_32_WIN-NEXT:    subl $16, %esp
 ; SSE2_32_WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
 ; SSE2_32_WIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
 ; SSE2_32_WIN-NEXT:    fldl {{[0-9]+}}(%esp)
@@ -958,7 +958,7 @@ define i64 @d_to_s64(double %a) nounwind
 ;
 ; SSE2_32_LIN-LABEL: d_to_s64:
 ; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $28, %esp
+; SSE2_32_LIN-NEXT:    subl $20, %esp
 ; SSE2_32_LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
 ; SSE2_32_LIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
 ; SSE2_32_LIN-NEXT:    fldl {{[0-9]+}}(%esp)
@@ -971,7 +971,7 @@ define i64 @d_to_s64(double %a) nounwind
 ; SSE2_32_LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
 ; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE2_32_LIN-NEXT:    addl $28, %esp
+; SSE2_32_LIN-NEXT:    addl $20, %esp
 ; SSE2_32_LIN-NEXT:    retl
 ;
 ; SSE2_64-LABEL: d_to_s64:

Modified: llvm/trunk/test/CodeGen/X86/vec_cast3.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_cast3.ll?rev=354234&r1=354233&r2=354234&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vec_cast3.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vec_cast3.ll Sun Feb 17 11:23:49 2019
@@ -190,8 +190,8 @@ define <2 x i16> @cvt_v2f32_v2u16(<2 x f
 define <2 x i32> @cvt_v2f32_v2u32(<2 x float> %src) {
 ; CHECK-LABEL: cvt_v2f32_v2u32:
 ; CHECK:       ## %bb.0:
-; CHECK-NEXT:    subl $68, %esp
-; CHECK-NEXT:    .cfi_def_cfa_offset 72
+; CHECK-NEXT:    subl $36, %esp
+; CHECK-NEXT:    .cfi_def_cfa_offset 40
 ; CHECK-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]
 ; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
 ; CHECK-NEXT:    vucomiss %xmm1, %xmm2
@@ -199,8 +199,8 @@ define <2 x i32> @cvt_v2f32_v2u32(<2 x f
 ; CHECK-NEXT:  ## %bb.1:
 ; CHECK-NEXT:    vsubss %xmm1, %xmm2, %xmm2
 ; CHECK-NEXT:  LBB11_2:
-; CHECK-NEXT:    vmovss %xmm2, {{[0-9]+}}(%esp)
-; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
+; CHECK-NEXT:    vmovss %xmm2, (%esp)
+; CHECK-NEXT:    flds (%esp)
 ; CHECK-NEXT:    fisttpll (%esp)
 ; CHECK-NEXT:    setae %al
 ; CHECK-NEXT:    movzbl %al, %eax
@@ -222,7 +222,7 @@ define <2 x i32> @cvt_v2f32_v2u32(<2 x f
 ; CHECK-NEXT:    vpinsrd $1, %ecx, %xmm0, %xmm0
 ; CHECK-NEXT:    vpinsrd $2, (%esp), %xmm0, %xmm0
 ; CHECK-NEXT:    vpinsrd $3, %eax, %xmm0, %xmm0
-; CHECK-NEXT:    addl $68, %esp
+; CHECK-NEXT:    addl $36, %esp
 ; CHECK-NEXT:    retl
 ;
 ; CHECK-WIDE-LABEL: cvt_v2f32_v2u32:




More information about the llvm-commits mailing list