summaryrefslogtreecommitdiff
path: root/src/abstract_hardware_model.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/abstract_hardware_model.h')
-rw-r--r--src/abstract_hardware_model.h8
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)