[RISCV] implement li pseudo instruction
authorAlex Bradbury <asb@lowrisc.org>
Tue, 17 Apr 2018 21:56:40 +0000 (21:56 +0000)
committerAlex Bradbury <asb@lowrisc.org>
Tue, 17 Apr 2018 21:56:40 +0000 (21:56 +0000)
commit480b7bc906865fdde915844210ff1efbd88d3103
tree9596618bdd12b96b42b4937d3c3c627b17ed6597
parent09e0e2e656dfc92e93d575abaa0eb470f9954fc5
[RISCV] implement li pseudo instruction

The implementation follows the MIPS backend and expands the
pseudo instruction directly during asm parsing. As the result, only
real MC instructions are emitted to the MCStreamer. Additionally,
PseudoLI instructions are emitted during codegen. The actual
expansion to real instructions is performed during MI to MC lowering
and is similar to the expansion performed by the GNU Assembler.

Differential Revision: https://reviews.llvm.org/D41949
Patch by Mario Werner.

llvm-svn: 330224
18 files changed:
llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
llvm/lib/Target/RISCV/MCTargetDesc/CMakeLists.txt
llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCPseudoExpansion.cpp [new file with mode: 0644]
llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCPseudoExpansion.h [new file with mode: 0644]
llvm/lib/Target/RISCV/RISCVAsmPrinter.cpp
llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
llvm/lib/Target/RISCV/RISCVInstrFormats.td
llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
llvm/lib/Target/RISCV/RISCVInstrInfo.td
llvm/test/CodeGen/RISCV/bswap-ctlz-cttz-ctpop.ll
llvm/test/CodeGen/RISCV/calling-conv.ll
llvm/test/CodeGen/RISCV/float-arith.ll
llvm/test/CodeGen/RISCV/vararg.ll
llvm/test/MC/RISCV/rv32i-aliases-invalid.s
llvm/test/MC/RISCV/rv32i-aliases-valid.s
llvm/test/MC/RISCV/rv64i-aliases-invalid.s
llvm/test/MC/RISCV/rv64i-aliases-valid.s
llvm/test/MC/RISCV/rvi-aliases-valid.s