aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-07-06 08:26:02 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-07-06 08:26:02 +0000
commit96eb1765a38dd4074fdbaedef76b8b1fe1d7e175 (patch)
treee4ba0a6dd018a862eff0138ae1c3e1b885554ccf
parent193bee751a607fac9d85e0ce8e6462fb5de1b515 (diff)
downloadgcc-96eb1765a38dd4074fdbaedef76b8b1fe1d7e175.zip
gcc-96eb1765a38dd4074fdbaedef76b8b1fe1d7e175.tar.gz
gcc-96eb1765a38dd4074fdbaedef76b8b1fe1d7e175.tar.bz2
[amdgcn] Fix ambiguous .md attribute uses
This patch is part of a series that fixes ambiguous attribute uses in .md files, i.e. cases in which attributes didn't use <ITER:ATTR> to specify an iterator, and in which <ATTR> could have different values depending on the iterator chosen. I think this is a genuine bugfix for the case in which the 1REG_MODE and 1REG_ALT are different, since previously we would use the 1REG_MODE for both the comparison and the select, even though the operands being compared are 1REG_ALT rather than 1REG_MODE. 2019-07-06 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/gcn/gcn-valu.md (vcond<VEC_1REG_MODE:mode><VEC_1REG_ALT:mode>): Use gen_vec_cmp<VEC_1REG_ALT:mode>di rather than (implicitly) gen_vec_cmp<VEC_1REG_MODE:mode>di. Explicitly use gen_vcond_mask_<VEC_1REG_MODE:mode>di. (vcond<VEC_1REG_MODE:mode><VEC_1REG_ALT:mode>_exec): Likewise, but using the _exec comparison patterns. (vcondu<VEC_1REG_INT_MODE:mode><VEC_1REG_INT_ALT:mode>): Use gen_vec_cmp<VEC_1REG_INT_ALT:mode>di rather than (implicitly) gen_vec_cmp<VEC_1REG_INT_MODE:mode>di. Explicitly use gen_vcond_mask_<VEC_1REG_INT_MODE:mode>di. (vcondu<VEC_1REG_INT_MODE:mode><VEC_1REG_INT_ALT:mode>_exec): Likewise, but using the _exec comparison patterns. From-SVN: r273159
-rw-r--r--gcc/ChangeLog16
-rw-r--r--gcc/config/gcn/gcn-valu.md32
2 files changed, 32 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1ae6b1c..9dc0e09 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,21 @@
2019-07-06 Richard Sandiford <richard.sandiford@arm.com>
+ * config/gcn/gcn-valu.md
+ (vcond<VEC_1REG_MODE:mode><VEC_1REG_ALT:mode>): Use
+ gen_vec_cmp<VEC_1REG_ALT:mode>di rather than (implicitly)
+ gen_vec_cmp<VEC_1REG_MODE:mode>di. Explicitly use
+ gen_vcond_mask_<VEC_1REG_MODE:mode>di.
+ (vcond<VEC_1REG_MODE:mode><VEC_1REG_ALT:mode>_exec): Likewise,
+ but using the _exec comparison patterns.
+ (vcondu<VEC_1REG_INT_MODE:mode><VEC_1REG_INT_ALT:mode>): Use
+ gen_vec_cmp<VEC_1REG_INT_ALT:mode>di rather than (implicitly)
+ gen_vec_cmp<VEC_1REG_INT_MODE:mode>di. Explicitly use
+ gen_vcond_mask_<VEC_1REG_INT_MODE:mode>di.
+ (vcondu<VEC_1REG_INT_MODE:mode><VEC_1REG_INT_ALT:mode>_exec): Likewise,
+ but using the _exec comparison patterns.
+
+2019-07-06 Richard Sandiford <richard.sandiford@arm.com>
+
* config/arm/sync.md
(@atomic_compare_and_swap<CCSI:arch><NARROW:mode>_1): Use
<NARROW:sync_predtab> instead of (implicitly) <CCSI:sync_predtab>.
diff --git a/gcc/config/gcn/gcn-valu.md b/gcc/config/gcn/gcn-valu.md
index 3cc59dd..c7e8b16 100644
--- a/gcc/config/gcn/gcn-valu.md
+++ b/gcc/config/gcn/gcn-valu.md
@@ -2574,10 +2574,10 @@
""
{
rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_vec_cmp<mode>di (tmp, operands[3], operands[4],
- operands[5]));
- emit_insn (gen_vcond_mask_<mode>di (operands[0], operands[1], operands[2],
- tmp));
+ emit_insn (gen_vec_cmp<VEC_1REG_ALT:mode>di
+ (tmp, operands[3], operands[4], operands[5]));
+ emit_insn (gen_vcond_mask_<VEC_1REG_MODE:mode>di
+ (operands[0], operands[1], operands[2], tmp));
DONE;
})
@@ -2592,10 +2592,10 @@
""
{
rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_vec_cmp<mode>di_exec (tmp, operands[3], operands[4],
- operands[5], operands[6]));
- emit_insn (gen_vcond_mask_<mode>di (operands[0], operands[1], operands[2],
- tmp));
+ emit_insn (gen_vec_cmp<VEC_1REG_ALT:mode>di_exec
+ (tmp, operands[3], operands[4], operands[5], operands[6]));
+ emit_insn (gen_vcond_mask_<VEC_1REG_MODE:mode>di
+ (operands[0], operands[1], operands[2], tmp));
DONE;
})
@@ -2609,10 +2609,10 @@
""
{
rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_vec_cmp<mode>di (tmp, operands[3], operands[4],
- operands[5]));
- emit_insn (gen_vcond_mask_<mode>di (operands[0], operands[1], operands[2],
- tmp));
+ emit_insn (gen_vec_cmp<VEC_1REG_INT_ALT:mode>di
+ (tmp, operands[3], operands[4], operands[5]));
+ emit_insn (gen_vcond_mask_<VEC_1REG_INT_MODE:mode>di
+ (operands[0], operands[1], operands[2], tmp));
DONE;
})
@@ -2627,10 +2627,10 @@
""
{
rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_vec_cmp<mode>di_exec (tmp, operands[3], operands[4],
- operands[5], operands[6]));
- emit_insn (gen_vcond_mask_<mode>di (operands[0], operands[1], operands[2],
- tmp));
+ emit_insn (gen_vec_cmp<VEC_1REG_INT_ALT:mode>di_exec
+ (tmp, operands[3], operands[4], operands[5], operands[6]));
+ emit_insn (gen_vcond_mask_<VEC_1REG_INT_MODE:mode>di
+ (operands[0], operands[1], operands[2], tmp));
DONE;
})