LLVM-DIFF(1) LLVM LLVM-DIFF(1)

llvm-diff - ابزار مقایسه ساختاری LLVM

llvm-diff [options] module 1 module 2 [global name ...]

دستور llvm-diff ساختار دو ماژول LLVM را با تمرکز اصلی بر تفاوت‌ها در تعاریف توابع با یکدیگر مقایسه می‌کند. تفاوت‌های ناچیز، مانند تغییر در ترتیب متغیرهای سراسری یا نام مقادیر محلی، نادیده گرفته می‌شوند.

یک ماژول ورودی در صورتی که نام آن با '.ll' پایان یابد، به عنوان یک فایل اسمبلی تفسیر می‌شود؛ در غیر این صورت به عنوان یک فایل bitcode خوانده خواهد شد.

اگر فهرستی از نام‌های سراسری ارائه شود، فقط مقادیر دارای آن نام‌ها مقایسه می‌شوند؛ در غیر این صورت، تمام مقادیر سراسری مقایسه شده و برای متغیرهای سراسری که فقط در یکی از دو ماژول حضور دارند، پیام‌های تشخیصی تولید می‌شود.

دستور llvm-diff دو تابع را از طریق مقایسه بلوک‌های پایه (basic blocks) آن‌ها با شروع از بلوک‌های ورودی مقایسه می‌کند. اگر پایان‌دهنده‌ها (terminators) مطابقت داشته باشند، جانشین‌های متناظر مقایسه می‌شوند؛ در غیر این صورت نادیده گرفته خواهند شد. این الگوریتم به تغییرات در جریان کنترل (control flow) بسیار حساس است که معمولاً مانع از شناسایی تغییرات پس‌آیند (downstream) می‌شود.

ابزار llvm-diff به عنوان یک ابزار اشکال‌زدایی برای توسعه‌دهندگان passها و فرانت‌اند‌های LLVM در نظر گرفته شده است. این ابزار قالب خروجی پایداری ندارد.

اگر llvm-diff هیچ تفاوتی بین ماژول‌ها پیدا نکند، با مقدار 0 خارج شده و هیچ خروجی‌ای تولید نمی‌کند. در غیر این صورت با یک مقدار غیرصفر خارج خواهد شد.

بسیاری از تفاوت‌های مهم، مانند تغییرات در پیوند (linkage) یا ویژگی‌های توابع، تشخیص داده نمی‌شوند.

تغییرات در رفتار حافظه (برای مثال، ادغام بارگذاری‌ها یا coalescing loads) می‌تواند باعث شناسایی تفاوت‌های عظیمی در بلوک‌ها شود.

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

2003-2026, LLVM Project

2026-07-15 22