Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Fix gcc lra bug
1. Fix LRA assign same hard
register with overlapped pseudos
Shiva
shiva0217@gmail.com
May 2013
2. Problem description
r0[r477] = sp + 112;
r0[r565] = sp;
r13 = mem [r0[r565] + 136]
…
r0[r61] = r0[r477] + r5;
The error cause by assign different pseudo register
to same hardware register with live time overlapped.
3. When the r477 have been created
r477 = sp’
After the stack have been changed
$r477 = sp + 112;
r477 = sp’
= sp + 112
sp
sp’: old sp
sp: new sp
4. Why assign to same register?
However, when assign hardware register
The register content record didn’t notice the
pseudo content have been changed
It record as (r477 == r565)
Therefore, it think live range overlap is OK because
the register content is still equal
5. How to fix the bug
Add offset in register content structure
The offset from eliminate register(sp) to pseudo
register
Update the register content offset when the
eliminate offset have been changed.
r477 = sp’
= sp + 112
sp
SFP
Previous
Eliminate
offset
Current
Eliminate
offsetreg_content_offset[r477]
+=(Curr_elim_offset – prev_elim_offset)