diff options
Diffstat (limited to 'src/abstract_hardware_model.h')
| -rw-r--r-- | src/abstract_hardware_model.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h index 948e226..f191ab9 100644 --- a/src/abstract_hardware_model.h +++ b/src/abstract_hardware_model.h @@ -1118,9 +1118,11 @@ struct simd_set_info { unsigned thread_ids[MAX_WARP_SIZE]; // Original thread IDs for each lane (max set_width used) unsigned num_active_threads; // popcount of set_active_mask bool valid; // Whether this set has any active threads + const inst_t *source_inst; // Pointer to static decoded instruction (for MIMD) simd_set_info() - : set_id(0), warp_id(0), num_active_threads(0), valid(false) { + : set_id(0), warp_id(0), num_active_threads(0), valid(false), + source_inst(NULL) { set_active_mask.reset(); active_mask_in_warp.reset(); for (unsigned i = 0; i < MAX_WARP_SIZE; i++) thread_ids[i] = 0; @@ -1186,6 +1188,10 @@ class warp_inst_t : public inst_t { } unsigned num_active_simd_sets() const; bool has_simd_sets() const { return !m_simd_sets.empty(); } + void merge_simd_sets(const std::vector<simd_set_info> &other_sets); + void set_source_inst_on_sets(const inst_t *src); + static bool simd_sets_overlap(const std::vector<simd_set_info> &a, + const std::vector<simd_set_info> &b); const active_mask_t &get_active_mask() const { return m_warp_active_mask; } void completed(unsigned long long cycle) |
