summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-05-31 20:27:46 +0000
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-05-31 20:27:46 +0000
commit403701140476981529a0ef0670910922804acb20 (patch)
tree4dbb3dc88d69bd73a41b0cc738da2f41a88748cd /llvm
parent739174c4be36d13a22bad1187e444f4a804db407 (diff)
downloadbcm5719-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.cpp16
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(
OpenPOWER on IntegriCloud