[PATCH] [AArch64] Generate tbz/tbnz when comparing against zero.
Xu Jiangwei
xjwwm_cat at 163.com
Wed Jul 9 22:59:20 PDT 2014
I have tried your patch and test.Here, I doubt whether it has something to do with add/sub or adds/subs, and I have also tried some test case written by myself.
void foo();
void gt(int tmp) {
if (tmp >= 0)
foo();
}
and the asm is below:
ge: // @ge
// BB#0: // %entry
cmp w0, #0 // =0
b.lt .LBB1_2
// BB#1: // %if.then
b foo
.LBB1_2: // %if.end
ret
.Ltmp3:
.size ge, .Ltmp3-ge
I think the cmp and b.lt above can combine to tbz/tbnz. I think your patch should cover this case. When I chang the c code to (tmp>0), it generates
gt: // @gt
// BB#0: // %entry
cmp w0, #1 // =1
b.lt .LBB0_2
// BB#1: // %if.then
b foo
.LBB0_2: // %if.end
ret
I think this case may not be easy to generate TBZ/TBNZ, what is your opinion?
Thanks
-David
http://reviews.llvm.org/D4440
More information about the llvm-commits
mailing list