Предположим, что два llvm :: Values ​​* s в разных функциях равны - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть две функции 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, это тоже будет полезно.

...