Как я могу запустить пользовательские проходы LLVM для IR-файла LLVM кода CUDA с помощью opt?

У меня возникла проблема с запуском пользовательских проходов LLVM для файла «.ll» кода CUDA. Например, у меня есть пример кода CUDA с именемsample1.cu. Я скомпилировал код CUDA, используя следующую команду.

      ./bin/clang++ -flegacy-pass-manager -g -Xclang -disable-O0-optnone -load -Xclang ./lib/custom_pass.so --cuda-gpu-arch=sm_35 -L/usr/local/cuda-11.7/targets/x86_64-linux/lib/ -L/usr/local/cuda --no-cuda-version-check -lcudart_static -ldl -lrt -pthread -o /home/soumik/Documents/Executables/

Однако после сброса.llфайлов, я получил два файла LLVM IR вместо одного. Один былsimple1.ll, но другой былsimple1-cuda-nvptx64-nvidia-cuda-sm_75.ll. если я проведу свои пропуска наsimple1.ll он пропустит хранилище информации в другом файле. Как преодолеть эту проблему?

Я запускаю свой пропуск, используя следующую команду:

      ./bin/opt --mem2reg --enable-new-pm=0 -load lib/sample_pass.so -sample_pass  /home/soumik/Documents/sample_analysis/Test_Programs/simple1.ll

Я попытался связать два файла в одинllфайл с помощью следующей команды:

      ./bin/llvm-link simple1-cuda-nvptx64-nvidia-cuda-sm_35.ll simple1.ll -o simple1_link.ll

Но он генерирует следующее предупреждение:

целевой макет данных, целевое тройное несовпадение

Более того, когда я пытаюсь запустить пользовательский проход в файле simple1_link.ll, он выдает ошибку времени выполнения, говорящую:

«sm_75» не является распознаваемым процессором для этой цели (процессор игнорируется). ОШИБКА LLVM: 64-битный код запрошен на подцели, которая его не поддерживает!

Может ли кто-нибудь помочь мне понять, где я ошибаюсь?

0 ответов

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