Splits the -L0_filter option into two separate ones, -L0I_filter and -L0D_filter, for instruction and data address filtering respectively. This is to support use-cases where we want to filter only one but not the other.
The existing -L0_filter option is still supported, for backward compatibility. We simply sets the -L0I_filter and -L0D_filter flags when we see this for code simplicity.
We disable optimizations when either -L0D_filter or -L0I_filter is set.
Introduces new file types OFFLINE_FILE_TYPE_IFILTERED and OFFLINE_FILE_TYPE_DFILTERED to denote raw files where instructions or data addresses respectively are filtered. We need OFFLINE_FILE_TYPE_IFILTERED so that we can know whether bb instrs are separate, which happens only with L0I_filter.
We could have done without OFFLINE_FILE_TYPE_DFILTERED and set the existing OFFLINE_FILE_TYPE_FILTERED when either instrs or data addresses were filtered. But we want to continue supporting the older trace versions where OFFLINE_FILE_TYPE_FILTERED also means that bb instrs are separate due to instr filtering. For symmetry, we just add the new OFFLINE_FILE_TYPE_DFILTERED type.
Also adds a new sub-type for OFFLINE_TYPE_EXTENDED to denote the new header format which has the file type and file version fields swapped. This is required since we are out of bits to store the offline file type in the header. The new enum value is named same as the old one (OFFLINE_EXT_TYPE_HEADER), while the old one is now renamed to (OFFLINE_EXT_TYPE_HEADER_DEPRECATED).
Also bumps up the version for offline files to OFFLINE_FILE_VERSION_HEADER_FIELDS_SWAP, since we have the new header entry now.
Adds tests for some combinations of these options. Changes the -simulator_type to basic_counts as we really want to look at counts in these tests.
Issue: #5539