Есть ли способ в llvm, что с помощью статического анализа я могу выяснить, является ли одна переменная определенной функцией других переменных?
Например: как и в программе cuda, я хочу узнать, учитывая переменную tid
, хранит ли она глобальный идентификатор потока или нет?
int tid = blockIdx.x * blockDim.x + threadId.x;
Редактировать: я пытаюсь выяснить, могу ли я написать проход, который анализирует программу и проверяет, основано ли любое расхождение или доступ к массиву только на этом глобальном идентификаторе, а не на других значениях, таких как blockID или local threadId. Я пытаюсь определить случаи, когда изменение gridDim программы cuda, blockDim не изменяет вывод программы, как, например, добавление вектора, я могу иметь gridDim как 128, blockDim как 4 или gridDim как 8, blockDim как 64. Выходные данные не влияет. Я делаю это в llvm, потому что я пытаюсь использовать среду компиляции под названием ocelot, которая конвертирует cuda в x86.