https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89430
Bug ID: 89430 Summary: A missing ifcvt optimization to generate csel Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: jiangning.liu at amperecomputing dot com Target Milestone: --- For a small case, unsigned *a; void test(unsigned k, unsigned b) { if (b < a[k]) { a[k] = b; } } "gcc -O3 -S" generates, adrp x2, a uxtw x0, w0 ldr x2, [x2, #:lo12:a] ldr w3, [x2, x0, lsl 2] cmp w3, w1 bls .L1 str w1, [x2, x0, lsl 2] Actually we should use csel instruction instead of conditional branch, so expect to have the followings generated, adrp x2, a uxtw x0, w0 ldr x2, [x2, #:lo12:a] ldr w3, [x2, x0, lsl 2] cmp w3, w1 csel w1, w1, w3, hi str w1, [x2, x0, lsl 2] RTL optimization ifcvt misses this opportunity.