aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-phiopt.cc
diff options
context:
space:
mode:
authorVictor Do Nascimento <victor.donascimento@arm.com>2024-09-23 17:10:18 +0100
committerVictor Do Nascimento <victor.donascimento@arm.com>2024-10-02 15:27:42 +0100
commit4d9e473d125ec36ae4818d36d42bf4fea09cef1f (patch)
treea236678f2f85dbb262bae98e244941f9f21eb470 /gcc/tree-ssa-phiopt.cc
parent4e11ad7c345b6084ffe45ac569352dd316ee5cc6 (diff)
downloadgcc-4d9e473d125ec36ae4818d36d42bf4fea09cef1f.zip
gcc-4d9e473d125ec36ae4818d36d42bf4fea09cef1f.tar.gz
gcc-4d9e473d125ec36ae4818d36d42bf4fea09cef1f.tar.bz2
middle-end: Fix ifcvt predicate generation for masked function calls
Up until now, due to a latent bug in the code for the ifcvt pass, irrespective of the branch taken in a conditional statement, the original condition for the if statement was used in masking the function call. Thus, for code such as: if (a[i] > limit) b[i] = fixed_const; else b[i] = fn (a[i]); we would generate the following (wrong) if-converted tree code: _1 = a[i_1]; _2 = _1 > limit; _3 = .MASK_CALL (fn, _1, _2); cstore_4 = _2 ? fixed_const : _3; as opposed to the correct expected sequence: _1 = a[i_1]; _2 = _1 > limit; _3 = ~_2; _4 = .MASK_CALL (fn, _1, _3); cstore_5 = _2 ? fixed_const : _4; This patch ensures that the correct predicate mask generation is carried out such that, upon autovectorization, the correct vector lanes are selected in the vectorized function call. gcc/ChangeLog: * tree-if-conv.cc (predicate_statements): Fix handling of predicated function calls. gcc/testsuite/ChangeLog: * gcc.dg/vect/vect-fncall-mask.c: New.
Diffstat (limited to 'gcc/tree-ssa-phiopt.cc')
0 files changed, 0 insertions, 0 deletions