]> granicus.if.org Git - llvm/commitdiff
[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 edc182d53f277307b314a38a1637190f16de465d..98390cea49d19ffe53545d739ece039b12cac867 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 53008a3b6ac00240637b4131d0cc5a2a2a253560..d2a0412f528c9bb8f6fca13d61dfe859005a8095 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 e5fa02852727396af97af58f20903283cace363f..b9ec7c9cbe8a69a84189be9644a12f1dbb4b059a 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 0b4be793bdb17b87ee1eb53b6529c4a6370f4746..aa3a1736c27c2d17d570ffed4c6596aede17c55e 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 a306d2d7a6b00aff079e75d60e552451e0214704..c0700d19d01f00a1af0106780004538a666df234 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 e06ac58f95fed0e9832c64a695fbd5fd4f7d1bb9..c475e1692fbe70b743dc45da10fe6fc4460ae596 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 3a4c41a3b77b71765f373ffddf69d7307869f411..c2fac8cf8ec1da1cf34b1ffe49294c59fe22e545 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 2a551e64e3a621fe36591cadcdd94be04dfe68a0..a12ca5acf4a3c82da8f3f166d9ea90a0a58b0eff 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 2a694a8fbdef3ee73ab0f80f750aba085ffbaaaf..cc4d6ed0b430b8e8d18da9b9210486aedcb4d904 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 feb42960b98345ad95fa618dcf4b99e712a67758..3b16d35aa0bc5a4d139a50d4604c3a7f30c59d2d 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 b3985b4127bc445fb26d452c2c64e16b8cebb97f..de54d76c45a6b0ed84b85c981ac9bcc9145887ff 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 1b966a1c84613398e428ac35dec95d14948c2558..18112741aa98c5b807cb66e4ef7e4b5f729fc5a3 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 6f108af4fc6166535b698abf8944ec0aa3d344fd..9b2d0199bf5c0782dfc4d6c031003ce459f73c4c 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 61165e6b62fde2c32498b62ead866abedfe67759..f6f7e215534d045d02f5b80d3d17a361b2905220 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 8dcdb400c64ae6ed7ba4ad458e4e40da7e212e73..f93ef08a3c833ed8c3a32c10dd3703699103649f 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 23d5cf37ba5e4a45ed249b5f131df686230c345b..4f286b0918c389af3afa0038e744228451818f4d 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 574194bef4eb1e27076fe0922aea13dfb663f238..f62c1fcd420845d191fa6fbcf101c8a53c85073c 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 2329735e73eddb2705adee9d2764c873e16465df..3200671e8f829cd11eff1c7ca42a005dd1db31ae 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 ee951c83796700534ff117f83f30f4cc298a37b5..e9a93998a973a71d47c377bda7c1c9dfed1cc308 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 e0066f9ed41a042c8b176baed52487df17e489fc..d861e9d3857115395442cfd9f297713eedc1baa5 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)