Обнаружение массива в списке функций arg LLVM opt pass

Предположим, у меня есть следующий LLVM IR

определить void @foo(i32* %a, i32* %m) существительное { ...

и я вызываю foo, передавая массив для первого аргумента и передавая адрес переменной для m. Теперь мне нужно проанализировать список аргументов foo и определить, какой аргумент передается массиву, а какой - просто адрес указателя. Я знаю, что оба они на самом деле являются адресами, но предоставляет ли LLVM какие-то метаданные, чтобы я мог статически определить тип передаваемого сообщения.

Примечание: я пишу пропуск

1 ответ

Вы, вероятно, можете использовать тип "указатель на массив":

define void @foo([0 x i32]* %a, i32* %m)

Массив нулевого размера вполне допустим, и документация llvm гласит:

Нет ограничений на индексирование за пределами массива, подразумеваемого статическим типом

Другие вопросы по тегам