LLVM 15.0 கம்பைலர் தொகுப்பின் வெளியீடு

ஆறு மாத வளர்ச்சிக்குப் பிறகு, LLVM 15.0 திட்டத்தின் வெளியீடு வழங்கப்பட்டது - ஒரு GCC-இணக்கமான கருவித்தொகுப்பு (தொகுப்பாளர்கள், மேம்படுத்திகள் மற்றும் குறியீடு ஜெனரேட்டர்கள்) நிரல்களை RISC போன்ற மெய்நிகர் அறிவுறுத்தல்களின் இடைநிலை பிட்கோடில் தொகுக்கிறது (ஒரு குறைந்த-நிலை மெய்நிகர் இயந்திரம் பல நிலை தேர்வுமுறை அமைப்பு). உருவாக்கப்பட்ட சூடோகோட் ஒரு JIT கம்பைலரைப் பயன்படுத்தி நிரல் செயல்படுத்தும் நேரத்தில் நேரடியாக இயந்திர வழிமுறைகளாக மாற்றப்படலாம்.

க்ளாங் 15.0 இல் முக்கிய மேம்பாடுகள்:

  • x86 கட்டமைப்பின் அடிப்படையிலான அமைப்புகளுக்கு, "-fzero-call-used-regs" கொடி சேர்க்கப்பட்டுள்ளது, இது செயல்பாட்டில் பயன்படுத்தப்படும் அனைத்து CPU பதிவேடுகளும் செயல்பாட்டிலிருந்து கட்டுப்பாட்டை திரும்புவதற்கு முன் பூஜ்ஜியத்திற்கு மீட்டமைக்கப்படுவதை உறுதி செய்கிறது. இந்த விருப்பம் செயல்பாடுகளில் இருந்து தகவல் கசிவிலிருந்து பாதுகாக்கவும் மற்றும் ROP (ரிட்டர்ன்-ஓரியண்டட் புரோகிராமிங்) கேஜெட்களை உருவாக்குவதற்கு ஏற்ற தொகுதிகளின் எண்ணிக்கையை தோராயமாக 20% குறைக்கவும் அனுமதிக்கிறது.
  • சி குறியீட்டிற்கான கட்டமைப்புகளின் நினைவக இடத்தின் சீரற்றமயமாக்கல் செயல்படுத்தப்பட்டது, இது பாதிப்புகளை சுரண்டினால் கட்டமைப்புகளில் இருந்து தரவைப் பிரித்தெடுப்பதை சிக்கலாக்குகிறது. randomize_layout மற்றும் no_randomize_layout பண்புக்கூறுகளைப் பயன்படுத்தி ரேண்டமைசேஷன் ஆன் மற்றும் ஆஃப் செய்யப்படுகிறது, மேலும் "-frandomize-layout-seed" அல்லது "-frandomize-layout-seed-file" கொடியைப் பயன்படுத்தி ஒரு விதையை அமைக்க வேண்டும்.
  • "-fstrict-flex-arrays=" கொடி சேர்க்கப்பட்டது ", இதன் மூலம் நீங்கள் கட்டமைப்புகளில் ஒரு நெகிழ்வான வரிசை உறுப்புக்கான எல்லைகளைக் கட்டுப்படுத்தலாம் (நெகிழ்வான வரிசை உறுப்பினர்கள், கட்டமைப்பின் முடிவில் காலவரையற்ற அளவிலான வரிசை). 0 (இயல்புநிலை) என அமைக்கப்படும் போது, ​​ஒரு வரிசையுடன் கட்டமைப்பின் கடைசி உறுப்பு எப்போதும் நெகிழ்வான அணியாக செயலாக்கப்படும், 1 - அளவுகள் மட்டுமே [], [0] மற்றும் [1] ஒரு நெகிழ்வான வரிசையாக செயலாக்கப்படும், 2 - அளவுகள் மட்டுமே [] மற்றும் [0] ஒரு நெகிழ்வான வரிசை போல செயலாக்கப்படுகின்றன.
  • ஷேடர்களை எழுத டைரக்ட்எக்ஸில் பயன்படுத்தப்படும் சி-போன்ற மொழியான HLSL (உயர்-நிலை ஷேடர் மொழி)க்கான சோதனை ஆதரவு சேர்க்கப்பட்டது.
  • நிலையான மற்றும் மாறி-நீள வரிசைகளுடன் தொடர்புடைய இணக்கமற்ற வாத அறிவிப்புகளுடன் செயல்பாடுகளை மீறுவது பற்றி எச்சரிக்க "-வார்ரே-அளவுரு" சேர்க்கப்பட்டது.
  • MSVC உடன் மேம்படுத்தப்பட்ட இணக்கத்தன்மை. MSVC இல் வழங்கப்பட்ட "#ப்ராக்மா செயல்பாடு" (இன்லைன் விரிவாக்கத்திற்கு பதிலாக ஒரு செயல்பாட்டு அழைப்பை உருவாக்க கம்பைலருக்கு அறிவுறுத்துகிறது) மற்றும் "#pragma alloc_text" (செயல்பாட்டுக் குறியீட்டுடன் பிரிவின் பெயரை வரையறுக்கிறது) ஆகியவற்றிற்கான ஆதரவு சேர்க்கப்பட்டது. MSVC-இணக்கமான /JMC மற்றும் /JMC கொடிகளுக்கான ஆதரவு சேர்க்கப்பட்டது.
  • எதிர்கால C2X மற்றும் C++23 தரநிலைகளை ஆதரிக்கும் பணி தொடர்கிறது. C மொழிக்கு, பின்வருபவை செயல்படுத்தப்படுகின்றன: noreturn பண்புக்கூறு, முக்கிய வார்த்தைகள் பொய் மற்றும் உண்மை, கொடுக்கப்பட்ட பிட் ஆழத்தின் முழு எண்களுக்கான _BitInt(N) வகை, *_WIDTH மேக்ரோக்கள், UTF-8 குறியிடப்பட்ட எழுத்துகளுக்கான u8 முன்னொட்டு.

    C++ க்கு, பின்வருபவை செயல்படுத்தப்படுகின்றன: தொகுதி ஒன்றிணைத்தல், செயல்பாட்டு உறுப்பினர்களை ABI தனிமைப்படுத்துதல், தொகுதிகளில் உள்ளூர் அல்லாத மாறிகளின் மாறும் துவக்கம், பல பரிமாண குறியீட்டு ஆபரேட்டர்கள், ஆட்டோ(x), எழுத்து அல்லாத மாறிகள், கோட்டோ மற்றும் கான்ஸ்டெக்ஸ்பிராக அறிவிக்கப்பட்ட செயல்பாடுகளில் லேபிள்கள் , பிரிக்கப்பட்ட தப்பிக்கும் காட்சிகள், எஸ்கேப் கேரக்டர்கள் என்று பெயரிடப்பட்டது.

  • OpenCL மற்றும் OpenMP ஆதரவுடன் தொடர்புடைய திறன்கள் விரிவாக்கப்பட்டுள்ளன. OpenCL நீட்டிப்பு cl_khr_subgroup_rotate க்கான ஆதரவு சேர்க்கப்பட்டது.
  • x86 கட்டமைப்பிற்கு, நிபந்தனையற்ற முன்னோக்கி ஜம்ப் செயல்பாடுகளுக்குப் பிறகு அறிவுறுத்தல்களை ஊகமாக செயல்படுத்துவதால் செயலிகளில் ஏற்படும் பாதிப்புகளுக்கு எதிராக பாதுகாப்பு சேர்க்கப்பட்டுள்ளது. நினைவகத்தில் (SLS, ஸ்ட்ரெய்ட் லைன் ஸ்பெகுலேஷன்) கிளை அறிவுறுத்தலைப் பின்பற்றி உடனடியாக அறிவுறுத்தல்களை முன்கூட்டியே செயலாக்குவதால் சிக்கல் ஏற்படுகிறது. பாதுகாப்பை இயக்க, “-mharden-sls=[none|all|return|indirect-jmp]” விருப்பம் முன்மொழியப்பட்டது.
  • SSE2 நீட்டிப்பை ஆதரிக்கும் இயங்குதளங்களுக்கு, _Float16 வகை சேர்க்கப்பட்டுள்ளது, AVX512-FP16 வழிமுறைகளுக்கான ஆதரவு இல்லாத நிலையில் மிதவை வகையைப் பயன்படுத்தி இது பின்பற்றப்படுகிறது.
  • RDPRU அறிவுறுத்தலின் பயன்பாட்டைக் கட்டுப்படுத்த "-m[no-]rdpru" கொடி சேர்க்கப்பட்டது, AMD Zen2 செயலிகளுடன் தொடங்கி ஆதரிக்கப்படுகிறது.
  • RETBLEED பாதிப்புக்கு எதிராக பாதுகாக்க "-mfunction-return=thunk-extern" கொடி சேர்க்கப்பட்டது, இது மறைமுக கிளைகளுக்கான ஊக செயலாக்க பொறிமுறையின் ஈடுபாட்டைத் தவிர்த்து அறிவுறுத்தல்களின் வரிசையைச் சேர்ப்பதன் மூலம் செயல்படுகிறது.

LLVM 15.0 இல் முக்கிய கண்டுபிடிப்புகள்:

  • Cortex-M85 CPU, Armv9-A, Armv9.1-A மற்றும் Armv9.2-A கட்டமைப்புகள், Armv8.1-M PACBTI-M நீட்டிப்புகளுக்கான ஆதரவு சேர்க்கப்பட்டது.
  • டைரக்ட்எக்ஸ் ஷேடர்களுக்குப் பயன்படுத்தப்படும் டிஎக்ஸ்ஐஎல் (டைரக்ட்எக்ஸ் இன்டர்மீடியட் லாங்குவேஜ்) வடிவமைப்பை ஆதரிக்கும் டைரக்ட்எக்ஸிற்கான சோதனைப் பின்தளம் சேர்க்கப்பட்டுள்ளது. அசெம்பிளி செய்யும் போது “-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” அளவுருவைக் குறிப்பிடுவதன் மூலம் பின்தளம் இயக்கப்படுகிறது.
  • Libc++ ஆனது C++20 மற்றும் C++2b தரநிலைகளின் புதிய அம்சங்களைச் செயல்படுத்தி வருகிறது, இதில் "வடிவமைப்பு" நூலகத்தின் செயலாக்கம் மற்றும் "வரம்புகள்" நூலகத்தின் முன்மொழியப்பட்ட சோதனைப் பதிப்பு ஆகியவை அடங்கும்.
  • x86, PowerPC மற்றும் RISC-V கட்டமைப்புகளுக்கான மேம்படுத்தப்பட்ட பின்தளங்கள்.
  • LLD இணைப்பான் மற்றும் LLDB பிழைத்திருத்தியின் திறன்கள் மேம்படுத்தப்பட்டுள்ளன.

ஆதாரம்: opennet.ru

கருத்தைச் சேர்