delay — LLVM 17.0.6 documentation

# delay

A delay between dependent SALU/VALU instructions. This operand may specify a delay for 2 instructions: the one after the current s_delay_alu instruction and for the second instruction indicated by SKIP.

The bits of this operand have the following meaning:

> Bits | Description | Value Range
> --- | --- | ---
> 3:0 | ID0: indicates a delay for the first instruction. | 0..11
> 6:4 | SKIP: indicates the position of the second instruction. | 0..5
> 10:7 | ID1: indicates a delay for the second instruction. | 0..11

This operand may be specified as one of the following:

- An integer_number or an absolute_expression. The value must be in the range from 0 to 0xFFFF.

- A combination of instid0, instskip, instid1 values which are described below.

  > Syntax | Description | Default Value
  > --- | --- | ---
  > instid0(<ID name>) | A symbolic ID0 value. | instid0(NO_DEP)
  > instskip(<SKIP name>) | A symbolic SKIP value. | instskip(SAME)
  > instid1(<ID name>) | A symbolic ID1 value. | instid1(NO_DEP)

These values may be specified in any order. When more than one value is specified, the values must be separated from each other by a ‘|’.

Valid ID names are defined below.

> Name | Description
> --- | ---
> NO_DEP | No dependency on any prior instruction. This is the default value.
> VALU_DEP_1 | Dependency on a previous VALU instruction, 1 opcode back.
> VALU_DEP_2 | Dependency on a previous VALU instruction, 2 opcodes back.
> VALU_DEP_3 | Dependency on a previous VALU instruction, 3 opcodes back.
> VALU_DEP_4 | Dependency on a previous VALU instruction, 4 opcodes back.
> TRANS32_DEP_1 | Dependency on a previous TRANS32 instruction, 1 opcode back.
> TRANS32_DEP_2 | Dependency on a previous TRANS32 instruction, 2 opcodes back.
> TRANS32_DEP_3 | Dependency on a previous TRANS32 instruction, 3 opcodes back.
> FMA_ACCUM_CYCLE_1 | Single cycle penalty for FMA accumulation.
> SALU_CYCLE_1 | 1 cycle penalty for a prior SALU instruction.
> SALU_CYCLE_2 | 2 cycle penalty for a prior SALU instruction.
> SALU_CYCLE_3 | 3 cycle penalty for a prior SALU instruction.

Legal SKIP names are described in the following table.

> Name | Description
> --- | ---
> SAME | Apply second dependency to the same instruction. This is the default value.
> NEXT | Apply second dependency to the next instruction.
> SKIP_1 | Skip 1 instruction then apply dependency.
> SKIP_2 | Skip 2 instructions then apply dependency.
> SKIP_3 | Skip 3 instructions then apply dependency.
> SKIP_4 | Skip 4 instructions then apply dependency.

Examples:

    s_delay_alu instid0(VALU_DEP_1)
    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)