OSDN Git Service

[X86] Fix MayLoad/HasSideEffect flag for (V)MOVLPSrm instructions.
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Wed, 11 Jul 2018 15:27:50 +0000 (15:27 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Wed, 11 Jul 2018 15:27:50 +0000 (15:27 +0000)
Before revision 336728, the "mayLoad" flag for instruction (V)MOVLPSrm was
inferred directly from the "default" pattern associated with the instruction
definition.

r336728 removed special node X86Movlps, and all the patterns associated to it.
Now instruction (V)MOVLPSrm doesn't have a pattern associated to it, and the
'mayLoad/hasSideEffects' flags are left unset.

When the instruction info is emitted by tablegen, method
CodeGenDAGPatterns::InferInstructionFlags() sees that (V)MOVLPSrm doesn't have a
pattern, and flags are undefined. So, it conservatively sets the
"hasSideEffects" flag for it.

As a consequence, we were losing the 'mayLoad' flag, and we were gaining a
'hasSideEffect' flag in its place.
This patch fixes the issue (originally reported by Michael Holmen).

The mca tests show the differences in the instruction info flags.  Instructions
that were affected by this problem were: MOVLPSrm/VMOVLPSrm/VMOVLPSZ128rm.

Differential Revision: https://reviews.llvm.org/D49182

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@336818 91177308-0d34-0410-b5e6-96231b3b80d8

20 files changed:
lib/Target/X86/X86InstrAVX512.td
lib/Target/X86/X86InstrSSE.td
test/tools/llvm-mca/X86/Atom/resources-sse1.s
test/tools/llvm-mca/X86/Broadwell/resources-avx1.s
test/tools/llvm-mca/X86/Broadwell/resources-sse1.s
test/tools/llvm-mca/X86/BtVer2/resources-avx1.s
test/tools/llvm-mca/X86/BtVer2/resources-sse1.s
test/tools/llvm-mca/X86/Generic/resources-avx1.s
test/tools/llvm-mca/X86/Generic/resources-sse1.s
test/tools/llvm-mca/X86/Haswell/resources-avx1.s
test/tools/llvm-mca/X86/Haswell/resources-sse1.s
test/tools/llvm-mca/X86/SLM/resources-sse1.s
test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s
test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s
test/tools/llvm-mca/X86/SkylakeClient/resources-avx1.s
test/tools/llvm-mca/X86/SkylakeClient/resources-sse1.s
test/tools/llvm-mca/X86/SkylakeServer/resources-avx1.s
test/tools/llvm-mca/X86/SkylakeServer/resources-sse1.s
test/tools/llvm-mca/X86/Znver1/resources-avx1.s
test/tools/llvm-mca/X86/Znver1/resources-sse1.s

index edc182d..98390ce 100644 (file)
@@ -6385,7 +6385,7 @@ def VMOVHLPSZrr : AVX512PSI<0x12, MRMSrcReg, (outs VR128X:$dst),
 multiclass avx512_mov_hilo_packed<bits<8> opc, string OpcodeStr,
                                   SDPatternOperator OpNode,
                                   X86VectorVTInfo _> {
-  let ExeDomain = _.ExeDomain in
+  let hasSideEffects = 0, mayLoad = 1, ExeDomain = _.ExeDomain in
   def rm : AVX512<opc, MRMSrcMem, (outs _.RC:$dst),
                   (ins _.RC:$src1, f64mem:$src2),
                   !strconcat(OpcodeStr,
index 53008a3..d2a0412 100644 (file)
@@ -630,6 +630,7 @@ let Predicates = [UseSSE1] in {
 
 multiclass sse12_mov_hilo_packed_base<bits<8>opc, SDNode psnode, SDNode pdnode,
                                       string base_opc, string asm_opr> {
+  let hasSideEffects = 0, mayLoad = 1 in
   def PSrm : PI<opc, MRMSrcMem,
          (outs VR128:$dst), (ins VR128:$src1, f64mem:$src2),
          !strconcat(base_opc, "s", asm_opr),
@@ -639,6 +640,7 @@ multiclass sse12_mov_hilo_packed_base<bits<8>opc, SDNode psnode, SDNode pdnode,
               SSEPackedSingle>, PS,
      Sched<[SchedWriteFShuffle.XMM.Folded, ReadAfterLd]>;
 
+  let hasSideEffects = 0, mayLoad = 1 in
   def PDrm : PI<opc, MRMSrcMem,
          (outs VR128:$dst), (ins VR128:$src1, f64mem:$src2),
          !strconcat(base_opc, "d", asm_opr),
index e5fa028..b9ec7c9 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  1      1     1.00    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  1      1     1.00                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      3     3.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  1      1     1.00           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  1      1     1.00    *      *      U     movntq %mm0, (%rax)
index 0b4be79..aa3a173 100644 (file)
@@ -1281,7 +1281,7 @@ vzeroupper
 # CHECK-NEXT:  2      1     1.00           *            vmovlpd        %xmm0, (%rax)
 # CHECK-NEXT:  2      6     1.00    *                   vmovlpd        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  2      1     1.00           *            vmovlps        %xmm0, (%rax)
-# CHECK-NEXT:  2      6     1.00                  U     vmovlps        (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                   vmovlps        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      3     1.00                        vmovmskpd      %xmm0, %ecx
 # CHECK-NEXT:  1      3     1.00                        vmovmskpd      %ymm0, %ecx
 # CHECK-NEXT:  1      3     1.00                        vmovmskps      %xmm0, %ecx
index a306d2d..c0700d1 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  2      1     1.00           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  2      6     1.00    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  2      1     1.00           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  2      6     1.00                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      3     1.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  2      1     1.00           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  2      1     1.00    *      *      U     movntq %mm0, (%rax)
index e06ac58..c475e16 100644 (file)
@@ -1281,7 +1281,7 @@ vzeroupper
 # CHECK-NEXT:  1      2     1.00           *            vmovlpd        %xmm0, (%rax)
 # CHECK-NEXT:  1      6     1.00    *                   vmovlpd        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      2     1.00           *            vmovlps        %xmm0, (%rax)
-# CHECK-NEXT:  1      6     1.00                  U     vmovlps        (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                   vmovlps        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      3     1.00                        vmovmskpd      %xmm0, %ecx
 # CHECK-NEXT:  1      3     1.00                        vmovmskpd      %ymm0, %ecx
 # CHECK-NEXT:  1      3     1.00                        vmovmskps      %xmm0, %ecx
index 3a4c41a..c2fac8c 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  1      2     1.00           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  1      6     1.00    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  1      2     1.00           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  1      6     1.00                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  1      6     1.00    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      3     1.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  1      3     1.00           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  1      2     1.00    *      *      U     movntq %mm0, (%rax)
index 2a551e6..a12ca5a 100644 (file)
@@ -1281,7 +1281,7 @@ vzeroupper
 # CHECK-NEXT:  1      1     1.00           *            vmovlpd        %xmm0, (%rax)
 # CHECK-NEXT:  2      7     1.00    *                   vmovlpd        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      1     1.00           *            vmovlps        %xmm0, (%rax)
-# CHECK-NEXT:  2      7     1.00                  U     vmovlps        (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                   vmovlps        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        vmovmskpd      %xmm0, %ecx
 # CHECK-NEXT:  1      2     1.00                        vmovmskpd      %ymm0, %ecx
 # CHECK-NEXT:  1      2     1.00                        vmovmskps      %xmm0, %ecx
index 2a694a8..cc4d6ed 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  2      7     1.00    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  2      7     1.00                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  2      7     1.00    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      2     1.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  1      1     1.00           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  1      1     1.00    *      *      U     movntq %mm0, (%rax)
index feb4296..3b16d35 100644 (file)
@@ -1281,7 +1281,7 @@ vzeroupper
 # CHECK-NEXT:  2      1     1.00           *            vmovlpd        %xmm0, (%rax)
 # CHECK-NEXT:  2      6     1.00    *                   vmovlpd        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  2      1     1.00           *            vmovlps        %xmm0, (%rax)
-# CHECK-NEXT:  2      6     1.00                  U     vmovlps        (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                   vmovlps        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      3     1.00                        vmovmskpd      %xmm0, %ecx
 # CHECK-NEXT:  1      3     1.00                        vmovmskpd      %ymm0, %ecx
 # CHECK-NEXT:  1      3     1.00                        vmovmskps      %xmm0, %ecx
index b3985b4..de54d76 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  2      1     1.00           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  2      6     1.00    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  2      1     1.00           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  2      6     1.00                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      3     1.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  2      1     1.00           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  2      1     1.00    *      *      U     movntq %mm0, (%rax)
index 1b966a1..1811274 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  1      4     1.00    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  1      4     1.00                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      4     1.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  1      1     1.00           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  1      1     1.00    *      *      U     movntq %mm0, (%rax)
index 6f108af..9b2d019 100644 (file)
@@ -1281,7 +1281,7 @@ vzeroupper
 # CHECK-NEXT:  1      1     1.00           *            vmovlpd        %xmm0, (%rax)
 # CHECK-NEXT:  2      7     1.00    *                   vmovlpd        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      1     1.00           *            vmovlps        %xmm0, (%rax)
-# CHECK-NEXT:  2      7     1.00                  U     vmovlps        (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                   vmovlps        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        vmovmskpd      %xmm0, %ecx
 # CHECK-NEXT:  1      2     1.00                        vmovmskpd      %ymm0, %ecx
 # CHECK-NEXT:  1      2     1.00                        vmovmskps      %xmm0, %ecx
index 61165e6..f6f7e21 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  2      7     1.00    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  2      7     1.00                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  2      7     1.00    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      2     1.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  1      1     1.00           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  1      1     1.00    *      *      U     movntq %mm0, (%rax)
index 8dcdb40..f93ef08 100644 (file)
@@ -1281,7 +1281,7 @@ vzeroupper
 # CHECK-NEXT:  2      1     1.00           *            vmovlpd        %xmm0, (%rax)
 # CHECK-NEXT:  2      6     1.00    *                   vmovlpd        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  2      1     1.00           *            vmovlps        %xmm0, (%rax)
-# CHECK-NEXT:  2      6     1.00                  U     vmovlps        (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                   vmovlps        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        vmovmskpd      %xmm0, %ecx
 # CHECK-NEXT:  1      2     1.00                        vmovmskpd      %ymm0, %ecx
 # CHECK-NEXT:  1      2     1.00                        vmovmskps      %xmm0, %ecx
index 23d5cf3..4f286b0 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  2      1     1.00           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  2      6     1.00    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  2      1     1.00           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  2      6     1.00                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      2     1.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  2      1     1.00           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  2      1     1.00    *      *      U     movntq %mm0, (%rax)
index 574194b..f62c1fc 100644 (file)
@@ -1281,7 +1281,7 @@ vzeroupper
 # CHECK-NEXT:  2      1     1.00           *            vmovlpd        %xmm0, (%rax)
 # CHECK-NEXT:  2      6     1.00    *                   vmovlpd        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  2      1     1.00           *            vmovlps        %xmm0, (%rax)
-# CHECK-NEXT:  2      6     1.00                  U     vmovlps        (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                   vmovlps        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        vmovmskpd      %xmm0, %ecx
 # CHECK-NEXT:  1      2     1.00                        vmovmskpd      %ymm0, %ecx
 # CHECK-NEXT:  1      2     1.00                        vmovmskps      %xmm0, %ecx
index 2329735..3200671 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  2      1     1.00           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  2      6     1.00    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  2      1     1.00           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  2      6     1.00                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      2     1.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  2      1     1.00           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  2      1     1.00    *      *      U     movntq %mm0, (%rax)
index ee951c8..e9a9399 100644 (file)
@@ -1281,7 +1281,7 @@ vzeroupper
 # CHECK-NEXT:  1      1     0.50           *            vmovlpd        %xmm0, (%rax)
 # CHECK-NEXT:  1      8     0.50    *                   vmovlpd        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      1     0.50           *            vmovlps        %xmm0, (%rax)
-# CHECK-NEXT:  1      8     0.50                  U     vmovlps        (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                   vmovlps        (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  1      1     1.00                        vmovmskpd      %xmm0, %ecx
 # CHECK-NEXT:  1      1     1.00                        vmovmskpd      %ymm0, %ecx
 # CHECK-NEXT:  1      1     1.00                        vmovmskps      %xmm0, %ecx
index e0066f9..d861e9d 100644 (file)
@@ -248,7 +248,7 @@ xorps       (%rax), %xmm2
 # CHECK-NEXT:  1      1     0.50           *            movhps %xmm0, (%rax)
 # CHECK-NEXT:  1      8     0.50    *                   movhps (%rax), %xmm2
 # CHECK-NEXT:  1      1     0.50           *            movlps %xmm0, (%rax)
-# CHECK-NEXT:  1      8     0.50                  U     movlps (%rax), %xmm2
+# CHECK-NEXT:  1      8     0.50    *                   movlps (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        movmskps       %xmm0, %ecx
 # CHECK-NEXT:  1      1     0.50           *            movntps        %xmm0, (%rax)
 # CHECK-NEXT:  1      1     0.50    *      *      U     movntq %mm0, (%rax)