> int is getting small to store one bit per vector element (V32QI...) so I > switched to hwint after checking that Zadeck's patches don't touch this.
unsigned HOST_WIDE_INT is indeed the correct type to use for mask manipulation but please use UINTVAL instead of INTVAL with it. And: + unsigned HOST_WIDE_INT mask = (HOST_WIDE_INT_1 << n_elts) - 1; can be flagged as relying on undefined behavior (we fixed a bunch of cases a couple of years ago) so use: unsigned HOST_WIDE_INT mask = ((unsigned HOST_WIDE_INT) 1 << n_elts) - 1; > Bootstrap + testsuite on x86_64-linux-gnu. > > 2013-03-17 Marc Glisse <marc.gli...@inria.fr> > > gcc/ > * simplify-rtx.c (simplify_binary_operation_1) <VEC_SELECT>: > Handle VEC_MERGE. > (simplify_ternary_operation) <VEC_MERGE>: Handle nested VEC_MERGE. > Handle equal arguments. OK, modulo a few nits: - in simplify_binary_operation_1, the notion of left and right is a bit elusive, so I'd use all_operand0 and all_operand1 instead. And I'd use the same idiom as in simplify_ternary_operation: (sel & (1 << UINTVAL (j)). - in simplify_ternary_operation, we probably need to test that op0 doesn't have side-effects too before dropping one of the copies, as VEC_MERGE is supposed to evaluate its 2 arguments I think. -- Eric Botcazou