This patch is to fix a missing ifcvt opportunity in back-end. For the simple 
case below,

if (...)
    x = a;  /* x is memory */
/* no else */

We can generate conditional move and remove the branch as below if the target 
cost is acceptable. 

r1 = x
r2 = a
cmp ...
csel r3, r1, r2, cond
x = r3

This could be safe if x is a stack variable, and there isn't any address taken 
in current function, so the store speculation can be avoided. 

In practice, this optimization can improve a real application performance by %4 
on aarch64.

Thanks,
-Jiangning

Attachment: csel3.patch
Description: csel3.patch

Reply via email to