}
}
+/* Return 1 iff PAT (a SINGLE_SET) is a rotate 64 bit expression; else return
+ 0. */
+
+static bool
+pattern_is_rotate64 (rtx pat)
+{
+ rtx rot = SET_SRC (pat);
+
+ if (GET_CODE (rot) == ROTATE && CONST_INT_P (XEXP (rot, 1))
+ && INTVAL (XEXP (rot, 1)) == 64)
+ return true;
+
+ return false;
+}
+
/* Return 1 iff INSN is a load insn, including permuting loads that
represent an lvxd2x instruction; else return 0. */
static unsigned int
&& MEM_P (XEXP (SET_SRC (body), 0)))
return 1;
+ if (pattern_is_rotate64 (body) && MEM_P (XEXP (SET_SRC (body), 0)))
+ return 1;
+
return 0;
}
if (GET_CODE (body) != SET)
return 0;
rtx rhs = SET_SRC (body);
+ if (pattern_is_rotate64 (body))
+ return 1;
if (GET_CODE (rhs) != VEC_SELECT)
return 0;
rtx parallel = XEXP (rhs, 1);
false. */
rtx body = PATTERN (def_insn);
if (GET_CODE (body) != SET
- || GET_CODE (SET_SRC (body)) != VEC_SELECT
+ || !(GET_CODE (SET_SRC (body)) == VEC_SELECT
+ || pattern_is_rotate64 (body))
|| !MEM_P (XEXP (SET_SRC (body), 0)))
return false;
false. */
rtx body = PATTERN (def_insn);
if (GET_CODE (body) != SET
- || GET_CODE (SET_SRC (body)) != VEC_SELECT
+ || !(GET_CODE (SET_SRC (body)) == VEC_SELECT
+ || pattern_is_rotate64 (body))
|| !MEM_P (XEXP (SET_SRC (body), 0)))
return false;
swap (indicated by code VEC_SELECT). */
rtx body = PATTERN (def_insn);
gcc_assert ((GET_CODE (body) == SET)
- && (GET_CODE (SET_SRC (body)) == VEC_SELECT)
+ && (GET_CODE (SET_SRC (body)) == VEC_SELECT
+ || pattern_is_rotate64 (body))
&& MEM_P (XEXP (SET_SRC (body), 0)));
rtx src_exp = XEXP (SET_SRC (body), 0);
{
rtx body = PATTERN (insn);
gcc_assert (GET_CODE (body) == SET
- && GET_CODE (SET_SRC (body)) == VEC_SELECT
+ && (GET_CODE (SET_SRC (body)) == VEC_SELECT
+ || pattern_is_rotate64 (body))
&& MEM_P (XEXP (SET_SRC (body), 0)));
rtx mem = XEXP (SET_SRC (body), 0);
rtx body = PATTERN (insn);
gcc_assert (GET_CODE (body) == SET
&& MEM_P (SET_DEST (body))
- && GET_CODE (SET_SRC (body)) == VEC_SELECT);
+ && (GET_CODE (SET_SRC (body)) == VEC_SELECT
+ || pattern_is_rotate64 (body)));
rtx mem = SET_DEST (body);
rtx base_reg = XEXP (mem, 0);