diff options
| author | Roman Lebedev <lebedev.ri@gmail.com> | 2019-04-10 18:26:42 +0000 |
|---|---|---|
| committer | Roman Lebedev <lebedev.ri@gmail.com> | 2019-04-10 18:26:42 +0000 |
| commit | dc67659ba59e1165913d8654a172526f5fa61911 (patch) | |
| tree | 738fc79dc9587032686aaeae8a18a60e6cb19146 /llvm/lib/Target | |
| parent | 5d9f656bb75ed4d0b9eb628115edd785fc61473b (diff) | |
| download | bcm5719-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.td | 11 |
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]>; |

