LLVM 12.0 కంపైలర్ సూట్ విడుదల

ఆరు నెలల అభివృద్ధి తర్వాత, LLVM 12.0 ప్రాజెక్ట్ విడుదల చేయబడింది - GCC-అనుకూల టూల్‌కిట్ (కంపైలర్‌లు, ఆప్టిమైజర్‌లు మరియు కోడ్ జనరేటర్లు) ఇది ప్రోగ్రామ్‌లను RISC-వంటి వర్చువల్ సూచనల యొక్క ఇంటర్మీడియట్ బిట్‌కోడ్‌గా కంపైల్ చేస్తుంది (ఒక తక్కువ-స్థాయి వర్చువల్ మెషీన్‌తో బహుళ-స్థాయి ఆప్టిమైజేషన్ సిస్టమ్). ఉత్పత్తి చేయబడిన సూడోకోడ్‌ను JIT కంపైలర్‌ని ఉపయోగించి ప్రోగ్రామ్ అమలు సమయంలో నేరుగా మెషీన్ సూచనలుగా మార్చవచ్చు.

క్లాంగ్ 12.0లో మెరుగుదలలు:

  • C++20 ప్రమాణంలో ప్రతిపాదించబడిన “అవకాశం” మరియు “అసంభవం” లక్షణాలకు మద్దతు డిఫాల్ట్‌గా అమలు చేయబడింది మరియు ప్రారంభించబడింది, ఇది షరతులతో కూడిన నిర్మాణం ట్రిగ్గర్ చేయబడే సంభావ్యత గురించి ఆప్టిమైజర్‌కు తెలియజేయడానికి అనుమతిస్తుంది (ఉదాహరణకు, “[[అవకాశం ]] అయితే (యాదృచ్ఛిక > 0) {“).
  • AMD Zen 3 (-march=znver3), ఇంటెల్ ఆల్డర్ లేక్ (-march=alderlake) మరియు Intel Sapphire Rapids (-march=sapphirerapids) ప్రాసెసర్‌లకు మద్దతు జోడించబడింది.
  • x86-64 ఆర్కిటెక్చర్ స్థాయిలను ఎంచుకోవడానికి "-march=x234-86-v[64]" ఫ్లాగ్‌లకు మద్దతు జోడించబడింది (v2 - SSE4.2, SSSE3, POPCNT మరియు CMPXCHG16B పొడిగింపులను కవర్ చేస్తుంది; v3 - AVX2 మరియు MOVBE; v4 - AVX-512 ) .
  • Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) మరియు Fujitsu A64FX (a64fx) ప్రాసెసర్‌లకు మద్దతు జోడించబడింది. ఉదాహరణకు, Neoverse-V1 CPUల కోసం ఆప్టిమైజేషన్‌లను ప్రారంభించడానికి, మీరు “-mcpu=neoverse-v1”ని పేర్కొనవచ్చు.
  • AArch64 ఆర్కిటెక్చర్ కోసం, "__aarch64_cas8_relax" వంటి అటామిక్ ఆపరేషన్ హెల్పర్ ఫంక్షన్‌లను ప్రారంభించడానికి లేదా నిలిపివేయడానికి కొత్త కంపైలర్ ఫ్లాగ్‌లు "-మౌట్‌లైన్-అటామిక్స్" మరియు "-mno-ఔట్‌లైన్-అటామిక్స్" జోడించబడ్డాయి. LSE (లార్జ్ సిస్టమ్ ఎక్స్‌టెన్షన్స్) మద్దతు అందుబాటులో ఉందో లేదో అటువంటి ఫంక్షన్‌లు రన్‌టైమ్‌లో గుర్తించి, అందించిన అటామిక్ ప్రాసెసర్ సూచనలను ఉపయోగిస్తాయి లేదా సింక్రొనైజేషన్ కోసం LL/SC (లోడ్-లింక్/స్టోర్-షరతులతో కూడిన) సూచనలను ఉపయోగిస్తాయి.
  • పాత లింకర్ మరియు అసెంబ్లర్ ప్రవర్తనతో అనుకూలత కోసం binutils సూట్ యొక్క లక్ష్య సంస్కరణను ఎంచుకోవడానికి "-fbinutils-version" ఎంపిక జోడించబడింది.
  • ELF ఎక్జిక్యూటబుల్ ఫైల్‌ల కోసం, "-gz" ఫ్లాగ్ పేర్కొనబడినప్పుడు, zlib లైబ్రరీని ఉపయోగించి డీబగ్గింగ్ సమాచారం యొక్క కుదింపు డిఫాల్ట్‌గా ప్రారంభించబడుతుంది (gz=zlib). ఫలితంగా వచ్చే ఆబ్జెక్ట్ ఫైల్‌లను లింక్ చేయడానికి lld లేదా GNU బినటిల్‌లు 2.26+ అవసరం. బినుటిల్‌ల పాత సంస్కరణలతో అనుకూలతను పునరుద్ధరించడానికి, మీరు "-gz=zlib-gnu"ని పేర్కొనవచ్చు.
  • 'ఈ' పాయింటర్ ఇప్పుడు నాన్‌నల్ మరియు డిఫరెన్స్ చేయదగిన(N) చెక్‌లతో ప్రాసెస్ చేయబడింది. మీరు NULL విలువలను ఉపయోగించాల్సి వచ్చినప్పుడు నాన్‌నల్ లక్షణాన్ని తీసివేయడానికి, మీరు "-fdelete-null-pointer-checks" ఎంపికను ఉపయోగించవచ్చు.
  • వేదికపై Linux AArch64 మరియు PowerPC ఆర్కిటెక్చర్‌ల కోసం, GCCలో వలె అన్‌వైండ్ కాల్ టేబుల్‌లను రూపొందించడానికి "-fasynchronous-unwind-tables" మోడ్ ఎనేబుల్ చేయబడింది.
  • "#pragma clang loop vectorize_width"లో వెక్టరైజేషన్ పద్ధతిని ఎంచుకోవడానికి "ఫిక్స్‌డ్" (డిఫాల్ట్) మరియు "స్కేలబుల్" ఎంపికలను పేర్కొనే సామర్థ్యాన్ని జోడించారు. వెక్టర్ పొడవుతో సంబంధం లేకుండా "స్కేలబుల్" మోడ్ ప్రయోగాత్మకమైనది మరియు స్కేలబుల్ వెక్టరైజేషన్‌కు మద్దతు ఇచ్చే హార్డ్‌వేర్‌లో ఉపయోగించవచ్చు.
  • మెరుగైన ప్లాట్‌ఫారమ్ మద్దతు Windowsఅధికారిక బైనరీ బిల్డ్‌లు సిద్ధం చేయబడ్డాయి Windows Arm64 సిస్టమ్‌లలో, ఇందులో క్లాంగ్ కంపైలర్, LLD లింకర్ మరియు కంపైలర్-rt రన్‌టైమ్ లైబ్రరీలు ఉంటాయి. MinGW టార్గెట్ ప్లాట్‌ఫారమ్‌ల కోసం బిల్డ్ చేసేటప్పుడు, క్రాస్-కంపైల్ చేసినప్పటికీ, ఇప్పుడు .exe సఫిక్స్ జోడించబడుతుంది.
  • OpenCL, OpenMP మరియు CUDA కోసం మద్దతుతో అనుబంధించబడిన సామర్థ్యాలు విస్తరించబడ్డాయి. OpenCL 3.0 మరియు OpenCL 1.0 కోసం స్థూల ఎంపికలను ఎంచుకోవడానికి "-cl-std=CL3.0" మరియు "-cl-std=CL1.0" ఎంపికలు జోడించబడ్డాయి. రోగనిర్ధారణ సాధనాలు విస్తరించబడ్డాయి.
  • కొన్ని x86-ఆధారిత ప్రాసెసర్లలో అమలు చేయబడిన HRESET, UINTR మరియు AVXVNNI సూచనలకు మద్దతు జోడించబడింది.
  • x86 సిస్టమ్స్‌లో, "-mtune=" ఎంపికకు మద్దతు ప్రారంభించబడింది ", ఇది "-march= విలువతో సంబంధం లేకుండా, ఎంచుకున్న మైక్రోఆర్కిటెక్చరల్ ఆప్టిమైజేషన్‌లను సక్రియం చేస్తుంది. "
  • స్టాటిక్ ఎనలైజర్ కొన్ని POSIX ఫంక్షన్‌ల ప్రాసెసింగ్‌ను మెరుగుపరిచింది మరియు పోలికలో అనేక సింబాలిక్ విలువలు ఉన్నప్పుడు షరతులతో కూడిన ఆపరేషన్ల ఫలితాన్ని గణనీయంగా మెరుగుపరిచింది. కొత్త తనిఖీలు జోడించబడ్డాయి: fuchia.HandleChecker (నిర్మాణాలలో హ్యాండిల్‌లను నిర్వచిస్తుంది), webkit.UncountedLambdaCapturesChecker వెబ్‌కిట్ మరియు alpha.webkit.UncountedLocalVarsChecker (వెబ్‌కిట్ ఇంజన్ కోడ్‌లోని పాయింటర్‌లతో పని చేసే ప్రత్యేకతలను పరిగణనలోకి తీసుకుంటుంది).
  • స్థిరాంకాల సందర్భంలో ఉపయోగించే వ్యక్తీకరణలలో, అంతర్నిర్మిత ఫంక్షన్ల ఉపయోగం __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bs__pdbd, reverse, __bs__prbs, wap64, __ bswapq అనుమతించబడుతుంది , _castf*, __rol* మరియు __ror*.
  • ఐడెంటిఫైయర్‌లు, నిలువు వరుసలు మరియు ఫీల్డ్ డెఫినిషన్‌ల చుట్టూ అంతరాన్ని ఎంచుకోవడానికి క్లాంగ్-ఫార్మాట్ యుటిలిటీకి BitFieldColonSpacing ఎంపిక జోడించబడింది.
  • కాషింగ్‌లో సర్వర్ ప్లాట్‌ఫారమ్‌పై క్లాంగ్‌డి (క్లాంగ్ సర్వర్) Linux దీర్ఘకాలిక ఆపరేషన్ సమయంలో మెమరీ వినియోగం గణనీయంగా తగ్గించబడింది (ఆపరేటింగ్ సిస్టమ్‌కు ఖాళీ మెమరీ పేజీలను తిరిగి ఇవ్వడానికి malloc_trimకు క్రమానుగతంగా కాల్స్ చేయబడ్డాయి).

LLVM 12.0లో కీలక ఆవిష్కరణలు:

  • పైథాన్‌లో వ్రాయబడిన llvm-build బిల్డ్ టూల్‌కు మద్దతు నిలిపివేయబడింది మరియు బదులుగా ప్రాజెక్ట్ పూర్తిగా CMake బిల్డ్ సిస్టమ్‌ని ఉపయోగించడంలోకి మార్చబడింది.
  • AArch64 ఆర్కిటెక్చర్ యొక్క బ్యాకెండ్ మెరుగైన ప్లాట్‌ఫారమ్ మద్దతును కలిగి ఉంది. Windowsలక్ష్య వ్యవస్థల కోసం అసెంబ్లీ అవుట్‌పుట్ యొక్క సరైన ఉత్పత్తి నిర్ధారించబడింది Windowsకాల్స్ యొక్క "అన్‌వైండింగ్" (విడదీయడం) పై డేటా జనరేషన్ ఆప్టిమైజ్ చేయబడింది (అటువంటి డేటా పరిమాణం 60% తగ్గించబడింది), .seh_* అసెంబ్లర్ డైరెక్టివ్‌లను ఉపయోగించి అన్‌వైండ్ డేటాను సృష్టించే సామర్థ్యం జోడించబడింది.
  • PowerPC ఆర్కిటెక్చర్ కోసం బ్యాకెండ్ లూప్‌లు మరియు ఇన్‌లైన్ డిప్లాయ్‌మెంట్ కోసం కొత్త ఆప్టిమైజేషన్‌లను కలిగి ఉంది, Power10 ప్రాసెసర్‌లకు విస్తరించిన మద్దతు, మ్యాట్రిక్స్ మానిప్యులేషన్ కోసం MMA సూచనలకు జోడించిన మద్దతు మరియు AIX ఆపరేటింగ్ సిస్టమ్‌కు మెరుగైన మద్దతు.
  • x86 బ్యాకెండ్ AMD జెన్ 3, ఇంటెల్ ఆల్డర్ లేక్ మరియు ఇంటెల్ సఫైర్ రాపిడ్స్ ప్రాసెసర్‌లకు అలాగే HRESET, UINTR మరియు AVXVNNI ప్రాసెసర్ సూచనలకు మద్దతునిస్తుంది. మెమరీ సరిహద్దులకు ఇకపై మద్దతు లేదని నిర్ధారించడానికి పాయింటర్‌లను తనిఖీ చేయడానికి MPX (మెమరీ ప్రొటెక్షన్ ఎక్స్‌టెన్షన్‌లు) కోసం మద్దతు (ఈ సాంకేతికత విస్తృతంగా లేదు మరియు ఇప్పటికే GCC మరియు క్లాంగ్ నుండి తీసివేయబడింది). ఒపెరాండ్ ఆఫ్‌సెట్‌లు మరియు జంప్‌ల పరిమాణాన్ని నియంత్రించడానికి {disp32} మరియు {disp8} ఉపసర్గలు మరియు .d32 మరియు .d8 ప్రత్యయాలకు అసెంబ్లర్‌కు మద్దతు జోడించబడింది. మైక్రోఆర్కిటెక్చరల్ ఆప్టిమైజేషన్‌లను చేర్చడాన్ని నియంత్రించడానికి "ట్యూన్-సిపియు" అనే కొత్త లక్షణం జోడించబడింది.
  • ఎడమవైపుకి కొంచెం మారిన తర్వాత సంతకం చేయని పూర్ణాంకాల ఓవర్‌ఫ్లోలను గుర్తించడానికి పూర్ణాంక సమస్య డిటెక్టర్ (పూర్ణాంక శానిటైజర్, “-fsanitize=integer”)కి కొత్త మోడ్ “-fsanitize=unsigned-shift-base” జోడించబడింది.
  • వివిధ డిటెక్టర్లకు మద్దతు జోడించబడింది (asan, cfi, lsan, msan, tsan, ubsan sanitizer) Linuxప్రామాణిక Musl లైబ్రరీతో పంపిణీలు.
  • LLD లింకర్ సామర్థ్యాలు విస్తరించబడ్డాయి. ELF ఫార్మాట్‌కు మద్దతు మెరుగుపరచబడింది, ఇందులో "--dependency-file", "--error-handling-script", "--lto-pseudo-probe-for-profiling", "--no-lto-whole-program-visibility" అనే ఐచ్ఛికాలు చేర్చబడ్డాయి. MinGWకు మద్దతు మెరుగుపరచబడింది. Mach-O ఫార్మాట్ కోసం (macOS) arm64, arm, మరియు i386 ఆర్కిటెక్చర్‌లకు మద్దతు, లింక్-టైమ్ ఆప్టిమైజేషన్‌లు (LTO), మరియు ఎక్సెప్షన్ హ్యాండ్లింగ్ సమయంలో స్టాక్ అన్‌వైండింగ్ అమలు చేయబడ్డాయి.
  • Libc++ C++20 ప్రమాణం యొక్క కొత్త లక్షణాలను అమలు చేస్తుంది మరియు C++2b స్పెసిఫికేషన్ యొక్క లక్షణాల అభివృద్ధిని ప్రారంభించింది. స్థానికీకరణ మద్దతును నిలిపివేయడం (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) మరియు నకిలీ యాదృచ్ఛిక సంఖ్యలను (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”) రూపొందించే పరికరాలతో నిర్మించడానికి మద్దతు జోడించబడింది.

మూలం: opennet.ru

DDoS రక్షణ, VPS VDS సర్వర్‌లతో సైట్‌ల కోసం నమ్మకమైన హోస్టింగ్‌ను కొనుగోలు చేయండి 🔥 DDoS రక్షణతో కూడిన నమ్మకమైన వెబ్‌సైట్ హోస్టింగ్, VPS VDS సర్వర్‌లను కొనండి | ProHoster