LLC(1) LLVM LLC(1)

llc - کامپایلر ایستای LLVM

llc [options] [filename]

دستور llc ورودی‌های منبع LLVM را برای یک معماری مشخص به زبان اسمبلی کامپایل می‌کند. سپس خروجی زبان اسمبلی می‌تواند از طریق یک اسمبلر و پیونددهندهٔ بومی برای تولید یک فایل اجرایی بومی مورد استفاده قرار گیرد.

انتخاب معماری برای کد اسمبلی خروجی به‌طور خودکار از روی فایل ورودی تعیین می‌شود، مگر اینکه گزینهٔ -march برای لغو مقدار پیش‌فرض به کار گرفته شود.

اگر filename برابر با "-" باشد یا وارد نشود، llc از ورودی استاندارد می‌خواند. در غیر این صورت، از filename خوانده خواهد شد. ورودی‌ها می‌توانند در قالب زبان اسمبلی LLVM (.ll) یا قالب بیت‌کد LLVM (.bc) باشند.

در صورتی که گزینهٔ -o مشخص نشده باشد و ورودی از ورودی استاندارد دریافت شود، llc خروجی خود را به خروجی استاندارد ارسال خواهد کرد. اگر گزینهٔ -o مقدار "-" را مشخص کند، خروجی نیز به خروجی استاندارد ارسال می‌شود.

اگر هیچ گزینهٔ -o مشخص نشده باشد و فایلی به غیر از "-" به عنوان ورودی داده شود، llc نام فایل خروجی را با در نظر گرفتن نام فایل ورودی، حذف هرگونه پسوند موجود .bc و افزودن پسوند .s ایجاد می‌کند.

سایر گزینه‌های llc در زیر شرح داده شده‌اند.

چاپ خلاصه‌ای از گزینه‌های خط فرمان.
ارسال گزینه‌های مخصوص هدف برای InstPrinter. به گزینهٔ -M در llvm-objdump(1) <llvm-objdump.html> مراجعه کنید.
استفاده از <filename> به عنوان نام فایل خروجی. برای جزئیات بیشتر به خلاصهٔ بالا مراجعه کنید.
تولید کد در سطوح بهینه‌سازی مختلف. این سطوح متناظر با سطوح بهینه‌سازی -O0، -O1، -O2 و -O3 هستند که توسط clang استفاده می‌شوند.
جایگزینی target triple مشخص‌شده در فایل ورودی با رشتهٔ تعیین‌شده.
تعیین معماری مورد نظر برای تولید کد اسمبلی، با اولویت بر هدف کدگذاری‌شده در فایل ورودی. برای مشاهدهٔ فهرستی از معماری‌های معتبر، خروجی llc -help را ببینید. به‌طور پیش‌فرض این مقدار از target triple استنباط شده یا به‌طور خودکار روی معماری جاری تشخیص داده می‌شود.
مشخص کردن یک تراشهٔ خاص در معماری جاری برای تولید کد. به‌طور پیش‌فرض این مقدار از target triple استنباط شده و به‌صورت خودکار روی معماری جاری تشخیص داده می‌شود. برای مشاهدهٔ فهرستی از پردازنده‌های دردسترس، استفاده کنید از:
llvm-as < /dev/null | llc -march=xyz -mcpu=help
تعیین نوع خروجی که llc باید تولید کند. گزینه‌ها عبارتند از: asm برای اسمبلی متنی ('.s')، obj برای فایل‌های شیء بومی ('.o') و null برای عدم تولید خروجی (جهت آزمایش کارایی).

توجه داشته باشید که همهٔ اهداف از تمامی گزینه‌ها پشتیبانی نمی‌کنند.

