diff options
| author | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2018-05-31 20:27:46 +0000 |
|---|---|---|
| committer | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2018-05-31 20:27:46 +0000 |
| commit | 403701140476981529a0ef0670910922804acb20 (patch) | |
| tree | 4dbb3dc88d69bd73a41b0cc738da2f41a88748cd /llvm | |
| parent | 739174c4be36d13a22bad1187e444f4a804db407 (diff) | |
| download | bcm5719-llvm-403701140476981529a0ef0670910922804acb20.tar.gz bcm5719-llvm-403701140476981529a0ef0670910922804acb20.zip | |
[llvm-mca] Fixed a problem caused by an invalid use of a processor resource mask in the Scheduler.
The lambda functions used by method ResourceManager::mustIssueImmediately() was
incorrectly truncating masks of buffered processor resources to 32-bit quantities.
The invalid mask values were then used to access a map of processor
resource descriptors.
Fixes PR37643.
llvm-svn: 333692
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/tools/llvm-mca/Scheduler.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/llvm/tools/llvm-mca/Scheduler.cpp b/llvm/tools/llvm-mca/Scheduler.cpp index 56dc7463f7b..2782bac187f 100644 --- a/llvm/tools/llvm-mca/Scheduler.cpp +++ b/llvm/tools/llvm-mca/Scheduler.cpp @@ -164,18 +164,16 @@ bool ResourceManager::canBeIssued(const InstrDesc &Desc) const { bool ResourceManager::mustIssueImmediately(const InstrDesc &Desc) { if (!canBeIssued(Desc)) return false; - bool AllInOrderResources = std::all_of( - Desc.Buffers.begin(), Desc.Buffers.end(), [&](const unsigned BufferMask) { - const ResourceState &Resource = *Resources[BufferMask]; - return Resource.isInOrder() || Resource.isADispatchHazard(); - }); + bool AllInOrderResources = all_of(Desc.Buffers, [&](uint64_t BufferMask) { + const ResourceState &Resource = *Resources[BufferMask]; + return Resource.isInOrder() || Resource.isADispatchHazard(); + }); if (!AllInOrderResources) return false; - return std::any_of(Desc.Buffers.begin(), Desc.Buffers.end(), - [&](const unsigned BufferMask) { - return Resources[BufferMask]->isADispatchHazard(); - }); + return any_of(Desc.Buffers, [&](uint64_t BufferMask) { + return Resources[BufferMask]->isADispatchHazard(); + }); } void ResourceManager::issueInstruction( |

