Uploaded image for project: 'Embedded Software & Tools'
  1. Embedded Software & Tools
  2. EXT_EP-10260

Software pipelined loop register allocation mistakenly assigns same register to conflicting variables

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: High High
    • Code Generation Tools
    • CODEGEN-8579
    • Hide
      C7000_1.4.0.LTS
      C6000_8.3.8
      Show
      C7000_1.4.0.LTS C6000_8.3.8
    • Hide
      C6000_8.3.9*
      C7000_1.4.2.LTS
      Show
      C6000_8.3.9* C7000_1.4.2.LTS
    • default
    • Disable software pipelining by using the --disable_software_pipeline option

      In rare circumstances, the compiler may assign the same register to two conflicting values, corrupting one or both of them. Conflicting values are values that need to be in a register simultaneously, so they must be stored in distinct registers.

      Because this bug is deep in the internals of the register allocation routines in the software pipeline code, it is very sensitive to tiny changes in the input, and thus it is difficult to precisely describe what input source code would trigger the bug.

      The bug can occur if a loop:

      • is successfully software pipelined,
      • contains any multi-cycle instruction MI (e.g. a load from memory),
      • MI's output is not consumed by another operation in the same iteration of the loop (e.g. a store to memory),
      • MI’s output isn’t consumed by another operation in a subsequent iteration of the loop, and
      • MI’s output is consumed outside the loop after the loop is complete,

      then the compiler may generate incorrect code, specifically an incorrect register allocation.

            syncuser TI User
            syncuser TI User
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: