אחרי חצי שנה של התפתחות הושקה הגרסה החדשה של פרויקט LLVM 12.0 תואם GCC (קומפילרים, אופטימיזציה ומחוללי קוד) שמאגד תוכניות לקוד סיביות ביניים של הוראות וירטואליות בדומה ל- RISC (מכונה וירטואלית ברמה נמוכה עם מערכת אופטימיזציה מרובת רמות).
בגרסה החדשה הזו אנו יכולים למצוא שיפורים וחדשות שונות, שממנו נוכל להדגיש תכונת פונקציה חדשה "tune-cpu" לתמיכה ב- -tune כמו gcc, כמו גם שיפורים בפלטפורמות השונות.
התכונות החדשות העיקריות של LLVM 12.0
בגרסה החדשה הזו אנו יכולים למצוא זאת תמיכה בערכת הכלים לבנות llvm כתוב בפייתון לא המשיך, במקום שהפרויקט עבר לחלוטין לשימוש במערכת ה- CMake build.
הקצה האחורי לארכיטקטורה AArch64 שיפר את התמיכה בפלטפורמת Windows: ייצור נכון של פלט אסמבלר מסופק עבור מערכות היעד של Windows, יצירת אופטימיזציה של שיחות הרפיה (אופטימיזציה של גודל נתונים כאלה הופחתה בשיעור של 60%). היכולת ליצור נתונים התווספה להירגע באמצעות הוראות seh.
בעוד ה- backend של אדריכלות PowerPC כולל אופטימיזציות חדשות לפריסה מוטבעת ולולאה, תמיכה משופרת במעבדי Power10, תמיכה נוספת בהוראות MMA לטיפול במערכים ותמיכה משופרת במערכת ההפעלה AIX.
כדי x86 הוסיפה תמיכה במעבדי AMD Zen 3, Intel Alder Lake ו- Intel Sapphire Rapidsוכן הוראות למעבדי HRESET, UINTR ו- AVXVNNI. הסיר את התמיכה בהרחבות MPX (סיומות להגנה על זיכרון) כדי לבדוק מצביעים כנגד מגבלות אזור הזיכרון (טכנולוגיה זו לא הייתה בשימוש נרחב ומאז הוסרה מ- GCC וה- clang). המאסף הוסיף תמיכה בקידומות {disp32} ו- {disp8} ובסיומות .d32 ו- .d8 כדי לשלוט בגודל קיזוז האופרטים והמעברים. תכונה חדשה "tune-cpu" נוספה כדי לשלוט על הפעלת אופטימיזציות מיקרו-אדריכליות.
שינוי נוסף הבולט הוא זה נוספה מצב חדש "-fsanitize = לא חתום- shift-base" כדי לזהות הצפות שלמות לא חתומות לאחר מעבר קצת שמאלה. לפורמט Mach-O (macOS), מיושמת תמיכה בארכיטקטורות arm64, arm ו- i386, אופטימיזציה של שלב קישורים (LTO), ומערמת רגיעה בעת טיפול בחריגים.
גם מאפיין תכונה חדשה "tune-cpu" מודגש שמאפשר ל- oאופטימיזציות למיקרו-ארכיטקטורה מוחלות ללא קשר לתכונה "מטרה-מעבד" או מעבד ה- TargetMachine שישמש לבחירת מערך ההוראות. אם התכונה אינה קיימת, מעבד הכוונון יעקוב אחר מעבד היעד.
Libc ++ מיישם תכונות חדשות של תקן C ++ 20 והחל לפתח תכונות של מפרט C ++ 2b, פלוס הוסיף תמיכה בהרכבה עם השבתת תמיכה בלוקליזציה ("-DLIBCXX_ENABLE_LOCALIZATION = OFF") והתקנים ליצירת מספרים פסאודו-אקראיים.
בעוד מהשיפורים עבור Clang 12, עבור ארכיטקטורת AArch64, התווספו דגלי מהדר חדשים "-מתווה אטומית" ו- "-mno- מתאר אטומים" כדי לאפשר ולהשבית פונקציות עוזר אטומי כגון "__aarch64_cas8_relax". פונקציות זמן ריצה אלו קובעות אם קיימת תמיכה בהרחבות מערכת גדולות (LSE) ומשתמשות בהוראות המעבד האטומי או בתהליך החזרת הכוח לשימוש בהוראות LL / SC (Load-link / store-conditional) לסנכרון.
המצביע 'זה' מעובד כעת בבדיקות שאינן אפסות וניתנות להפצה (N). ניתן להשתמש באפשרות "-fdelete-null-pointer-checks" להסרת התכונה שאינה null כאשר נדרשים ערכי null.
בלינוקס עבור ארכיטקטורות AArch64 ו- PowerPC, "-Fasynchronous -wind-tables" זמין ליצור טבלאות של שיחות רול, כמו ב- GCC.
ב "# pragma clang loop vectorize_width" נוספה היכולת לציין את האפשרויות "קבועות" (ברירת מחדל) ו"ניתנות להרחבה "לבחירת שיטת הווקטורציה.
בשרת המטמון clangd (Clang Server) בלינוקס, צריכת הזיכרון במהלך פעולה לטווח הארוך מופחתת באופן משמעותי (ניתנת קריאה תקופתית ל- malloc_trim להחזרת דפי זיכרון פנויים למערכת ההפעלה).
בסופו של דבר אם אתה מעוניין לדעת יותר על כך לגבי הגרסה החדשה הזו, אתה יכול אנא עיין בפרטים הבאים. קישור