aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-01-11 14:55:50 +0100
committerRichard Biener <rguenther@suse.de>2024-01-12 07:58:26 +0100
commit655b6cb1ea3a0e23124d77dccd5d174ac59c429c (patch)
tree55a83df1f1737186aba1a71ceb0f17197737a55e
parentcc9cac9f073a9517f5b7fcffcb7c28b166339491 (diff)
downloadgcc-655b6cb1ea3a0e23124d77dccd5d174ac59c429c.zip
gcc-655b6cb1ea3a0e23124d77dccd5d174ac59c429c.tar.gz
gcc-655b6cb1ea3a0e23124d77dccd5d174ac59c429c.tar.bz2
target/112280 - properly guard permute query
The following adds guards avoiding code generation to expand_perm_as_a_vlbr_vstbr_candidate when d.testing_p. PR target/112280 * config/s390/s390.cc (expand_perm_as_a_vlbr_vstbr_candidate): Do not generate code when d.testing_p.
-rw-r--r--gcc/config/s390/s390.cc36
1 files changed, 24 insertions, 12 deletions
diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index 748ad9c..f182c26 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -17867,33 +17867,45 @@ expand_perm_as_a_vlbr_vstbr_candidate (const struct expand_vec_perm_d &d)
if (memcmp (d.perm, perm[0], MAX_VECT_LEN) == 0)
{
- rtx target = gen_rtx_SUBREG (V8HImode, d.target, 0);
- rtx op0 = gen_rtx_SUBREG (V8HImode, d.op0, 0);
- emit_insn (gen_bswapv8hi (target, op0));
+ if (!d.testing_p)
+ {
+ rtx target = gen_rtx_SUBREG (V8HImode, d.target, 0);
+ rtx op0 = gen_rtx_SUBREG (V8HImode, d.op0, 0);
+ emit_insn (gen_bswapv8hi (target, op0));
+ }
return true;
}
if (memcmp (d.perm, perm[1], MAX_VECT_LEN) == 0)
{
- rtx target = gen_rtx_SUBREG (V4SImode, d.target, 0);
- rtx op0 = gen_rtx_SUBREG (V4SImode, d.op0, 0);
- emit_insn (gen_bswapv4si (target, op0));
+ if (!d.testing_p)
+ {
+ rtx target = gen_rtx_SUBREG (V4SImode, d.target, 0);
+ rtx op0 = gen_rtx_SUBREG (V4SImode, d.op0, 0);
+ emit_insn (gen_bswapv4si (target, op0));
+ }
return true;
}
if (memcmp (d.perm, perm[2], MAX_VECT_LEN) == 0)
{
- rtx target = gen_rtx_SUBREG (V2DImode, d.target, 0);
- rtx op0 = gen_rtx_SUBREG (V2DImode, d.op0, 0);
- emit_insn (gen_bswapv2di (target, op0));
+ if (!d.testing_p)
+ {
+ rtx target = gen_rtx_SUBREG (V2DImode, d.target, 0);
+ rtx op0 = gen_rtx_SUBREG (V2DImode, d.op0, 0);
+ emit_insn (gen_bswapv2di (target, op0));
+ }
return true;
}
if (memcmp (d.perm, perm[3], MAX_VECT_LEN) == 0)
{
- rtx target = gen_rtx_SUBREG (V1TImode, d.target, 0);
- rtx op0 = gen_rtx_SUBREG (V1TImode, d.op0, 0);
- emit_insn (gen_bswapv1ti (target, op0));
+ if (!d.testing_p)
+ {
+ rtx target = gen_rtx_SUBREG (V1TImode, d.target, 0);
+ rtx op0 = gen_rtx_SUBREG (V1TImode, d.op0, 0);
+ emit_insn (gen_bswapv1ti (target, op0));
+ }
return true;
}