[RISCV] Optimize immediate materialisation with BCLRI
authorBen Shi <powerman1st@163.com>
Mon, 11 Oct 2021 14:01:37 +0000 (14:01 +0000)
committerBen Shi <powerman1st@163.com>
Wed, 13 Oct 2021 00:59:23 +0000 (00:59 +0000)
commit787eeb8597fac22decb366a42176b11f52ec1bf0
treed346119bfc829d3ae94d2deece4659ba7c348190
parent441485cc3d0fe36775902237203398530b84b332
[RISCV] Optimize immediate materialisation with BCLRI

Do the following optimization for immediate materialisation:

1. For values in range 0xffffffff 7fffffff ~ 0xffffffff 00000000, first
   generate the lower 32-bit with Val|0x80000000 (which is expected be an
   int32), then emit (BCLRI r, 31).

2. For values in range 0x80000000 ~ 0xffffffff, first generate the lower
   32-bit with Val&~0x80000000 (which is expected to be an int32), then
   emit (BSETI r, 31).

Reviewed By: craig.topper

Differential Revision: https://reviews.llvm.org/D111532
llvm/lib/Target/RISCV/MCTargetDesc/RISCVMatInt.cpp
llvm/test/CodeGen/RISCV/imm.ll
llvm/test/MC/RISCV/rv64zbs-aliases-valid.s