From eb585d46c4a266c747632d5693ef19d60ffc3700 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 22 Mar 2016 23:30:26 -0400 Subject: [PATCH 12/91] FIXME: handle EXPR_LIST etc; handle CODE_LABEL --- gcc/read-rtl.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 78 insertions(+), 16 deletions(-) diff --git a/gcc/read-rtl.c b/gcc/read-rtl.c index 3e06ddc..f622981 100644 --- a/gcc/read-rtl.c +++ b/gcc/read-rtl.c @@ -1121,12 +1121,21 @@ one_time_initialization (void) #ifndef GENERATOR_FILE static int +parse_reg_note_name (const char *string) +{ + for (int i = 0; i < REG_NOTE_MAX; i++) + if (0 == strcmp (string, GET_REG_NOTE_NAME (i))) + return i; + fatal_with_file_and_line ("unrecognized REG_NOTE name: `%s'", string); +} + +static int parse_note_insn_name (const char *string) { for (int i = 0; i < NOTE_INSN_MAX; i++) if (0 == strcmp (string, GET_NOTE_INSN_NAME (i))) return i; - fatal_with_file_and_line ("unrecognized NOTE_INSN name: `%s'", string); + fatal_with_file_and_line ("unrecognized NOTE_INSN name: `%s'", string); } #endif /* #ifndef GENERATOR_FILE */ @@ -1222,6 +1231,24 @@ read_rtx_code (const char *code_name) } } while (1); + /* Read REG_NOTE names for EXPR_LIST and INSN_LIST. */ +#ifndef GENERATOR_FILE + if (GET_CODE (return_rtx) == EXPR_LIST + || GET_CODE (return_rtx) == INSN_LIST + || GET_CODE (return_rtx) == INT_LIST) + { + char ch = read_char (); + if (ch == ':') + { + read_name (&name); + PUT_MODE_RAW (return_rtx, + (machine_mode)parse_reg_note_name (name.string)); + } + else + unread_char (ch); + } +#endif + if (INSN_CHAIN_CODE_P (code)) { read_name (&name); @@ -1248,6 +1275,16 @@ read_rtx_code (const char *code_name) case '0': if (code == REG) ORIGINAL_REGNO (return_rtx) = REGNO (return_rtx); + else if (i == 7 && JUMP_P (return_rtx)) + { +#ifndef GENERATOR_FILE + /* TODO: parse the jump label. */ + char ch; + while ((ch = read_char ()) != ')') + ; + unread_char (')'); +#endif + } break; case 'e': @@ -1532,25 +1569,50 @@ read_rtx_code (const char *code_name) } #ifndef GENERATOR_FILE - if (MEM_P (return_rtx)) + switch (GET_CODE (return_rtx)) { - char ch; - ch = read_char (); - if (ch != ' ') - fatal_with_file_and_line ("missing ' '"); - ch = read_char (); - if (ch != '[') - fatal_with_file_and_line ("missing '['"); - read_name (&name); - MEM_ALIAS_SET (return_rtx) = atoi (name.string); - // FIXME etc... - do + case MEM: { + char ch; ch = read_char (); - if (ch == ']') - break; + if (ch != ' ') + fatal_with_file_and_line ("missing ' '"); + ch = read_char (); + if (ch != '[') + fatal_with_file_and_line ("missing '['"); + read_name (&name); + MEM_ALIAS_SET (return_rtx) = atoi (name.string); + // FIXME etc... + do + { + ch = read_char (); + if (ch == ']') + break; + } + while (1); + } + break; + + case CODE_LABEL: + { + /* TODO: parse LABEL_NUSES. */ + /* TODO: parse LABEL_KIND. */ + /* For now, skip until closing ')'. */ + do + { + char ch = read_char (); + if (ch == ')') + { + unread_char (ch); + break; + } + } + while (1); } - while (1); + break; + + default: + break; } #endif -- 1.8.5.3