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

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

కొత్త విడుదలలో కీలకమైన మార్పు చేర్చడం పార్శ్వము, ఫోర్ట్రాన్ భాష కోసం ఫ్రంటెండ్. Flang Fortran 2018, OpenMP 4.5 మరియు OpenACC 3.0కి మద్దతు ఇస్తుంది, అయితే ప్రాజెక్ట్ యొక్క అభివృద్ధి ఇంకా పూర్తి కాలేదు మరియు ఫ్రంట్ ఎండ్ కోడ్ పార్సింగ్ మరియు ఖచ్చితత్వాన్ని తనిఖీ చేయడానికి పరిమితం చేయబడింది. LLVM ఇంటర్మీడియట్ కోడ్ ఉత్పత్తికి ఇంకా మద్దతు లేదు మరియు ఎక్జిక్యూటబుల్ ఫైల్‌లను రూపొందించడానికి, కానానికల్ కోడ్ ఉత్పత్తి చేయబడుతుంది మరియు బాహ్య ఫోర్ట్రాన్ కంపైలర్‌కు పంపబడుతుంది.

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

  • వియుక్త సింటాక్స్ ట్రీని పునరుద్ధరించే సామర్థ్యం జోడించబడింది (AST) విరిగిన C++ కోడ్ కోసం, ఇది లోపాలను నిర్ధారించడంలో సహాయపడుతుంది మరియు క్లాంగ్-టిడీ మరియు క్లాంగ్డ్ వంటి బాహ్య ప్రయోజనాలకు అదనపు సమాచారాన్ని అందిస్తుంది. C++ కోడ్ కోసం ఫీచర్ డిఫాల్ట్‌గా ప్రారంభించబడింది మరియు "-Xclang -f[no-]recovery-ast" ఎంపికల ద్వారా నియంత్రించబడుతుంది.
  • కొత్త డయాగ్నస్టిక్ మోడ్‌లు జోడించబడ్డాయి:
    • “-Wpointer-to-int-cast” అనేది పూర్ణాంక రకం పూర్ణాంకానికి కాస్టింగ్ పాయింటర్‌ల గురించి హెచ్చరికల సమూహం, ఇది సాధ్యమయ్యే అన్ని విలువలను కలిగి ఉండదు.
    • “-Wuninitialized-const-reference” - “const” అట్రిబ్యూట్‌తో రిఫరెన్స్ ఆర్గ్యుమెంట్‌లను అంగీకరించే ఫంక్షన్ పారామితులలో అన్‌ఇనిషియలైజ్డ్ వేరియబుల్స్ పాస్ చేయడం గురించి హెచ్చరిక.
    • "-Wimplicit-const-int-float-conversion" - పూర్ణాంక రకానికి నిజమైన స్థిరాంకం యొక్క అవ్యక్త మార్పిడి గురించి డిఫాల్ట్ హెచ్చరిక ద్వారా ప్రారంభించబడింది.
  • ARM ప్లాట్‌ఫారమ్ కోసం, కంపైలర్‌లో నిర్మించిన C ఫంక్షన్‌లు అందించబడ్డాయి (అంతర్గతాంశాలు), సమర్థవంతమైన వెక్టార్ సూచనలతో భర్తీ చేయబడింది ఆర్మ్ v8.1-M MVE మరియు CDE. అందుబాటులో ఉన్న విధులు arm_mve.h మరియు arm_cde.h అనే శీర్షిక ఫైల్‌లలో నిర్వచించబడ్డాయి.
  • చేర్చబడింది విస్తరించిన పూర్ణాంకాల రకాల _ExtInt(N), FPGA/HLSలో సమర్ధవంతంగా ప్రాసెస్ చేయగల రెండు శక్తుల గుణకాలు లేని రకాలను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది. ఉదాహరణకు, _ExtInt(7) 7 బిట్‌లతో కూడిన పూర్ణాంక రకాన్ని నిర్వచిస్తుంది.
  • ARM SVE (స్కేలబుల్ వెక్టర్ ఎక్స్‌టెన్షన్) సూచనల ఆధారంగా అంతర్నిర్మిత C ఫంక్షన్‌లకు మద్దతును నిర్వచించే మాక్రోలు జోడించబడ్డాయి:
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. ఉదాహరణకు, "-march=armv64-a+sve" కమాండ్ లైన్ ఎంపికను సెట్ చేయడం ద్వారా AArch8 కోడ్‌ను రూపొందించేటప్పుడు __ARM_FEATURE_SVE మాక్రో నిర్వచించబడుతుంది.

  • "-O" ఫ్లాగ్ ఇప్పుడు "-O1"కి బదులుగా "-O2" ఆప్టిమైజేషన్ మోడ్‌తో గుర్తించబడింది.
  • కొత్త కంపైలర్ ఫ్లాగ్‌లు జోడించబడ్డాయి:
    • "-fstack-clash-protection" - వ్యతిరేకంగా రక్షణను అనుమతిస్తుంది స్టాక్ మరియు కుప్ప యొక్క విభజనలు.
    • "-ffp-exception-behavior={ఇగ్నోర్, మైట్రాప్, స్ట్రిక్ట్}" - ఫ్లోటింగ్ పాయింట్ నంబర్‌ల కోసం మినహాయింపు హ్యాండ్లర్ మోడ్‌ను ఎంచుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది.
    • "-ffp-model={precise,strict,fast}" - ఫ్లోటింగ్ పాయింట్ నంబర్‌ల కోసం ప్రత్యేకమైన ఎంపికల శ్రేణికి ప్రాప్యతను సులభతరం చేస్తుంది.
    • "-fpch-codegen" మరియు "-fpch-debuginfo" కోడ్ మరియు debuginfo కోసం ప్రత్యేక ఆబ్జెక్ట్ ఫైల్‌లతో ప్రీకంపైల్డ్ హెడర్ (PCH)ని రూపొందించడానికి.
    • "-fsanitize-coverage-allowlist" మరియు "-fsanitize-coverage-blocklist" కవరేజ్ పరీక్ష తెలుపు మరియు నలుపు జాబితాలను తనిఖీ చేయడం కోసం.
    • TLS (థ్రెడ్-స్థానిక నిల్వ) పరిమాణాన్ని ఎంచుకోవడానికి “-mtls-size={12,24,32,48}”.
    • ప్రయోగాత్మక RISC-V పొడిగింపులను ప్రారంభించడానికి "-menable-Experimental-extension".
  • C కోసం డిఫాల్ట్ మోడ్ "-fno-common", ఇది కొన్ని ప్లాట్‌ఫారమ్‌లలో గ్లోబల్ వేరియబుల్స్‌కు మరింత సమర్థవంతమైన యాక్సెస్‌ను అనుమతిస్తుంది.
  • డిఫాల్ట్ మాడ్యూల్ కాష్ /tmp నుండి ~/.cache డైరెక్టరీకి తరలించబడింది. భర్తీ చేయడానికి, మీరు “-fmodules-cache-path=” ఫ్లాగ్‌ని ఉపయోగించవచ్చు.
  • డిఫాల్ట్ C భాషా ప్రమాణం gnu11 నుండి gnu17కి నవీకరించబడింది.
  • GNU C పొడిగింపు కోసం ప్రాథమిక మద్దతు జోడించబడింది "asm ఇన్లైన్» అసెంబ్లర్ ఇన్సర్ట్‌లను జోడించడానికి. పొడిగింపు ఇప్పటికీ విశ్లేషించబడుతోంది, కానీ ఏ విధంగానూ ప్రాసెస్ చేయబడలేదు.
  • OpenCL మరియు CUDA మద్దతుతో అనుబంధించబడిన సామర్థ్యాలు విస్తరించబడ్డాయి. OpenCL 2.0 బ్లాక్ డయాగ్నస్టిక్స్ కోసం మద్దతు జోడించబడింది మరియు కొత్త OpenMP 5.0 ఫీచర్లను అమలు చేసింది.
  • ఎక్స్‌టర్న్ "C" మరియు ఎక్స్‌టర్న్ "C++" బ్లాక్‌లలో అమరిక కోసం క్లాంగ్-ఫార్మాట్ యుటిలిటీకి IndentExternBlock ఎంపిక జోడించబడింది.
  • స్టాటిక్ ఎనలైజర్ C++లో వారసత్వంగా వచ్చిన కన్‌స్ట్రక్టర్‌ల నిర్వహణను మెరుగుపరిచింది. లాక్‌ల కోసం తనిఖీ చేయడానికి alpha.core.C11Lock మరియు alpha.fuchsia.Lock కొత్త చెక్‌లు జోడించబడ్డాయి, putenv, webkit.NoUncountedMemberChecker మరియు webkit.RefCntblDcountable రకాలుగా గుర్తించలేని రకాలు, గుర్తించలేని రకాలు .cplusplus .SmartPtr శూన్య స్మార్ట్ పాయింటర్ డెరిఫరెన్స్ కోసం తనిఖీ చేయండి.
  • గణగణమని ద్వని చేయు చక్కనైన లిన్టర్ లో జోడించారు కొత్త చెక్కులలో ఎక్కువ భాగం.
  • క్లాంగ్డ్ కాషింగ్ సర్వర్ (క్లాంగ్ సర్వర్) పనితీరును మెరుగుపరిచింది మరియు కొత్త డయాగ్నస్టిక్ సామర్థ్యాలను జోడించింది.

ప్రధాన ఆవిష్కరణలు LLVM 11.0:

  • బిల్డ్ సిస్టమ్ పైథాన్ 3ని ఉపయోగించేందుకు మార్చబడింది. పైథాన్ 3 అందుబాటులో లేకుంటే, పైథాన్ 2ను ఉపయోగించడం సాధ్యమవుతుంది.
  • గో భాష (llgo) కోసం కంపైలర్‌తో ఉన్న ఫ్రంట్ ఎండ్ విడుదల నుండి మినహాయించబడింది, ఇది భవిష్యత్తులో పునర్నిర్మించబడవచ్చు.
  • కాల్‌లను వెక్టరైజ్ చేయడానికి స్కేలార్ మరియు వెక్టర్ ఫంక్షన్‌ల మధ్య మ్యాపింగ్‌ను వివరించడానికి వెక్టర్-ఫంక్షన్-అబి-వేరియంట్ లక్షణం ఇంటర్మీడియట్ రిప్రజెంటేషన్ (IR)కి జోడించబడింది. llvm ::VectorType నుండి llvm :: FixedVectorType మరియు llvm ::ScalableVectorType అనే రెండు వేర్వేరు వెక్టర్ రకాలు ఉన్నాయి.
  • Udef విలువల ఆధారంగా బ్రాంచింగ్ చేయడం మరియు ప్రామాణిక లైబ్రరీ ఫంక్షన్‌లకు undef విలువలను పంపడం నిర్వచించబడని ప్రవర్తనగా గుర్తించబడుతుంది. IN
    memset/memcpy/memmove undef పాయింటర్లను పాస్ చేయడానికి అనుమతిస్తుంది, కానీ పరిమాణంతో పరామితి సున్నా అయితే.

  • LLJIT LLJIT::initialize మరియు LLJIT::deinitialize పద్ధతుల ద్వారా స్టాటిక్ ఇనిషియలైజేషన్‌లను నిర్వహించడానికి మద్దతును జోడించింది. StaticLibraryDefinitionGenerator తరగతిని ఉపయోగించి JITDylibకి స్టాటిక్ లైబ్రరీలను జోడించే సామర్థ్యం అమలు చేయబడింది. దీని కోసం C API జోడించబడింది ORCv2 (JIT కంపైలర్‌లను నిర్మించడానికి API).
  • Cortex-A64, Cortex-A34, Cortex-A77 మరియు Cortex-X78 ప్రాసెసర్‌లకు మద్దతు AArch1 ఆర్కిటెక్చర్ కోసం బ్యాకెండ్‌కు జోడించబడింది. అమలు చేయబడిన ARMv8.2-BF16 (BFloat16) మరియు ARMv8.6-A పొడిగింపులు, ఇందులో RMv8.6-ECV (మెరుగైన కౌంటర్ వర్చువలైజేషన్), ARMv8.6-FGT (ఫైన్ గ్రెయిన్డ్ ట్రాప్స్), ARMv8.6-AMU (యాక్టివిటీ మానిటైజేషన్) మరియు ARMv8.0-DGH (డేటా సేకరణ సూచన). SVE వెక్టర్ సూచనలకు అంతర్నిర్మిత విధులు-బైండింగ్‌ల కోసం కోడ్‌ను రూపొందించే సామర్థ్యం అందించబడుతుంది.
  • Cortex-M55, Cortex-A77, Cortex-A78 మరియు Cortex-X1 ప్రాసెసర్‌లకు మద్దతు ARM ఆర్కిటెక్చర్ కోసం బ్యాకెండ్‌కు జోడించబడింది. పొడిగింపులు అమలు చేయబడ్డాయి
    Armv8.6-A మ్యాట్రిక్స్ మల్టిప్లై మరియు RMv8.2-AA32BF16 BFloat16.

  • పవర్‌పిసి ఆర్కిటెక్చర్ కోసం బ్యాకెండ్‌కు POWER10 ప్రాసెసర్‌ల కోసం కోడ్ ఉత్పత్తికి మద్దతు జోడించబడింది. లూప్ ఆప్టిమైజేషన్‌లు విస్తరించబడ్డాయి మరియు ఫ్లోటింగ్ పాయింట్ సపోర్ట్ మెరుగుపరచబడింది.
  • RISC-V ఆర్కిటెక్చర్ కోసం బ్యాకెండ్ ఇంకా అధికారికంగా ఆమోదించబడని ప్రయోగాత్మక పొడిగించిన సూచన సెట్‌లకు మద్దతు ఇచ్చే ప్యాచ్‌ల ఆమోదాన్ని అనుమతిస్తుంది.
  • AVR ఆర్కిటెక్చర్ కోసం బ్యాకెండ్ ప్రాథమిక పంపిణీలో చేర్చబడిన ప్రయోగాత్మక వర్గం నుండి స్థిరంగా బదిలీ చేయబడింది.
  • x86 ఆర్కిటెక్చర్ బ్యాకెండ్ Intel AMX మరియు TSXLDTRK సూచనలకు మద్దతు ఇస్తుంది. దాడుల నుండి రక్షణ జోడించబడింది LVI (లోడ్ వాల్యూ ఇంజెక్షన్), మరియు CPUలో ఊహాజనిత కార్యకలాపాల అమలు వల్ల సంభవించే దాడులను నిరోధించడానికి సాధారణ స్పెక్యులేటివ్ ఎగ్జిక్యూషన్ సైడ్ ఎఫెక్ట్ సప్రెషన్ మెకానిజంను కూడా అమలు చేస్తుంది.
  • SystemZ ఆర్కిటెక్చర్ కోసం బ్యాకెండ్‌లో, MemorySanitizer మరియు LeakSanitizer కోసం మద్దతు జోడించబడింది.
  • Libc++కి గణిత స్థిరాంకాలతో హెడర్ ఫైల్‌కు మద్దతు జోడించబడింది .
  • విస్తరించింది LLD లింకర్ సామర్థ్యాలు. "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " చేర్చబడిన ఎంపికలతో సహా ELF ఆకృతికి మెరుగైన మద్దతు -thinlto- single-module", "-unique", "-rosegment", "-threads=N". ట్రేస్‌ను ఫైల్‌లో సేవ్ చేయడానికి "--టైమ్-ట్రేస్" ఎంపిక జోడించబడింది, ఆపై Chromeలో chrome://tracing ఇంటర్‌ఫేస్ ద్వారా విశ్లేషించబడుతుంది.

మూలం: opennet.ru

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