openjdk/jdk · warning

*** used_mask is 0 ***

Error message

*** used_mask is 0 ***

What it means

Printed by adlc's pipeline-adventure generator (output_c.cpp, pipeline_res_mask_initializer). For each resource a pipeline class uses, it looks up the resource's mask from the pipeline's resource description; if that mask is 0 the message is printed but generation continues, and the zero mask then skews the lb/ub bit scans (the loops at minimum find lb=0..31 range only if bits set — with mask 0, 'for (lb = 0; (used_mask & (1 << lb)) == 0; lb++);' actually runs off the end of the int, undefined behavior).

Solutions

  1. Open the .ad file's pipeline description and find the resource named in the failing pipe class's resUsage
  2. Give the resource a non-empty definition, e.g. resources( INS_FLAG='0:1' ) style bit assignments, so its mask is non-zero
  3. If the resource is intentionally unused, remove it from the pipe class instead of leaving a zero-mask resource
  4. Re-run the build and confirm adlc stderr no longer prints '*** used_mask is 0 ***'

Example fix

// before
pipe_class myPipe(...) %{ ...; myRes; %}
// resources section declares: resource myRes; // no bits -> mask 0

// after
resources( MYRES='0:1' );
pipe_class myPipe(...) %{ ...; MYRES; %}
Defensive patterns

Strategy: validation

Validate before calling

# Check every resource referenced by a pipe class is declared with bits in the
# pipeline description; a quick audit before building:
# 1) list resources used:  grep -oE 'resource [A-Za-z0-9_]+' <arch>.ad
# 2) list declared masks:  grep -A3 'resources\\(' <arch>.ad
# ensure every used name has a non-empty mask assignment

Prevention

When it happens

Trigger: A .ad file pipeline section where a resource referenced by a pipe class (resource usage in the instruction's ins_pipe pipe class definition) has an empty/zero mask — i.e. the resource was declared with no stage list, or the resource declaration 'resource <name>' carries no bits (e.g. declared with no functional-unit assignment).

Common situations: Writing a new pipeline model for a port; declaring resources in the 'resources' block of the pipeline description but forgetting to give them stage masks / functional unit bits; referencing an undeclared-shape resource from an ins_pipe class.

Related errors


AI-assisted analysis of openjdk/jdk@88dfb74bbe (2026-08-14). Data as JSON: /api/errors/a952c9eb62efd048. Report an issue: GitHub.

Appendix: source

Thrown at src/hotspot/share/adlc/output_c.cpp:481

  static const char* pipeline_use_element    = "Pipeline_Use_Element";

  templen = 1 +
    (int)(strlen(pipeline_use_cycle_mask) + (int)strlen(pipeline_use_element) +
     (cyclemasksize * 12) + masklen + (cycledigit * 2) + 30) * element_count;

  // Allocate space for the resource list
  const size_t resource_mask_size = templen;
  char * resource_mask = new char [resource_mask_size];
  char * last_comma = nullptr;

  templen = 0;

  for (pipeclass->_resUsage.reset();
       (piperesource = (const PipeClassResourceForm*)pipeclass->_resUsage.iter()) != nullptr; ) {
    int used_mask = pipeline->_resdict[piperesource->_resource]->is_resource()->mask();

    if (!used_mask) {
      fprintf(stderr, "*** used_mask is 0 ***\n");
    }

    resources_used |= used_mask;

    uint lb, ub;

    for (lb =  0; (used_mask & (1 << lb)) == 0; lb++);
    for (ub = 31; (used_mask & (1 << ub)) == 0; ub--);

    if (lb == ub) {
      resources_used_exclusively |= used_mask;
    }

    int formatlen =
      snprintf_checked(&resource_mask[templen], resource_mask_size - templen, "  %s(0x%0*x, %*d, %*d, %s %s(",
        pipeline_use_element,
        masklen, used_mask,
        cycledigit, lb, cycledigit, ub,

View on GitHub (pinned to 88dfb74bbe)