У меня есть две функции LLVM, которые используют API. Примерно так:
define void @funcA() {
...
call void @api_set(i32 %someValue)
...
}
define void @funcB() {
...
%sameValue = call i32 @api_get()
...
}
declare void @api_set(i32)
declare i32 @api_get()
Функции api_set
и api_get
являются черными ящиками для оптимизатора.
Однако я знаю, что для этих конкретных вызовов %someValue
in funcA
всегда будет равно %sameValue
в funcB
.
Когда LLVM оптимизирует эти функции, проход с постоянным распространением может обнаружить, что %someValue
можно заменить константой. Есть ли способ сказать LLVM, что разрешено также заменить %sameValue
, когда он заменяет %someValue
? Возможно, атрибут / метаданные / et c? Что-то более простое, что я упускаю?
Я уже сделал проход, который проверяет это, и он работает, но этот проход имеет такую простую спецификацию, что я думаю, что есть более простой / более легкий способ достижения this.
PS Если есть способ сделать это в C, это тоже будет полезно.