diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index 5b1e695..0695ad2 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -2939,11 +2939,12 @@ a set bit indicates it is taken from @var{vec1}. @item (vec_select:@var{m} @var{vec1} @var{selection}) This describes an operation that selects parts of a vector. @var{vec1} is the source vector, and @var{selection} is a @code{parallel} that contains a -@code{const_int} for each of the subparts of the result vector, giving the -number of the source subpart that should be stored into it. -The result mode @var{m} is either the submode for a single element of -@var{vec1} (if only one subpart is selected), or another vector mode -with that element submode (if multiple subparts are selected). +@code{const_int} (or another expression, if the selection can be made at +runtime) for each of the subparts of the result vector, giving the number of +the source subpart that should be stored into it. The result mode @var{m} is +either the submode for a single element of @var{vec1} (if only one subpart is +selected), or another vector mode with that element submode (if multiple +subparts are selected). @findex vec_concat @item (vec_concat:@var{m} @var{x1} @var{x2}) diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index a9f2586..b4c6883 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -3604,7 +3604,10 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode, gcc_assert (mode == GET_MODE_INNER (GET_MODE (trueop0))); gcc_assert (GET_CODE (trueop1) == PARALLEL); gcc_assert (XVECLEN (trueop1, 0) == 1); - gcc_assert (CONST_INT_P (XVECEXP (trueop1, 0, 0))); + + /* We can't reason about selections made at runtime. */ + if (!CONST_INT_P (XVECEXP (trueop1, 0, 0))) + return 0; if (vec_duplicate_p (trueop0, &elt0)) return elt0; @@ -3703,7 +3706,9 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode, { rtx x = XVECEXP (trueop1, 0, i); - gcc_assert (CONST_INT_P (x)); + if (!CONST_INT_P (x)) + return 0; + RTVEC_ELT (v, i) = CONST_VECTOR_ELT (trueop0, INTVAL (x)); }