diff --git a/llvm/tools/llvm-mca/Scheduler.h b/llvm/tools/llvm-mca/Scheduler.h
index 69bd2bf..604b697 100644
--- a/llvm/tools/llvm-mca/Scheduler.h
+++ b/llvm/tools/llvm-mca/Scheduler.h
@@ -356,27 +356,17 @@
 public:
   ResourceManager(const llvm::MCSchedModel &SM) { initialize(SM); }
 
+  // Returns RS_BUFFER_AVAILABLE if buffered resources are not reserved, and if
+  // there are enough available slots in the buffers.
   ResourceStateEvent
-  canBeDispatched(const llvm::ArrayRef<uint64_t> Buffers) const {
-    ResourceStateEvent Result = ResourceStateEvent::RS_BUFFER_AVAILABLE;
-    for (uint64_t Buffer : Buffers) {
-      Result = isBufferAvailable(Buffer);
-      if (Result != ResourceStateEvent::RS_BUFFER_AVAILABLE)
-        break;
-    }
+  canBeDispatched(const llvm::ArrayRef<uint64_t> Buffers) const;
 
-    return Result;
-  }
+  // Consume a slot in every buffered resource from array 'Buffers'. Resource
+  // units that are dispatch hazards (i.e. BufferSize=0) are marked as reserved.
+  void reserveBuffers(const llvm::ArrayRef<uint64_t> Buffers);
 
-  void reserveBuffers(const llvm::ArrayRef<uint64_t> Buffers) {
-    for (const uint64_t R : Buffers)
-      reserveBuffer(R);
-  }
-
-  void releaseBuffers(const llvm::ArrayRef<uint64_t> Buffers) {
-    for (const uint64_t R : Buffers)
-      releaseBuffer(R);
-  }
+  // Release buffer entries previously allocated by method reserveBuffers.
+  void releaseBuffers(const llvm::ArrayRef<uint64_t> Buffers);
 
   void reserveResource(uint64_t ResourceID) {
     ResourceState &Resource = *Resources[ResourceID];
@@ -479,7 +469,7 @@
   void issue();
 
   /// Issue an instruction without updating the ready queue.
-  void issueInstruction(Instruction *IS, unsigned InstrIndex);
+  void issueInstruction(Instruction &IS, unsigned InstrIndex);
   void updatePendingQueue();
   void updateIssuedQueue();
 
@@ -529,7 +519,7 @@
   };
 
   Event canBeDispatched(const InstrDesc &Desc) const;
-  Instruction *scheduleInstruction(unsigned Idx, Instruction *MCIS);
+  void scheduleInstruction(unsigned Idx, Instruction &MCIS);
 
   void cycleEvent(unsigned Cycle);
 
@@ -545,7 +535,6 @@
   void dump() const;
 #endif
 };
-
 } // Namespace mca
 
 #endif
