LINUX.ORG.RU

Извращение с emerge + clang

 


0

1

Собственно, появилась вот такая идея: хочется потестить, на что же все-таки способен clang.

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

1) допустим, я хочу поставить всё, что возможно, используя clang -flto, что невозможно - просто clang, что и так невозможно - gcc.

2) допустим, я хочу поставить всё, что возможно, используя оптимизатор кода clang (через преобразование в байт-код, оптимизацию и собственно компиляцию, возможно, параллельно пользуясь некоторыми другими плюшками clang), что заменяет одну строчку в Makefile тремя такого вида:

clang -O3 -emit-llvm hello.c -c -o hello.bc

llc hello.bc -o hello.s

gcc hello.s -o hello.native 
(взято отсюда)

Вопрос: какая религиозная практика позволяет так переделывать ./configure автоматом?

★★

Последнее исправление: aido (всего исправлений: 1)

Единственное, что мне в голову приходит - написать скрипт, который будет искать и заменять нужные строчки в ./configure и встроить его в emerge перед конфигурацией системы. Хотя может это уже реализовано...

aido ★★
() автор топика

какая религиозная практика позволяет так переделывать ./configure автоматом

sed.

Сама затея лишена смысла, шланг в 99% случаев не сгенерирует более оптимальный код (более компактный — возможно). Как и lto — относительно бесполезная фича. При этом зачастую необходимо изменять скрипты сборки каждого отдельного пакета и более чем вероятно что-то сломается при сборке. Единственно по-настоящему оптимизирующей функцией компилятора можно считать pgo (в том числе благодаря включаемым в этом режиме небезопасным флагам), но для него необходима двукратная компиляция и на примере жирнолиса особого профита может не иметь (он будет измерятся парой процентов на нормальных приложениях, где основные ресурсы уходят на именно вычисления, а не на накладные расходы, связанные с кодом).

Гугли про компиляцию в генту средствами icc, если я не ошибаюсь раньше он умел в векторизацию лучше gcc.

wakuwaku ★★★★
()
Последнее исправление: wakuwaku (всего исправлений: 1)
#!/bin/sh
clang++ -std=c++1y -march=native -O3 test.cc -c -emit-llvm
llc test.bc -o test1.s

clang++ -std=c++1y -march=native -O3 test.cc -S

diff --unified=0 test1.s test.s
$ ./test.sh
--- test1.s     2014-09-06 07:08:25.000000000 +0400
+++ test.s      2014-09-06 07:08:26.000000000 +0400
@@ -1 +1 @@
-       .file   "test.bc"
+       .file   "test.cc"
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.