]> granicus.if.org Git - llvm/commitdiff
[X86] X86ScheduleBdVer2: use !listsplat operator to cleanup loadres calculation
authorRoman Lebedev <lebedev.ri@gmail.com>
Wed, 10 Apr 2019 18:26:42 +0000 (18:26 +0000)
committerRoman Lebedev <lebedev.ri@gmail.com>
Wed, 10 Apr 2019 18:26:42 +0000 (18:26 +0000)
The problem is that one can't concatenate an empty list
(implied all-ones) with non-empty list here. The result
will be the non-empty list, and it won't match the length
of the ExePorts list.

The problems begin when LoadRes != 1 here,
which is the case in PdWriteResYMMPair,
and more importantly i think it will be the case for PdWriteResExPair.

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

lib/Target/X86/X86ScheduleBdVer2.td

index 36f4ad37e6edded83b5544ad8ee5fb1dcfc2e983..3a15b0c9ea1bb4ff96222d0bf89192fddeb07618 100644 (file)
@@ -208,7 +208,10 @@ multiclass __pdWriteResPair<X86FoldableSchedWrite SchedRW,
                     !add(Lat, LoadLat),
                     !if(!and(!empty(Res), !eq(LoadRes, 1)),
                       [],
-                      !listconcat([LoadRes], Res)),
+                      !listconcat([LoadRes],
+                        !if(!empty(Res),
+                          !listsplat(1, !size(ExePorts)),
+                          Res))),
                     !add(UOps, LoadUOps)>;
 }
 
@@ -230,7 +233,7 @@ multiclass PdWriteResXMMPair<X86FoldableSchedWrite SchedRW,
 
 multiclass PdWriteResYMMPair<X86FoldableSchedWrite SchedRW,
                              list<ProcResourceKind> ExePorts, int Lat,
-                             list<int> Res, int UOps = 2,
+                             list<int> Res = [], int UOps = 2,
                              int LoadUOps = 0> {
   defm : __pdWriteResPair<SchedRW, ExePorts, Lat, Res, UOps,
                            /*LoadLat*/5, /*LoadRes*/2, LoadUOps>;
@@ -723,7 +726,7 @@ defm : X86WriteResPairUnsupported<WriteFMul64Z>;
 
 defm : PdWriteResXMMPair<WriteFMA,          [PdFPU, PdFPFMA], 5>;
 defm : PdWriteResXMMPair<WriteFMAX,         [PdFPU, PdFPFMA], 5>;
-defm : PdWriteResYMMPair<WriteFMAY,         [PdFPU, PdFPFMA], 5,   [1, 1]>;
+defm : PdWriteResYMMPair<WriteFMAY,         [PdFPU, PdFPFMA], 5>;
 defm : X86WriteResPairUnsupported<WriteFMAZ>;
 
 
@@ -1037,7 +1040,7 @@ defm : PdWriteResXMMPair<WritePHMINPOS,      [PdFPU0,  PdFPMAL], 4, [], 2>;
 
 defm : PdWriteResXMMPair<WriteShuffle,       [PdFPU01, PdFPMAL], 2>;
 defm : PdWriteResXMMPair<WriteShuffleX,      [PdFPU01, PdFPMAL], 2>;
-defm : PdWriteResYMMPair<WriteShuffleY,      [PdFPU01, PdFPMAL], 2,   [1, 1]>;
+defm : PdWriteResYMMPair<WriteShuffleY,      [PdFPU01, PdFPMAL], 2>;
 defm : X86WriteResPairUnsupported<WriteShuffleZ>;
 
 defm : PdWriteResXMMPair<WriteVarShuffle,    [PdFPU01, PdFPMAL], 3, [1, 4]>;