struct expand_operand ops[6];
int aarch64_cond;
+ /* Exit early for modes that are ot handled to avoid O(n^2) part of expand_operands. */
+ op_mode = TYPE_MODE (TREE_TYPE (treeop0));
+ if (!(op_mode == QImode || op_mode == HImode || op_mode == SImode || op_mode == DImode
+ || op_mode == SFmode || op_mode == DFmode))
+ return NULL_RTX;
+
push_to_sequence (*prep_seq);
expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1, EXPAND_NORMAL);
struct expand_operand ops[5];
int dfv;
- push_to_sequence (*prep_seq);
- expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1, EXPAND_NORMAL);
-
- cmp_mode = op_mode = GET_MODE (op0);
+ /* Exit early for non integer modes to avoid O(n^2) part of expand_operands. */
+ cmp_mode = op_mode = TYPE_MODE (TREE_TYPE (treeop0));
if (!(op_mode == DImode || op_mode == SImode || op_mode == HImode
|| op_mode == QImode))
- {
- end_sequence ();
- return NULL_RTX;
- }
+ return NULL_RTX;
+
+ push_to_sequence (*prep_seq);
+ expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1, EXPAND_NORMAL);
icode = code_for_ccmp (op_mode);
--- /dev/null
+/* { dg-compile } */
+/* { dg-additional-options "-mapxf" { target { { i?86-*-* x86_64-*-* } && { ! ia32 } } } } */
+/* PR middle-end/99782 */
+
+int hb;
+
+void
+w4 (__int128 uv, int ng)
+{
+ int vh;
+
+ for (vh = 0; vh < 14; ++vh)
+ {
+ ++ng;
+ hb = (hb == uv) && ng;
+ }
+}