summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorRoman Lebedev <lebedev.ri@gmail.com>2019-04-10 18:26:42 +0000
committerRoman Lebedev <lebedev.ri@gmail.com>2019-04-10 18:26:42 +0000
commitdc67659ba59e1165913d8654a172526f5fa61911 (patch)
tree738fc79dc9587032686aaeae8a18a60e6cb19146 /llvm/lib/Target
parent5d9f656bb75ed4d0b9eb628115edd785fc61473b (diff)
downloadbcm5719-llvm-dc67659ba59e1165913d8654a172526f5fa61911.tar.gz
bcm5719-llvm-dc67659ba59e1165913d8654a172526f5fa61911.zip
[X86] X86ScheduleBdVer2: use !listsplat operator to cleanup loadres calculation
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. llvm-svn: 358118
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/X86/X86ScheduleBdVer2.td11
1 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/Target/X86/X86ScheduleBdVer2.td b/llvm/lib/Target/X86/X86ScheduleBdVer2.td
index 36f4ad37e6e..3a15b0c9ea1 100644
--- a/llvm/lib/Target/X86/X86ScheduleBdVer2.td
+++ b/llvm/lib/Target/X86/X86ScheduleBdVer2.td
@@ -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]>;
OpenPOWER on IntegriCloud