[AArch64] Handle iterator definitions with conditionals in geniterator.sh
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Fri, 17 Jun 2016 08:27:35 +0000 (08:27 +0000)
committerSzabolcs Nagy <nsz@gcc.gnu.org>
Fri, 17 Jun 2016 08:27:35 +0000 (08:27 +0000)
gcc/
2016-06-17  Szabolcs Nagy  <szabolcs.nagy@arm.com>

* config/aarch64/geniterators.sh: Handle parenthesised conditions.

From-SVN: r237548

gcc/ChangeLog
gcc/config/aarch64/geniterators.sh

index f22ac889bffff0742ebd476583e23a6ec671dd35..f6ca6f6163cec1ab39c944e3d3a9cd085ee340a9 100644 (file)
@@ -1,3 +1,7 @@
+2016-06-17  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+       * config/aarch64/geniterators.sh: Handle parenthesised conditions.
+
 2016-06-16  John David Anglin  <danglin@gcc.gnu.org>
 
        * config/pa/pa.c (pa_output_pic_pcrel_sequence): New.
index ec1b1ea539a4fdd4f729a329630785c78d4e1cce..8baa244009c27a904313903b60fe48779a72094d 100644 (file)
 # BUILTIN_<ITERATOR> macros, which expand to VAR<N> Macros covering the
 # same set of modes as the iterator in iterators.md
 #
-# Find the <ITERATOR> definitions (may span several lines), skip the ones
-# which does not have a simple format because it contains characters we
-# don't want to or can't handle (e.g P, PTR iterators change depending on
-# Pmode and ptr_mode).
+# Find the <ITERATOR> definitions (may span several lines).
 LC_ALL=C awk '
 BEGIN {
        print "/* -*- buffer-read-only: t -*- */"
@@ -49,12 +46,24 @@ iterdef {
        sub(/.*\(define_mode_iterator/, "", s)
 }
 
-iterdef && s ~ /\)/ {
+iterdef {
+       # Count the parentheses, the iterator definition ends
+       # if there are more closing ones than opening ones.
+       nopen = gsub(/\(/, "(", s)
+       nclose = gsub(/\)/, ")", s)
+       if (nopen >= nclose)
+               next
+
        iterdef = 0
 
        gsub(/[ \t]+/, " ", s)
-       sub(/ *\).*/, "", s)
+       sub(/ *\)[^)]*$/, "", s)
        sub(/^ /, "", s)
+
+       # Drop the conditions.
+       gsub(/ *"[^"]*" *\)/, "", s)
+       gsub(/\( */, "", s)
+
        if (s !~ /^[A-Za-z0-9_]+ \[[A-Z0-9 ]*\]$/)
                next
        sub(/\[ */, "", s)