aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/aarch64/aarch64.md
diff options
context:
space:
mode:
authorAaron Sawdey <acsawdey@linux.ibm.com>2020-09-28 11:15:46 -0500
committerAaron Sawdey <acsawdey@linux.ibm.com>2021-01-27 12:24:59 -0600
commit7a279bed24e1b2a628767a60a20f3dcf6f1088cb (patch)
tree7710b4bb56c542f02cbe3669608b7deaa11ca524 /gcc/config/aarch64/aarch64.md
parent3670dbe49059ab1746ac2e3b77940160c05db6c2 (diff)
downloadgcc-7a279bed24e1b2a628767a60a20f3dcf6f1088cb.zip
gcc-7a279bed24e1b2a628767a60a20f3dcf6f1088cb.tar.gz
gcc-7a279bed24e1b2a628767a60a20f3dcf6f1088cb.tar.bz2
Combine patterns for p10 load-cmpi fusion
This patch adds the first batch of patterns to support p10 fusion. These will allow combine to create a single insn for a pair of instructions that power10 can fuse and execute. These particular fusion pairs have the requirement that only cr0 can be used when fusing a load with a compare immediate of -1/0/1 (if signed) or 0/1 (if unsigned), so we want combine to put that requirement in, and if it doesn't work out the splitter can change it back into 2 insns so scheduling can move them apart. The patterns are generated by a script genfusion.pl and live in new file fusion.md. This script will be expanded to generate more patterns for fusion. This also adds option -mpower10-fusion which defaults on for power10 and will gate all these fusion patterns. In addition I have added an undocumented option -mpower10-fusion-ld-cmpi (which may be removed later) that just controls the load+compare-immediate patterns. I have made these default on for power10 but they are not disallowed for earlier processors because it is still valid code. This allows us to test the correctness of fusion code generation by turning it on explicitly. gcc/ChangeLog: * config/rs6000/genfusion.pl: New script to generate define_insn_and_split patterns so combine can arrange fused instructions next to each other. * config/rs6000/fusion.md: New file, generated fused instruction patterns for combine. * config/rs6000/predicates.md (const_m1_to_1_operand): New predicate. (non_update_memory_operand): New predicate. * config/rs6000/rs6000-cpus.def: Add OPTION_MASK_P10_FUSION and OPTION_MASK_P10_FUSION_LD_CMPI to ISA_3_1_MASKS_SERVER and POWERPC_MASKS. * config/rs6000/rs6000-protos.h (address_is_non_pfx_d_or_x): Add prototype. * config/rs6000/rs6000.c (rs6000_option_override_internal): Automatically set OPTION_MASK_P10_FUSION and OPTION_MASK_P10_FUSION_LD_CMPI if target is power10. (rs600_opt_masks): Allow -mpower10-fusion in function attributes. (address_is_non_pfx_d_or_x): New function. * config/rs6000/rs6000.h: Add MASK_P10_FUSION. * config/rs6000/rs6000.md: Include fusion.md. * config/rs6000/rs6000.opt: Add -mpower10-fusion and -mpower10-fusion-ld-cmpi. * config/rs6000/t-rs6000: Add dependencies involving fusion.md.
Diffstat (limited to 'gcc/config/aarch64/aarch64.md')
0 files changed, 0 insertions, 0 deletions