2014-10-30 12 views
2

Я пытаюсь глубже понять процесс выбора команд в llvm и для этого я отлаживаю пошаговую функцию CodeGenAndEmitDAG. Я напечатал небольшую функцию (см. Ниже) непосредственно перед шагом комбайна - первым шагом в вышеуказанной функции. На графике я вижу синие линии, и кажется, что они всегда указывают на «ch», что, я думаю, означает «другой» тип машинного значения. То, что я не понимаю, - это смысл синих линий ... что это за зависимость? И правильно ли я имею в виду значение «ch»? это «другое»? enter image description hereЧто такое машинное значение типа «other» mean in llvm SDnodes

+0

Я пытаюсь понять эти узлы, линии и типы тоже, пожалуйста, вы можете предоставить любые полезные ссылки или ключевые слова. Заранее спасибо. –

+1

вы можете проверить следующий файл в коде llvm: include/llvm/CodeGen/ISDOpcodes.h - есть некоторые объяснения там. – yehudahs

ответ

3

Пунктирные синие стрелки представляют собой зависимости от потока данных между командами и обеспечивают выполнение определенного порядка между ними. Например, магазины и грузы, которые могут обращаться к одной и той же памяти, не должны переупорядочиваться, , хотя между ними нет зависимости данных. В таких случаях для представления такой скрытой зависимости используются синие стрелки . Эти синие стрелки потребляют значения цепей (ch) типа Other.

Каждая DAG имеет специальный EntryToken типа Other, который поставляет начальное значение цепочки для базового блока.

Рассмотрим следующий пример. Обратите внимание на зависимость управления (синяя стрелка) между загрузкой и хранением, поскольку они могут указывать на одну и ту же память. Также обратите внимание на красную стрелку (Клей), которая склеивает две инструкции вместе.

int foo(int *a, int *b) { 
    a[0] = 42; 
    return b[0]; 
} 

enter image description here

+0

имеют смысл, но о синей линии между copyToReg (0x2efac80 - после инструкции по загрузке) в инструкции магазина? инструкция загрузки действительно зависит от магазина, но инструкции после нагрузки должны зависеть от нагрузки, а не от хранилища ... – yehudahs