[RISCV] Use bseti for 2048 in RISCVMatInt when Zbs is enabled.
authorCraig Topper <craig.topper@sifive.com>
Thu, 8 Dec 2022 03:49:54 +0000 (19:49 -0800)
committerCraig Topper <craig.topper@sifive.com>
Thu, 8 Dec 2022 04:14:22 +0000 (20:14 -0800)
commit564e09c77870425d852f583c5aeb4dec57846ed7
treebd153cd7661680c4564e1e9281080d255a17eabd
parent19e6b107889214a2ae31153ea17bd2918c689ffc
[RISCV] Use bseti for 2048 in RISCVMatInt when Zbs is enabled.

2048 requires an LUI and ADDI instruction due to ADDI using a
signed immediate. It can also be done with C.LI+C.SLLI for better
code size.

With Zbs we can use a single BSETI to have an instruction.

Reorder the checks so that BSETI is checked first, with an extra
qualification to prefer a single LUI or ADDI when possible. I'm
continuing to think about other ways to structure this code, but
this works for now.

Fixes PR59362.
llvm/lib/Target/RISCV/MCTargetDesc/RISCVMatInt.cpp
llvm/test/CodeGen/RISCV/imm.ll
llvm/test/MC/RISCV/rv32zbs-aliases-valid.s
llvm/test/MC/RISCV/rv64zbs-aliases-valid.s