https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102080
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pinskia at gcc dot gnu.org Keywords| |ice-on-valid-code --- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Hongtao.liu from comment #4) > diff --git a/test.c.032t.ccp1 b/test.c.033t.forwprop1 > index 5b18739..c6f0587 100644 > --- a/test.c.032t.ccp1 > +++ b/test.c.033t.forwprop1 > @@ -31,11 +31,12 @@ void EncodedFromDisplay () > __m256 __trans_tmp_11; > vector(8) float _mm256_mul_ps___A.2_1; > vector(8) float _mm256_mul_ps___B.3_2; > + vector(8) <signed-boolean:32> _5; > vector(8) float _mm256_blendv_ps___M.0_6; > vector(8) float _mm256_blendv_ps___Y.1_7; > vector(8) int _8; > vector(8) <signed-boolean:32> _9; > - vector(8) float _10; > + vector(8) float _12; > > <bb 2> : > _mm256_mul_ps___A.2_1 = _mm256_mul_ps___A; > @@ -45,8 +46,9 @@ void EncodedFromDisplay () > _mm256_blendv_ps___Y.1_7 = _mm256_blendv_ps___Y; > _8 = VIEW_CONVERT_EXPR<vector(8) int>(_mm256_blendv_ps___M.0_6); > _9 = _8 < { 0, 0, 0, 0, 0, 0, 0, 0 }; > - _10 = VEC_COND_EXPR <_9, _mm256_blendv_ps___Y.1_7, __trans_tmp_11_4>; > - IfThenElse___trans_tmp_9 = _10; > + _5 = _8 >= { 0, 0, 0, 0, 0, 0, 0, 0 }; > + _12 = .COND_MUL (_5, _mm256_mul_ps___A.2_1, _mm256_mul_ps___B.3_2, > _mm256_blendv_ps___Y.1_7); > + IfThenElse___trans_tmp_9 = _12; > return; > > fwprop1 should check if the type of _5 satisfies the predicate of cond_mul. Actually this seems backwards ... what match pattern is doing this?