aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTamar Christina <tamar.christina@arm.com>2017-07-25 13:25:36 +0000
committerTamar Christina <tnfchris@gcc.gnu.org>2017-07-25 13:25:36 +0000
commitb3afe7922ac31f1cec1f200e1259287938cbd7e9 (patch)
treeb21f110b4948885eba9e593215aa2c0619f49216 /gcc
parent1aa54f90e68dc927e80e14c7e4bf9b42525e3c76 (diff)
downloadgcc-b3afe7922ac31f1cec1f200e1259287938cbd7e9.zip
gcc-b3afe7922ac31f1cec1f200e1259287938cbd7e9.tar.gz
gcc-b3afe7922ac31f1cec1f200e1259287938cbd7e9.tar.bz2
parsecpu.awk (all_cores): Remove duplicates.
2017-07-25 Tamar Christina <tamar.christina@arm.com> * config/arm/parsecpu.awk (all_cores): Remove duplicates. From-SVN: r250519
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/arm/parsecpu.awk35
2 files changed, 36 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4597d3b..c55e67a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2017-07-25 Tamar Christina <tamar.christina@arm.com>
+
+ * config/arm/parsecpu.awk (all_cores): Remove duplicates.
+
2017-07-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/81455
diff --git a/gcc/config/arm/parsecpu.awk b/gcc/config/arm/parsecpu.awk
index 9d01e2c..070d193 100644
--- a/gcc/config/arm/parsecpu.awk
+++ b/gcc/config/arm/parsecpu.awk
@@ -223,10 +223,39 @@ function gen_comm_data () {
if (arch_opt_remove[feats[1],feats[m]] == "true") {
fatal("cannot remove features from architecture specs")
}
- print " " arch_opt_isa[feats[1],feats[m]] ","
+ # The isa_features array that is being initialized here has a length
+ # of max isa_bit_num, which is the last entry in the enum.
+ # Logically this means that the number of features is implicitly
+ # never more than the number of feature bits we have. This is only
+ # true if we don't emit duplicates here. So keep track of which
+ # options we have already emitted so we don't emit them twice.
+ nopts = split (arch_opt_isa[feats[1],feats[m]], opts, ",")
+ for (i = 1; i <= nopts; i++) {
+ if (! (opts[i] in seen)) {
+ print " " opts[i] ","
+ seen[opts[i]]
+ }
+ }
+ }
+ if (cpus[n] in cpu_fpu) {
+ nopts = split (fpu_isa[cpu_fpu[cpus[n]]], opts, ",")
+ for (i = 1; i <= nopts; i++) {
+ if (! (opts[i] in seen)) {
+ print " " opts[i] ","
+ seen[opts[i]]
+ }
+ }
+ }
+ if (cpus[n] in cpu_isa) {
+ nopts = split (cpu_isa[cpus[n]], opts, ",")
+ for (i = 1; i <= nopts; i++) {
+ if (! (opts[i] in seen)) {
+ print " " opts[i] ","
+ seen[opts[i]]
+ }
+ }
}
- if (cpus[n] in cpu_fpu) print " " fpu_isa[cpu_fpu[cpus[n]]] ","
- if (cpus[n] in cpu_isa) print " " cpu_isa[cpus[n]] ","
+ delete seen
print " isa_nobit"
print " }"
print " },"