بازنویسی یا کنترل ویژگی‌های خاص هدف، مانند فعال یا غیرفعال بودن عملیات SIMD. مجموعه ویژگی‌های پیش‌فرض توسط پردازندهٔ فعلی تنظیم می‌شود. برای دیدن فهرستی از ویژگی‌های دردسترس، استفاده کنید از:
llvm-as < /dev/null | llc -march=xyz -mattr=help
مشخص کردن اثر بهینه‌سازی حذف اشاره‌گر فریم (all، non-leaf، none).
غیرفعال کردن بهینه‌سازی‌هایی که ممکن است دقت اضافی برای ممیز شناور تولید کنند. توجه داشته باشید که این گزینه می‌تواند سرعت اجرای کد را در برخی سیستم‌ها (مانند X86) به شدت کاهش دهد.
فعال‌سازی بهینه‌سازی‌هایی که نبود مقادیر بی‌نهایت (Inf) را فرض می‌کنند.
فعال‌سازی بهینه‌سازی‌هایی که نبود مقادیر ناعدد (NAN) را فرض می‌کنند.
فعال‌سازی بهینه‌سازی‌های ریاضی ممیز شناور که علامت صفر (0) را بی‌اهمیت فرض می‌کنند.
فعال‌سازی تنظیم صفت ساخت استثناهای ممیز شناور جهت عدم استفاده از استثناها.
چاپ آمارهای ثبت‌شده توسط مراحل (passes) تولید کد.
ذخیرهٔ آمارهای LLVM در یک فایل در دایرکتوری جاری (--save-stats/"--save-stats=cwd") یا دایرکتوری فایل خروجی ("--save-stats=obj") در قالب JSON.
ثبت مدت زمان مورد نیاز برای هر مرحله و چاپ گزارش در خطای استاندارد.
بارگذاری پویای dso_path (مسیری به یک شیء مشترک پویا) که یک هدف LLVM را پیاده‌سازی می‌کند. این کار امکان استفاده از نام هدف را با گزینهٔ -march فراهم می‌سازد تا بتوان برای آن هدف کد تولید کرد.
تعیین نسخهٔ EABI جهت مطابقت. نسخه‌های معتبر EABI عبارتند از gnu، 4 و 5. مقدار پیش‌فرض (default) به triple بستگی دارد.
تولید بخش .stack_sizes که حاوی فراداده‌های اندازهٔ پشته است. این بخش شامل آرایه‌ای از جفت‌های مقادیر نماد تابع (اندازهٔ اشاره‌گر) و اندازه‌های پشته (LEB128 بدون علامت) است. مقادیر اندازهٔ پشته تنها شامل فضای تخصیص‌یافته در مقدمهٔ تابع (prologue) هستند. توابعی با تخصیص پشتهٔ پویا در این بخش گنجانده نمی‌شوند.
تولید بخش __remarks (در MachO) که حاوی فراداده‌های مربوط به هشدارهای تشخیصی (remark diagnostics) است.

چاپ کد ماشین تولیدشده پس از انتخاب دستورالعمل (instruction selection) (کاربردی برای اشکال‌زدایی).
مشخص کردن تخصیص‌دهندهٔ ثبات (register allocator) برای استفاده. تخصیص‌دهنده‌های معتبر ثبات عبارتند از:

basic

تخصیص‌دهندهٔ پایهٔ ثبات.

fast

تخصیص‌دهندهٔ سریع ثبات. این گزینه پیش‌فرض کدهای بهینه‌سازی‌نشده است.

greedy

تخصیص‌دهندهٔ حریصانهٔ ثبات. این گزینه پیش‌فرض کدهای بهینه‌سازی‌شده است.

pbqp

تخصیص‌دهندهٔ ثبات بر پایهٔ 'Partitioned Boolean Quadratic Programming'.
مشخص کردن سرریزکننده (spiller) برای تخصیص‌دهنده‌های ثباتی که از آن پشتیبانی می‌کنند. در حال حاضر این گزینه فقط توسط تخصیص‌دهندهٔ ثبات پیمایش خطی (linear scan) استفاده می‌شود. مقدار پیش‌فرض spiller برابر با local است. مقادیر معتبر عبارتند از:

simple

سرریزکنندهٔ ساده

local

سرریزکنندهٔ محلی

مشخص کردن خروجی کد اسمبلی بر اساس ساختار نحوی AT&T (پیش‌فرض) یا ساختار نحوی Intel.

در صورت موفقیت، llc با مقدار 0 خارج می‌شود. در غیر این صورت، اگر خطایی رخ دهد، با یک مقدار غیرصفر خارج خواهد شد.

lli(1) <lli.html>

نگه‌داری‌شده توسط تیم LLVM (https://llvm.org).

2003-2026، پروژهٔ LLVM

2026-07-15 22