LLVM-REDUCE(1) LLVM LLVM-REDUCE(1)

llvm-reduce - کاهش‌دهنده خودکار موارد آزمون LLVM

llvm-reduce [options] [input...]

ابزار llvm-reduce پروژه‌ای است که می‌تواند برای کاهش اندازه موارد آزمون LLVM به کار رود. این ابزار با حذف کدهای زائد یا غیرضروری از موارد آزمون LLVM عمل می‌کند، در حالی که همچنان توانایی آن‌ها را در تشخیص باگ‌ها حفظ می‌نماید.

اگر input برابر با "-" باشد، llvm-reduce از ورودی استاندارد می‌خواند. در غیر این صورت، از نام‌فایل‌های مشخص‌شده خواهد خواند.

ابزار LLVM-Reduce ابزاری سودمند برای کاهش اندازه و پیچیدگی موارد آزمون LLVM است و شناسایی و اشکال‌زدایی مسائل را در زیرساخت کامپایلر LLVM ساده‌تر می‌کند.

نمایش گزینه‌های موجود (برای گزینه‌های بیشتر از --help-hidden استفاده کنید).
توقف عملیات در صورتی که هر کاهش منجر به ایجاد IR نامعتبر شود.
هشدار: این گزینه فایل ورودی شما را با نسخه کاهش‌یافته جایگزین خواهد کرد!
توصیف متنی خط لوله گذارها (pass pipeline)، همانند آنچه به opt -passes ارسال می‌شود.
حداکثر تعداد رشته‌ها (threads) برای پردازش تکه‌ها (chunks). برای غیرفعال کردن موازی‌سازی، مقدار را برابر با 1 قرار دهید.
حداکثر تعداد دفعات اجرای مجموعه کامل گذارهای دلتا (delta passes) (پیش‌فرض=5).
تنظیم سه‌گانه هدف (target triple).
ویژگی‌های مورد استفاده برای دیباگ خرابی‌ها (گزارش‌های خرابی، llvm-symbolizer و core dumpها) را غیرفعال نکن.
چاپ فهرست گذارهای دلتا، قابل ارسال به --delta-passes به‌صورت فهرستی جداشده با کاما.
گذارهای دلتایی که نباید اجرا شوند، جداشده با کاما. به‌طور پیش‌فرض، تمام گذارهای دلتا اجرا می‌شوند.
تعداد دفعات تقسیم تکه‌ها پیش از نخستین آزمون.

نکته: دانه‌بندی (Granularity) به سطح جزئیاتی اشاره دارد که فرایند کاهش در آن عمل می‌کند. دانه‌بندی کمتر به این معناست که فرایند کاهش در سطحی درشت‌دانه‌تر (coarse-grained) عمل می‌کند، در حالی که دانه‌بندی بیشتر به معنای عمل در سطحی ریزدانه‌تر (fine-grained) است.

نام آزمون جالب‌بودن (interesting-ness test) که باید اجرا شود.
آرگومان‌های ارسالی به آزمون جالب‌بودن.
چاپ اطلاعات دیباگ اضافی.
فایل‌های موقت را همیشه به‌جای IR متنی، به‌صورت بیت‌کد (bitcode) بنویس.
زبان ورودی به‌صورت ir یا mir.

در شرایط عادی، llvm-reduce مقدار 0 را برمی‌گرداند. در صورت بروز هرگونه خطا، یک کد خروج غیرصفر برمی‌گرداند. اگر آزمون جالب‌بودن گزارش دهد که ورودی اولیه جالب نبوده است، مقدار 2 را برمی‌گرداند.

از llvm-reduce می‌توان برای ساده‌سازی تستی که باعث خرابی (crash) کامپایلر می‌شود استفاده کرد.

برای مثال، فرض کنیم opt هنگام اجرا با -O2 بر روی فایل IR با نام test.ll با پیام خطای Assertion failed at line 1234 of WhateverFile.cpp دچار خرابی می‌شود.

مورد آزمون test.ll را می‌توان با فراخوانی دستور زیر کاهش داد:

$(LLVM_BUILD_FOLDER)/bin/llvm-reduce --test=script.sh <path to>/test.ll

اسکریپت پوسته ارائه‌شده به گزینه test شامل موارد زیر است:

$(LLVM_BUILD_FOLDER)/bin/opt -O2 -disable-output $1 \
  |& grep "Assertion failed at line 1234 of WhateverFile.cpp"

(در این اسکریپت، grep در صورت یافتن رشته با 0 خارج می‌شود و این مقدار تبدیل به وضعیت خروج کل اسکریپت خواهد شد.)

این مثال می‌تواند به ابزارهای دیگری که فایل‌های IR را پردازش می‌کنند، مانند llc نیز تعمیم داده شود.

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

2003-2026, LLVM Project

2026-07-15 22