Skip to content

Commit

Permalink
tcg/optimize: Do not attempt to constant fold neg_vec
Browse files Browse the repository at this point in the history
Split out the tail of fold_neg to fold_neg_no_const so that we
can avoid attempting to constant fold vector negate.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2150
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
(cherry picked from commit e25fe88)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
(Mjt: context fixup in tests/tcg/aarch64/Makefile.target)
  • Loading branch information
rth7680 authored and Michael Tokarev committed Apr 10, 2024
1 parent fd01f5a commit b198998
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 10 deletions.
17 changes: 8 additions & 9 deletions tcg/optimize.c
Original file line number Diff line number Diff line change
Expand Up @@ -1634,16 +1634,10 @@ static bool fold_nand(OptContext *ctx, TCGOp *op)
return false;
}

static bool fold_neg(OptContext *ctx, TCGOp *op)
static bool fold_neg_no_const(OptContext *ctx, TCGOp *op)
{
uint64_t z_mask;

if (fold_const1(ctx, op)) {
return true;
}

/* Set to 1 all bits to the left of the rightmost. */
z_mask = arg_info(op->args[1])->z_mask;
uint64_t z_mask = arg_info(op->args[1])->z_mask;
ctx->z_mask = -(z_mask & -z_mask);

/*
Expand All @@ -1654,6 +1648,11 @@ static bool fold_neg(OptContext *ctx, TCGOp *op)
return true;
}

static bool fold_neg(OptContext *ctx, TCGOp *op)
{
return fold_const1(ctx, op) || fold_neg_no_const(ctx, op);
}

static bool fold_nor(OptContext *ctx, TCGOp *op)
{
if (fold_const2_commutative(ctx, op) ||
Expand Down Expand Up @@ -1949,7 +1948,7 @@ static bool fold_sub_to_neg(OptContext *ctx, TCGOp *op)
if (have_neg) {
op->opc = neg_op;
op->args[1] = op->args[2];
return fold_neg(ctx, op);
return fold_neg_no_const(ctx, op);
}
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion tests/tcg/aarch64/Makefile.target
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ VPATH += $(AARCH64_SRC)

# Base architecture tests
AARCH64_TESTS=fcvt pcalign-a64
AARCH64_TESTS += test-2248
AARCH64_TESTS += test-2248 test-2150

fcvt: LDFLAGS+=-lm

Expand Down
12 changes: 12 additions & 0 deletions tests/tcg/aarch64/test-2150.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* See https://gitlab.com/qemu-project/qemu/-/issues/2150 */

int main()
{
asm volatile(
"movi v6.4s, #1\n"
"movi v7.4s, #0\n"
"sub v6.2d, v7.2d, v6.2d\n"
: : : "v6", "v7");
return 0;
}

0 comments on commit b198998

Please sign in to comment.