То, что я пишу, является лишь предположением, потому что я только начинаю с LLVM, но я надеюсь, что это будет полезно.
В SSA Форма каждой инструкции:
- использует значения, предоставленные ранее выполненными инструкциями
- предоставляет значение (с результатом выполнения этой инструкции), которое используется другими.
Это так называемые цепочки use-def и def-use.
Если вы попытаетесь удалить инструкцию, результат которой (a.k.a. «предоставленное значение») используется другими инструкциями, чем вы разрываете цепочку инструкций.
Возможно, вас заинтересует итерация пользователей, которых вы удаляете, используя:
Руководство программиста LLVM: перебор цепочек def-use и use-def . Благодаря этому вы можете перебирать пользователей ( u ) значения, предоставленные инструкцией, вы хотите удалить ( inst ) и изменить их ссылку на другую (например, ) inst: add uv -> add X v ). Если вы уверены, что никто не использует инструкцию, которую вы хотите удалить, удалите ее. (В зависимости от того, были ли пройдены этапы анализа, вам может потребоваться, чтобы llvm pass manager знал, что анализ CFG необходимо обновить - если вы не обновите их самостоятельно).