Skip to content
Snippets Groups Projects
Commit 05302544 authored by Vineet Gupta's avatar Vineet Gupta
Browse files

riscv: relax splitter restrictions for creating pseudos


[partial addressing of PR/109279]

RISCV splitters have restrictions to not create pesudos due to a combine
limitatation. And despite this being a split-during-combine limitation,
all split passes take the hit due to way define*_split are used in gcc.

With the original combine issue being fixed 61bee6ae ("combine: Don't
record for UNDO_MODE pointers into regno_reg_rtx array [PR104985]")
the RV splitters can now be relaxed.

This improves the codegen in general. e.g.

	long long f(void) { return 0x0101010101010101ull; }

Before

	li	a0,0x01010000
	addi	a0,0x0101
	slli	a0,a0,16
	addi	a0,a0,0x0101
	slli	a0,a0,16
	addi	a0,a0,0x0101
	ret

With patch

	li	a5,0x01010000
	addi	a5,a5,0x0101
	mv	a0,a5
	slli	a5,a5,32
	add	a0,a5,a0
	ret

This reduces the qemu icounts, even if slightly, across SPEC2017.

500.perlbench_r	0	1235310737733	1231742384460	0.29%
		1	744489708820	743515759958
		2	714072106766	712875768625	0.17%
502.gcc_r	0	197365353269	197178223030
		1	235614445254	235465240341
		2	226769189971	226604663947
		3	188315686133	188123584015
		4	289372107644	289187945424
503.bwaves_r	0	326291538768	326291539697
		1	515809487294	515809488863
		2	401647004144	401647005463
		3	488750661035	488750662484
505.mcf_r	0	681926695281	681925418147
507.cactuBSSN_r	0	3832240965352	3832226068734
508.namd_r	0	1919838790866	1919832527292
510.parest_r	0	3515999635520	3515878553435
511.povray_r	0	3073889223775	3074758622749
519.lbm_r	0	1194077464296	1194077464041
520.omnetpp_r	0	1014144252460	1011530791131	0.26%
521.wrf_r	0	3966715533120	3966265425092
523.xalancbmk_r	0	1064914296949	1064506711802
525.x264_r	0	509290028335	509258131632
		1	2001424246635	2001677767181
		2	1914660798226	1914869407575
526.blender_r	0	1726083839515	1725974286174
527.cam4_r	0	2336526136415	2333656336419
531.deepsjeng_r	0	1689007489539	1686541299243	0.15%
538.imagick_r	0	3247960667520	3247942048723
541.leela_r	0	2072315300365	2070248271250
544.nab_r	0	1527909091282	1527906483039
548.exchange2_r	0	2086120304280	2086314757502
549.fotonik3d_r	0	2261694058444	2261670330720
554.roms_r	0	2640547903140	2640512733483
557.xz_r	0	388736881767	386880875636	0.48%
		1	959356981818	959993132842
		2	547643353034	546374038310	0.23%
997.specrand_fr	0	512881578	512599641
999.specrand_ir	0	512881578	512599641

This is testsuite clean, no regression w/ patch.

               ========= Summary of gcc testsuite =========
                            | # of unexpected case / # of unique unexpected case
                            |          gcc |          g++ |     gfortran |
 rv64imafdc/  lp64d/ medlow |    2 /     2 |    1 /     1 |    6 /     1 |
   rv64imac/   lp64/ medlow |    3 /     3 |    1 /     1 |   43 /     8 |
 rv32imafdc/ ilp32d/ medlow |    1 /     1 |    3 /     2 |    6 /     1 |
   rv32imac/  ilp32/ medlow |    1 /     1 |    3 /     2 |   43 /     8 |

This came up as part of IRC chat on PR/109279 and was suggested by
Andrew Pinski.

gcc/ChangeLog:

	* config/riscv/riscv.md: riscv_move_integer() drop in_splitter arg.
	riscv_split_symbol() drop in_splitter arg.
	* config/riscv/riscv.cc: riscv_move_integer() drop in_splitter arg.
	riscv_split_symbol() drop in_splitter arg.
	riscv_force_temporary() drop in_splitter arg.
	* config/riscv/riscv-protos.h: riscv_move_integer() drop in_splitter arg.
	riscv_split_symbol() drop in_splitter arg.

Signed-off-by: default avatarVineet Gupta <vineetg@rivosinc.com>
parent e262cdf4
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment