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

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

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

  • గ్యారెంటీ టెయిల్ కాల్‌ల కోసం అమలు చేయబడిన మద్దతు (ఫంక్షన్ చివరిలో సబ్‌ట్రౌటిన్‌ని పిలవడం, సబ్‌రౌటీన్ స్వయంగా కాల్ చేస్తే టెయిల్ రికర్షన్‌ను ఏర్పరుస్తుంది). గ్యారెంటీ టెయిల్ కాల్‌లకు మద్దతు C++లో "[[cang::musttail]]" మరియు Cలో "__attribute__((musttail))" ద్వారా అందించబడుతుంది, ఇది "రిటర్న్" స్టేట్‌మెంట్‌లో ఉపయోగించబడుతుంది. స్టాక్ వినియోగాన్ని ఆదా చేయడానికి కోడ్‌ను ఫ్లాట్ పునరావృతంలో అమలు చేయడం ద్వారా ఆప్టిమైజేషన్‌లను అమలు చేయడానికి ఫీచర్ మిమ్మల్ని అనుమతిస్తుంది.
  • "ఉపయోగించు" డిక్లరేషన్‌లు మరియు క్లాంగ్ ఎక్స్‌టెన్షన్‌లు "[[]]" ఆకృతిని ఉపయోగించి C++11-శైలి లక్షణాలను నిర్వచించడానికి మద్దతునిస్తాయి.
  • మీరు వినియోగదారు కోడ్‌లో రిజర్వ్ చేయబడిన ఐడెంటిఫైయర్‌లను పేర్కొన్నప్పుడు హెచ్చరికను ప్రదర్శించడానికి "-Wreserved-identifier" ఫ్లాగ్ జోడించబడింది.
  • పరామితి లేదా వేరియబుల్ సెట్ చేయబడినా ఉపయోగించకపోయినా హెచ్చరికను ప్రదర్శించడానికి "-Wunused-but-set-parameter" మరియు "-Wunused-but-set-variable" ఫ్లాగ్‌లు జోడించబడ్డాయి.
  • వ్యవకలన కార్యకలాపాలలో శూన్య పాయింటర్‌ని ఉపయోగించడం వల్ల కోడ్ నిర్వచించబడని ప్రవర్తనను పరిచయం చేస్తే హెచ్చరిక జారీ చేయడానికి "-Wnull-pointer-subtraction" ఫ్లాగ్ జోడించబడింది.
  • ప్రాసెస్ చేయబడుతున్న ఫైల్‌లో నిర్వచించబడిన ప్రతి ఫంక్షన్‌కు స్టాక్ ఫ్రేమ్‌ల పరిమాణం గురించి సమాచారాన్ని కలిగి ఉన్న అదనపు ".su" ఫైల్‌ను ప్రతి కోడ్ ఫైల్‌కు రూపొందించడానికి "-fstack-usage" ఫ్లాగ్ జోడించబడింది.
  • స్టాటిక్ ఎనలైజర్‌కి కొత్త అవుట్‌పుట్ రకం జోడించబడింది - “sarif-html”, ఇది HTML మరియు Sarif ఫార్మాట్‌లలో ఏకకాలంలో నివేదికల ఉత్పత్తికి దారి తీస్తుంది. కొత్త allocClassWithName చెక్ జోడించబడింది. “-analyzer-display-progress” ఎంపికను పేర్కొనేటప్పుడు, ప్రతి ఫంక్షన్ యొక్క విశ్లేషణ సమయం ప్రదర్శించబడుతుంది. స్మార్ట్ పాయింటర్ ఎనలైజర్ (alpha.cplusplus.SmartPtr) దాదాపు సిద్ధంగా ఉంది.
  • OpenCL మద్దతుతో అనుబంధించబడిన సామర్థ్యాలు విస్తరించబడ్డాయి. కొత్త పొడిగింపులు cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields మరియు __cl_clang_non_portable_kernel_param_types కోసం మద్దతు జోడించబడింది. OpenCL 3.0 స్పెసిఫికేషన్ అమలు కొనసాగింది. C కోసం, మరొక వెర్షన్ స్పష్టంగా ఎంపిక చేయబడితే తప్ప OpenCL 1.2 స్పెసిఫికేషన్ డిఫాల్ట్‌గా ఉపయోగించబడుతుంది. C++ కోసం, “.clcpp” పొడిగింపుతో ఉన్న ఫైల్‌లకు మద్దతు జోడించబడింది.
  • OpenMP 5.1 స్పెసిఫికేషన్‌లో నిర్వచించబడిన లూప్ ట్రాన్స్‌ఫర్మేషన్ డైరెక్టివ్‌లకు (“#pragma omp అన్‌రోల్” మరియు “#pragma omp టైల్”) మద్దతు అమలు చేయబడింది.
  • క్లాంగ్-ఫార్మాట్ యుటిలిటీకి ఎంపికలు జోడించబడ్డాయి: కామెంట్‌ల ముందు ఖాళీల సంఖ్యను నిర్వచించడానికి SpacesInLineCommentPrefix, IndentAccessModifiers, LambdaBodyIndentation మరియు PPIndentWidth ఎంట్రీలు, లాంబ్డా ఎక్స్‌ప్రెషన్‌లు మరియు ప్రీప్రాసెసర్ డైరెక్టివ్‌ల అమరికను నియంత్రించడానికి. హెడర్ ఫైల్స్ (SortIncludes) యొక్క గణనను క్రమబద్ధీకరించే అవకాశాలు విస్తరించబడ్డాయి. JSON ఫైల్‌లను ఫార్మాటింగ్ చేయడానికి మద్దతు జోడించబడింది.
  • కొత్త చెక్కులలో ఎక్కువ భాగం లిన్టర్ క్లాంగ్-టిడీకి జోడించబడ్డాయి.

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

  • మినహాయింపు నిర్వహణ దశలో రిటర్న్-ఓరియెంటెడ్ ప్రోగ్రామింగ్ (ROP) టెక్నిక్‌లను ఉపయోగించి నిర్మించిన దోపిడీల అమలు నుండి రక్షించడానికి CET (Windows కంట్రోల్-ఫ్లో ఎన్‌ఫోర్స్‌మెంట్ టెక్నాలజీ) సాంకేతికతను ఉపయోగించడానికి “-ehcontguard” ఎంపిక జోడించబడింది.
  • debuginfo-test ప్రాజెక్ట్ క్రాస్-ప్రాజెక్ట్-టెస్ట్‌లుగా పేరు మార్చబడింది మరియు డీబగ్గింగ్ సమాచారానికి పరిమితం కాకుండా వివిధ ప్రాజెక్ట్‌ల నుండి భాగాలను పరీక్షించడానికి రూపొందించబడింది.
  • అసెంబ్లీ వ్యవస్థ అనేక పంపిణీలను నిర్మించడానికి మద్దతును అందిస్తుంది, ఉదాహరణకు, ఒకటి యుటిలిటీలతో మరియు మరొకటి డెవలపర్‌ల కోసం లైబ్రరీలతో.
  • AArch64 ఆర్కిటెక్చర్ కోసం బ్యాకెండ్‌లో, అసెంబ్లర్‌లో Armv9-A RME (రియల్మ్ మేనేజ్‌మెంట్ ఎక్స్‌టెన్షన్) మరియు SME (స్కేలబుల్ మ్యాట్రిక్స్ ఎక్స్‌టెన్షన్) ఎక్స్‌టెన్షన్‌లకు మద్దతు అమలు చేయబడుతుంది.
  • ISA V68/HVX కోసం మద్దతు హెక్సాగన్ ఆర్కిటెక్చర్ కోసం బ్యాకెండ్‌కు జోడించబడింది.
  • x86 బ్యాకెండ్ AMD జెన్ 3 ప్రాసెసర్‌లకు మెరుగైన మద్దతును కలిగి ఉంది.
  • AMDGPU బ్యాకెండ్‌కు GFX1013 RDNA2 APUకి మద్దతు జోడించబడింది.
  • Libc++ C++20 మరియు C++2b ప్రమాణాల యొక్క కొత్త ఫీచర్లను అమలు చేస్తూనే ఉంది, ఇందులో "కాన్సెప్ట్‌లు" లైబ్రరీని పూర్తి చేయడం కూడా కొనసాగుతుంది. MinGW-ఆధారిత Windows ప్లాట్‌ఫారమ్ కోసం std::filesystem కోసం మద్దతు జోడించబడింది. హెడర్ ఫైల్‌లు వేరు చేయబడ్డాయి , మరియు . పూర్తిగా అమలు చేయని కార్యాచరణతో హెడర్ ఫైల్‌లను నిలిపివేయడానికి బిల్డ్ ఎంపిక LIBCXX_ENABLE_INCOMPLETE_FEATURES జోడించబడింది.
  • LLD లింకర్ యొక్క సామర్థ్యాలు విస్తరించబడ్డాయి, దీనిలో Big-endian Aarch64 ప్రాసెసర్‌లకు మద్దతు అమలు చేయబడుతుంది మరియు Mach-O బ్యాకెండ్ సాధారణ ప్రోగ్రామ్‌లను లింక్ చేయడానికి అనుమతించే స్థితికి తీసుకురాబడింది. LLDని ఉపయోగించి Glibcని లింక్ చేయడానికి అవసరమైన మెరుగుదలలు చేర్చబడ్డాయి.
  • LLvm-mca (మెషిన్ కోడ్ ఎనలైజర్) యుటిలిటీ ARM కార్టెక్స్-A55 వంటి సూచనలను క్రమంలో (ఇన్-ఆర్డర్ సూపర్‌స్కేలార్ పైప్‌లైన్) అమలు చేసే ప్రాసెసర్‌లకు మద్దతును జోడించింది.
  • AArch64 ప్లాట్‌ఫారమ్ కోసం LLDB డీబగ్గర్ పాయింటర్ అథెంటికేషన్, MTE (MemTag, మెమరీ ట్యాగింగ్ ఎక్స్‌టెన్షన్) మరియు SVE రిజిస్టర్‌లకు పూర్తి మద్దతును అందిస్తుంది. ప్రతి మెమరీ కేటాయింపు ఆపరేషన్‌కు ట్యాగ్‌లను బైండ్ చేయడానికి మరియు మెమరీని యాక్సెస్ చేస్తున్నప్పుడు పాయింటర్ యొక్క చెక్‌ను నిర్వహించడానికి మిమ్మల్ని అనుమతించే ఆదేశాలు జోడించబడ్డాయి, ఇది సరైన ట్యాగ్‌తో అనుబంధించబడాలి.
  • ప్రాజెక్ట్ ద్వారా రూపొందించబడిన బైనరీ అసెంబ్లీలకు LLDB డీబగ్గర్ మరియు ఫోర్ట్రాన్ భాష - Flang కోసం ఫ్రంటెండ్ జోడించబడ్డాయి.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి