30 Commits

Author SHA1 Message Date
Ben Shi
30b52a3574 [CSKY] Optimize conditional branch and value select with BTSTI
Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D154768
2023-08-08 14:13:48 +08:00
Ben Shi
528831dd1a [CSKY] Optimize ANDI/ORI to BSETI/BCLRI for specific immediates
Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D153614
2023-08-04 16:10:36 +08:00
Ben Shi
80cd505914 [CSKY] Optimize implementation of intrinsic 'llvm.cttz.i32'
Reviewed By: zixuan-wu

Differential Revison: https://reviews.llvm.org/D154588
2023-08-01 17:12:32 +08:00
Ben Shi
3e6b80b1bd [CSKY] Optimize conditional select with CLRT/CLRF
Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D154409
2023-07-04 15:22:18 +08:00
Ben Shi
d53063c3e2 [CSKY] Optimize conditional branch with BLZ32/BLSZ32/BHZ32/BHSZ32
Add more `Pat`s to generate BLZ32/BLSZ32/BHZ32/BHSZ32.

Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D153607
2023-07-03 15:03:43 +08:00
Ben Shi
86829d15f4 [CSKY] Optimize IR pattern icmp-select with DECT32/DECF32
Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D153518
2023-07-03 15:03:43 +08:00
Ben Shi
8099d6c20b [CSKY] Optimize IR pattern icmp-select with INCT32/INCF32
Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D153436
2023-06-30 22:55:25 +08:00
Ben Shi
f40682a930 [CSKY] Optimize subtraction with SUBI32/SUBI16
Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D153326
2023-06-30 11:33:20 +08:00
Ben Shi
6cda80b918 [CSKY][test][NFC] Add tests of ANDI/ORI
These tests will be optimized with BSETI32/BCLRI32
in the future.

Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D153613
2023-06-29 19:31:49 +08:00
Ben Shi
616e44c63e [CSKY][NFC] Simplify code with multiclass
Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D153402
2023-06-29 19:31:49 +08:00
Zi Xuan Wu (Zeson)
f4d61cdf9c [CSKY] Lower ISD::ConstantPool node to support getting the address of ConstantPool entry
When there is not GRS or MOVIH/ORI instruction, we can not get the address of
ConstantPool entry directly. So we need put the address into ConstantPool to leverage CSKY::LRW instruction.
2022-11-21 10:37:20 +08:00
Zi Xuan Wu (Zeson)
955e6ac499 [CSKY] Fix the Predicates of instruction selection
Some select node Pattern with register cmp instruction should be guarded
by iHas2E3.
2022-09-13 15:02:22 +08:00
Zi Xuan Wu (Zeson)
033324db6f [CSKY] Fix the br target operand type in td
br target operand should be Operand<OtherVT> type instead of Operand<iPTR>
2022-07-14 11:27:31 +08:00
Fangrui Song
ef437a7d3f [CSKY] Fix some Clang warnings. NFC
Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D122872
2022-04-06 20:09:32 -07:00
Zi Xuan Wu
27c18558e6 [CSKY] Add missing codegen pattern for 16-bit instruction
In generic cpu model, there are only low 16 registers and little 32-bit instruction. CK801 is the cpu
family with least basic features like generic model.

Add test run and check for generic cpu model in original test case to cover basic LLVM IR functionality.
2022-03-29 16:05:30 +08:00
Zi Xuan Wu
582836faaf [CSKY] Enhance asm parser and relocation fixup for some special symbol address instruction
Add processing of parsing and emiting lrw/jsri/jmpi instruction, including related fixup and relocation.
Add relax support about pseudo instructions such as jbr/jbsr.
Add objdump format support like arm in llvm-objdump.
2022-03-24 14:14:04 +08:00
Zi Xuan Wu
4ad517e6b0 [CSKY] Add floating operation support including float and double
CSKY arch has multiple FPU instruction versions such as FPU, FPUv2 and FPUv3 to implement floating operations.
For now, we just only support FPUv2 and FPUv3.

It includes the encoding, asm parsing of instructions and codegen of DAG nodes.
2022-01-27 15:54:04 +08:00
Zi Xuan Wu
8ddc816929 [CSKY] Lower leaf DAG node such as global symbol, frame address and jumptable, etc.
Lower global symbols such as call/external symbol.
Lower other leaf DAG node such as frame address/block address/jumptable/vastart.

Normally some leaf symbols need reside in constant pool as ABI prefers, and are addressed by
lrw or jsri instructions.

