Получение соответствующего узла Gimple для регистра в RTL - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь понять проход расширения в G CC. Я пишу плагин для анализа кода до и после расширенного прохода.

Временные переменные Gimple (переменные, созданные с целью преобразования в 3-адресный код) преобразуются в регистры на этом этапе. Я хочу знать, какой из регистров в RTL соответствует каким временным переменным. Например:

a = b + c + d;

В Gimple:

_1 = b_1 + c_1;
a_2 = _1 + d_1

В RTL:

r90:SI=[r82:DI-0x10]
r91:SI=[r82:DI-0xc]
{r87:SI=r90:SI+r91:SI;clobber flags:CC;}
r95:SI=[r82:DI-0x8]
{r94:SI=r87:SI+r95:SI;clobber flags:CC;}
[r82:DI-0x4]=r94:SI

Здесь r87 используется непосредственно для временной переменной _1. Я хотел бы получить эту корреспонденцию.

Я изначально использовал G CC -9. Я использовал макрос MEM_EXPR (RTX), который возвращал дерево Gimple, соответствующее этому регистру. Если регистр не соответствует узлу Gimple, этот макрос вернет NULL. Это именно то, что я хотел.

Теперь я пытаюсь реализовать то же самое в G CC -4.7.2, который имеет тот же макрос. Но этот макрос вызывает ошибку сегментации. Я также попытался использовать MEM_P (RTX), чтобы проверить, соответствует ли регистр временной переменной перед использованием MEM_EXPR (RTX). Однако этот макрос возвращает значение False, даже если я ожидаю, что он вернет значение True.

Что я здесь не так делаю? Есть ли другой макрос, который дает информацию в G CC -4.7.2?

...