From 9a9b681b385744229c7583940572f30447adb2de Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 16 May 2019 14:28:33 -0400 Subject: [PATCH] tcg: Do not recreate INDEX_op_neg_vec unless supported Use tcg_can_emit_vec_op instead of just TCG_TARGET_HAS_neg_vec, so that we check the type and vece for the actual operation. Backports commit ac383dde33405106469d04a78de1d76f1a730cb1 from qemu --- qemu/tcg/optimize.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/qemu/tcg/optimize.c b/qemu/tcg/optimize.c index 608fe4d2..6483bcf8 100644 --- a/qemu/tcg/optimize.c +++ b/qemu/tcg/optimize.c @@ -733,9 +733,13 @@ void tcg_optimize(TCGContext *s) } else if (opc == INDEX_op_sub_i64) { neg_op = INDEX_op_neg_i64; have_neg = TCG_TARGET_HAS_neg_i64; - } else { + } else if (TCG_TARGET_HAS_neg_vec) { + TCGType type = TCGOP_VECL(op) + TCG_TYPE_V64; + unsigned vece = TCGOP_VECE(op); neg_op = INDEX_op_neg_vec; - have_neg = TCG_TARGET_HAS_neg_vec; + have_neg = tcg_can_emit_vec_op(neg_op, type, vece) > 0; + } else { + break; } if (!have_neg) { break;