diff --git a/src/cpp/preprocessor/aie2ps/aie2ps_preprocessor.h b/src/cpp/preprocessor/aie2ps/aie2ps_preprocessor.h index 8a0ccadfa..63639aebe 100644 --- a/src/cpp/preprocessor/aie2ps/aie2ps_preprocessor.h +++ b/src/cpp/preprocessor/aie2ps/aie2ps_preprocessor.h @@ -141,12 +141,14 @@ class aie2ps_preprocessor: public preprocessor auto& coldata = parser->get_col_asmdata(col); for (auto label : parser->getLabelsforcol(col)) { + log_debug() << "[" << col << "]: Processing label: " << label << " Relative page index: " << relative_page_index<< std::endl; // create state std::vector> data = coldata.get_label_asmdata(label); std::shared_ptr state = create_assembler_state(m_isa, data, scratchpad, label_page_index, ctrlpkt_id_map, optimize, true); // create pages pager(PAGE_SIZE).pagify(*state, col, pages, relative_page_index); label_page_index[get_pagelabel(label)] = relative_page_index; + log_debug() << "num pages: " << pages.size() - relative_page_index << std::endl; relative_page_index = static_cast(pages.size()); } diff --git a/src/cpp/preprocessor/asm/asm_parser.cpp b/src/cpp/preprocessor/asm/asm_parser.cpp index 48a037e9e..0d08a0761 100644 --- a/src/cpp/preprocessor/asm/asm_parser.cpp +++ b/src/cpp/preprocessor/asm/asm_parser.cpp @@ -57,9 +57,9 @@ insert_col_asmdata(std::shared_ptr data) if (m_col.find(m_current_col) == m_col.end()) m_col[m_current_col] = col_data(); - auto& label_data = m_col[m_current_col].get_label_data(); - if (label_data.find(m_current_label) == label_data.end()) - label_data[m_current_label] = section_asmdata(); + auto& cdata = m_col[m_current_col]; + cdata.ensure_label(m_current_label); + auto& label_data = cdata.get_label_data(); if (get_data_state()) label_data[m_current_label].data.emplace_back(data); diff --git a/src/cpp/preprocessor/asm/asm_parser.h b/src/cpp/preprocessor/asm/asm_parser.h index bc6f62944..faf3b7c2a 100644 --- a/src/cpp/preprocessor/asm/asm_parser.h +++ b/src/cpp/preprocessor/asm/asm_parser.h @@ -355,6 +355,8 @@ class annotation_type class col_data { + // First time a label scope receives asm_data; map iteration order is order of insertion. + std::vector m_label_insertion_order; std::map m_label_data; std::map m_labelpageindex; std::map> m_scratchpads; @@ -363,6 +365,16 @@ class col_data uint32_t m_preempt_count = 0; public: + void ensure_label(const std::string& label) + { + if (m_label_data.find(label) == m_label_data.end()) { + m_label_data[label] = section_asmdata(); + m_label_insertion_order.push_back(label); + } + } + + const std::vector& get_label_insertion_order() const { return m_label_insertion_order; } + std::vector> get_label_asmdata(const std::string& label) { std::vector> result(m_label_data[label].text); @@ -675,13 +687,9 @@ class asm_parser: public std::enable_shared_from_this std::map& getcollabelpageindex(int col) { return m_col[col].get_labelpageindex(); } - std::vector getLabelsforcol(uint32_t col) + const std::vector& getLabelsforcol(uint32_t col) { - std::vector keys; - for (const auto& pair : m_col[col].get_label_data()) { - keys.push_back(pair.first); - } - return keys; + return m_col[col].get_label_insertion_order(); } void insert_scratchpad(std::string& name, offset_type size, std::vector& content); diff --git a/test/aie4-ctrlcode/1col_preempt/gold.md5 b/test/aie4-ctrlcode/1col_preempt/gold.md5 index 3d0b35379..125c4ce70 100644 --- a/test/aie4-ctrlcode/1col_preempt/gold.md5 +++ b/test/aie4-ctrlcode/1col_preempt/gold.md5 @@ -1 +1 @@ -96b00cbda9f5061f2cfef83b22c2e01d +58f4172515858e1c790a38aab7bfa6b9