Every symbol in constant pool is lowered with one entry in target constant pool. The
entry has different type corresponding to different leaf node such as blockaddress,
jumptable, or global value.
2022-01-10 14:35:07 +08:00
Zi Xuan Wu
9566cf16ad [CSKY] Add codegen of select/br/cmp instruction and some frame lowering infra
Add basic integer codegen of select/br/cmp instruction. It also includes frame lowering code
such as prologue/epilogue.
2022-01-05 15:59:03 +08:00
Zi Xuan Wu
a556ec8861 [CSKY] Complete codegen of basic arithmetic and load/store operations
Complete basic arithmetic operations such as add/sub/mul/div, and it also includes converions
and some specific operations such as bswap.Add load/store patterns to generate different addressing mode instructions.

Also enable some infra such as copy physical register and eliminate frame index.
2021-12-09 11:40:20 +08:00
Zi Xuan Wu
bdd7c53dc5 [CSKY] Add compressed instruction mapping between 32-bit and 16-bit instruction
Add all CompressPat to map instructions between 16-bit and 32-bit with using the CompressInstEmitter infra.
Although it's only used in asm printer, also enable it in asm parser to debug mapping when -enable-csky-asm-compressed-inst is on.

Differential Revision: https://reviews.llvm.org/D115026
2021-12-06 14:04:54 +08:00
Zi Xuan Wu
4fb282fec5 [CSKY] Add CSKY 16-bit instruction format and encoding
CSKY is a ARCH which supports mixture of 16-bit and 32-bit instructions natively,
and there is not an indivual predictor or feature to enable/disable 16-bit instruction.
So I think it's better to add 16-bit instruction early, and naturally to use 16-bit and 32-bit instructions.

Differential Revision: https://reviews.llvm.org/D112919
2021-11-08 10:02:15 +08:00
Kazu Hirata
d8e4170b0a Ensure newlines at the end of files (NFC) 2021-10-23 08:45:29 -07:00
Zi Xuan Wu
de10a02fc0 [CSKY] Complete to add basic integer instruction set
Complete the basic integer instruction set and add related predictor in CSKY.td.
And it includes the instruction definition and asm parser support.

Differential Revision: https://reviews.llvm.org/D111701
2021-10-20 15:50:44 +08:00
Zi Xuan Wu
ca31b43ae8 [NFC][CSKY] Resort the instruction description in td
Resort the instruction description in td to make it easy to upstream more instructions and add predicts later.
2021-04-21 12:36:07 +08:00
Zi Xuan Wu
4bb60c285c [CSKY 6/n] Add support branch and symbol series instruction
This patch adds basic CSKY branch instructions and symbol address series instructions.
Those two kinds of instruction have relationship between each other, and it involves much work about Fixups.

For now, basic instructions are enabled except for disassembler support.
We would support to generate basic codegen asm firstly and delay disassembler work later.

Differential Revision: https://reviews.llvm.org/D95029
2021-04-20 15:36:49 +08:00
Zi Xuan Wu
4216389c26 [CSKY 5/n] Add support for all CSKY basic integer instructions except for branch series
This patch adds basic CSKY integer instructions except for branch series such as bsr, br.
It mainly includes basic ALU, load & store, compare and data move instructions.

Branch series instructions need handle complex symbol operand as following patch later.

Differential Revision: https://reviews.llvm.org/D94007
2021-04-20 15:36:49 +08:00
Zi Xuan Wu
8ba622bae1 [CSKY 4/n] Add basic CSKYAsmParser and CSKYInstPrinter
This basic parser will handle basic instructions with register or immediate operands.
With the addition of CSKYInstPrinter, we can now make use of lit tests.

Differential Revision: https://reviews.llvm.org/D93798
2021-04-20 15:36:49 +08:00
Zi Xuan Wu
ec17c4f075 [CSKY 3/n] Add bare-bones C-SKY MCTargetDesc
Add basis of CSKY MCTargetDesc and it's enough to compile and link but doesn't yet do anything particularly useful.
Once an ASM parser and printer are added in the next two patches, the whole thing can be usefully tested.

Differential Revision: https://reviews.llvm.org/D93372
2020-12-22 11:32:39 +08:00
Zi Xuan Wu
365c405411 [CSKY 2/n] Add basic tablegen infra for CSKY
This introduce basic tablegen infra such as CSKY{InstrFormats,InstrInfo,RegisterInfo,}.td.
For now, only add instruction definitions for basic CSKY ISA operations, and the instruction format and register info are almost complete.

Our initial target is a working MC layer rather than codegen, so appropriate SelectionDAG patterns will come later.

Differential Revision: https://reviews.llvm.org/D89180
2020-12-07 11:56:09 +08:00