aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorJin Ma <jinma@linux.alibaba.com>2023-11-11 13:11:45 -0700
committerJeff Law <jlaw@ventanamicro.com>2023-11-11 13:11:45 -0700
commit85b49ad863965408668627f10b5b1b106053f319 (patch)
tree4a9d0ee7a00a63d46d61896c462b6951f67e5660 /libgcc
parent7610e5cc82bd6316cfe0bfee6d9f12d8c2cfa9c3 (diff)
downloadgcc-85b49ad863965408668627f10b5b1b106053f319.zip
gcc-85b49ad863965408668627f10b5b1b106053f319.tar.gz
gcc-85b49ad863965408668627f10b5b1b106053f319.tar.bz2
[PATCH v2] In the pipeline, USE or CLOBBER should delay execution if it starts a new live range.
CLOBBER and USE does not represent real instructions, but in the process of pipeline optimization, they will wait for transmission in ready list like other insns, without considering resource conflicts and cycles. This results in a multi-issue CPU architecture that can be issued at any time if other regular insns have resource conflicts or cannot be launched for other reasons. As a result, its position is advanced in the generated insns sequence, which will affect register allocation and often lead to more redundant mov instructions. A simple example: https://github.com/majin2020/gcc-test/blob/master/test.c This is a function in the dhrystone benchmark. https://github.com/majin2020/gcc-test/blob/0b08c1a13de9663d7d9aba7539b960ec0607ca24/test.c.299r.sched1 This is a log of the pass 'sched1' When -mtune=rocket but issue_rate == 2. The pipeline is: ;; | insn | prio | ;; | 17 | 3 | r142=a0 alu ;; | 14 | 0 | clobber r136 nothing ;; | 13 | 0 | clobber a0 nothing ;; | 18 | 2 | r143=a1 alu ... ;; | 12 | 0 | a0=r136 alu ;; | 15 | 0 | use a0 nothing In this log, insn 13 and 14 are much ahead of schedule, which risks generating redundant mov instructions, which seems unreasonable. Therefore, I submit patch again on the basis of the last review opinions to try to solve this problem. https://github.com/majin2020/gcc-test/commit/efcb43e3369e771bde702955048bfe3f501263dd#diff-805031b1be5092a2322852a248d0b0f92eef7cad5784a8209f4dfc6221407457L189 This is the diff log of shed1 after patch is added. The new pipeline is: ;; | insn | prio | ;; | 17 | 3 | r142=a0 alu ... ;; | 10 | 0 | [r144]=r141 alu ;; | 13 | 0 | clobber a0 nothing ;; | 14 | 0 | clobber r136 nothing ;; | 12 | 0 | a0=r136 alu ;; | 15 | 0 | use a0 nothing gcc/ChangeLog: * haifa-sched.cc (use_or_clobber_starts_range_p): New. (prune_ready_list): USE or CLOBBER should delay execution if it starts a new live range.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions