代码拉取完成,页面将自动刷新
源码:spec 519 lbm.c 函数:LBM_performStreamCollideTRT line 336附近的代码,BB 5
bB
在local ra之前,寄存器基本已经耗尽。那么当前的lra,在处理local reg时,对于每一个点,都需要去spill 一个已经分配好的寄存器来拿到一个可用寄存器。导致代码中很多 spill for spill 的操作。
可以尝试的解决方案:
这是一个很普遍的问题,造成了至少三个spec用例性能的明显下降,基本上只要出现大块的计算无跳转,就会出现这个问题:
538 magick/morphology.c MorphologyPrimitive 3021~3037行左右
544 nab eff.c ephi
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
特殊场景:
对大结构体拷贝,我们现在是生成很多条str/load, 每次都给一个新的vreg. 导致,函数会产生很多的vreg,它们的live range很短,属于local ra。如果按global ra去计算conflict的话,时间开销很大。比如,我们的一个supertest用例,拷贝结构体:
# define LENGTH (32763)
struct s { short a[LENGTH]; } s1;
struct t { struct s ss; char cc[4]; } s2;
s2.ss = s1;
vreg过多,会让conflict计算时间膨胀。
fullcolor已经包含了调整lra的改动。我们会尽快使能
登录 后才可以发表评论