https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120553

            Bug ID: 120553
           Summary: Improve code to select between -1 and various values
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: law at gcc dot gnu.org
  Target Milestone: ---

I recently added code to improve our ability to generate -1, 1 based on the
sign bit of an input value.  ie x < 0 ? -1 : 1.

That can be generalized to generate -1, 2^n for n = 0..63 when the zbs
extension is allowed.  Instead of using ori to set the low bit, use bset to set
whatever bit we want like these two example for


long foo1 (long c) { return c >= 0 ? 0x4000 : -1; }


        srai    a0, a0, 63
        bseti   a0, a0, 14

Reply via email to