LLVM 13.0 ಕಂಪೈಲರ್ ಸೂಟ್‌ನ ಬಿಡುಗಡೆ

ಆರು ತಿಂಗಳ ಅಭಿವೃದ್ಧಿಯ ನಂತರ, LLVM 13.0 ಪ್ರಾಜೆಕ್ಟ್‌ನ ಬಿಡುಗಡೆಯನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಲಾಯಿತು - GCC-ಹೊಂದಾಣಿಕೆಯ ಟೂಲ್‌ಕಿಟ್ (ಕಂಪೈಲರ್‌ಗಳು, ಆಪ್ಟಿಮೈಜರ್‌ಗಳು ಮತ್ತು ಕೋಡ್ ಜನರೇಟರ್‌ಗಳು) ಇದು ಪ್ರೋಗ್ರಾಂಗಳನ್ನು RISC-ತರಹದ ವರ್ಚುವಲ್ ಸೂಚನೆಗಳ ಮಧ್ಯಂತರ ಬಿಟ್‌ಕೋಡ್‌ಗೆ ಕಂಪೈಲ್ ಮಾಡುತ್ತದೆ (ಒಂದು ಕಡಿಮೆ-ಮಟ್ಟದ ವರ್ಚುವಲ್ ಯಂತ್ರದೊಂದಿಗೆ ಬಹು ಹಂತದ ಆಪ್ಟಿಮೈಸೇಶನ್ ಸಿಸ್ಟಮ್). ರಚಿತವಾದ ಸೂಡೊಕೋಡ್ ಅನ್ನು JIT ಕಂಪೈಲರ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರೋಗ್ರಾಂ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯದಲ್ಲಿ ನೇರವಾಗಿ ಯಂತ್ರ ಸೂಚನೆಗಳಾಗಿ ಪರಿವರ್ತಿಸಬಹುದು.

ಕ್ಲಾಂಗ್ 13.0 ರಲ್ಲಿ ಸುಧಾರಣೆಗಳು:

  • ಖಾತರಿಪಡಿಸಿದ ಟೈಲ್ ಕರೆಗಳಿಗೆ ಅಳವಡಿಸಲಾದ ಬೆಂಬಲ (ಕಾರ್ಯದ ಕೊನೆಯಲ್ಲಿ ಸಬ್ರುಟೀನ್ ಅನ್ನು ಕರೆಯುವುದು, ಸಬ್ರುಟೀನ್ ಸ್ವತಃ ಕರೆದರೆ ಟೈಲ್ ರಿಕರ್ಶನ್ ಅನ್ನು ರೂಪಿಸುವುದು). ಗ್ಯಾರಂಟಿ ಟೈಲ್ ಕರೆಗಳಿಗೆ ಬೆಂಬಲವನ್ನು C++ ನಲ್ಲಿ "[[clang::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 unrol” ಮತ್ತು “#pragma omp ಟೈಲ್”) ಬೆಂಬಲವನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ.
  • ಕ್ಲಾಂಗ್-ಫಾರ್ಮ್ಯಾಟ್ ಉಪಯುಕ್ತತೆಗೆ ಆಯ್ಕೆಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ: ಕಾಮೆಂಟ್‌ಗಳ ಮೊದಲು ಸ್ಥಳಗಳ ಸಂಖ್ಯೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು SpacesInLineCommentPrefix, IndentAccessModifiers, LambdaBodyIndentation ಮತ್ತು PPIndentWidth ನಮೂದುಗಳ ಜೋಡಣೆ, ಲ್ಯಾಂಬ್ಡಾ ಅಭಿವ್ಯಕ್ತಿಗಳು ಮತ್ತು ಪ್ರಿಪ್ರೊಸೆಸರ್ ನಿರ್ದೇಶನಗಳನ್ನು ನಿಯಂತ್ರಿಸಲು. ಹೆಡರ್ ಫೈಲ್‌ಗಳ (SortIncludes) ಎಣಿಕೆಯನ್ನು ವಿಂಗಡಿಸುವ ಸಾಧ್ಯತೆಗಳನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ. JSON ಫೈಲ್‌ಗಳನ್ನು ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಲು ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • ಹೊಸ ಚೆಕ್‌ಗಳ ಹೆಚ್ಚಿನ ಭಾಗವನ್ನು ಲಿಂಟರ್ ಕ್ಲಾಂಗ್-ಅಚ್ಚುಕಟ್ಟಾಗಿ ಸೇರಿಸಲಾಗಿದೆ.

LLVM 13.0 ನಲ್ಲಿನ ಪ್ರಮುಖ ಆವಿಷ್ಕಾರಗಳು:

  • ವಿನಾಯಿತಿ ನಿರ್ವಹಣೆ ಹಂತದಲ್ಲಿ ರಿಟರ್ನ್-ಓರಿಯೆಂಟೆಡ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ (ROP) ತಂತ್ರಗಳನ್ನು ಬಳಸಿಕೊಂಡು ನಿರ್ಮಿಸಲಾದ ಶೋಷಣೆಗಳ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯ ವಿರುದ್ಧ ರಕ್ಷಿಸಲು CET (ವಿಂಡೋಸ್ ಕಂಟ್ರೋಲ್-ಫ್ಲೋ ಎನ್‌ಫೋರ್ಸ್‌ಮೆಂಟ್ ಟೆಕ್ನಾಲಜಿ) ತಂತ್ರಜ್ಞಾನವನ್ನು ಬಳಸಲು “-ehcontguard” ಆಯ್ಕೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • ಡೀಬಗ್‌ಇನ್ಫೋ-ಟೆಸ್ಟ್ ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ಕ್ರಾಸ್-ಪ್ರಾಜೆಕ್ಟ್-ಟೆಸ್ಟ್‌ಗಳು ಎಂದು ಮರುಹೆಸರಿಸಲಾಗಿದೆ ಮತ್ತು ಡೀಬಗ್ ಮಾಡುವ ಮಾಹಿತಿಗೆ ಸೀಮಿತವಾಗಿರದೆ ವಿವಿಧ ಯೋಜನೆಗಳಿಂದ ಘಟಕಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ.
  • ಅಸೆಂಬ್ಲಿ ಸಿಸ್ಟಮ್ ಹಲವಾರು ವಿತರಣೆಗಳನ್ನು ನಿರ್ಮಿಸಲು ಬೆಂಬಲವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ, ಒಂದು ಉಪಯುಕ್ತತೆಗಳೊಂದಿಗೆ, ಮತ್ತು ಇನ್ನೊಂದು ಡೆವಲಪರ್ಗಳಿಗಾಗಿ ಗ್ರಂಥಾಲಯಗಳೊಂದಿಗೆ.
  • AArch64 ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಾಗಿ ಬ್ಯಾಕೆಂಡ್‌ನಲ್ಲಿ, Armv9-A RME (ರಿಯಲ್ಮ್ ಮ್ಯಾನೇಜ್‌ಮೆಂಟ್ ಎಕ್ಸ್‌ಟೆನ್ಶನ್) ಮತ್ತು SME (ಸ್ಕೇಲೆಬಲ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಎಕ್ಸ್‌ಟೆನ್ಶನ್) ವಿಸ್ತರಣೆಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಅಸೆಂಬ್ಲರ್‌ನಲ್ಲಿ ಅಳವಡಿಸಲಾಗಿದೆ.
  • ISA V68/HVX ಗೆ ಬೆಂಬಲವನ್ನು ಹೆಕ್ಸಾಗನ್ ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗೆ ಬ್ಯಾಕೆಂಡ್‌ಗೆ ಸೇರಿಸಲಾಗಿದೆ.
  • x86 ಬ್ಯಾಕೆಂಡ್ AMD Zen 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 (ಮೆಮ್‌ಟ್ಯಾಗ್, ಮೆಮೊರಿ ಟ್ಯಾಗಿಂಗ್ ಎಕ್ಸ್‌ಟೆನ್ಶನ್) ಮತ್ತು SVE ರೆಜಿಸ್ಟರ್‌ಗಳಿಗೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಪ್ರತಿ ಮೆಮೊರಿ ಹಂಚಿಕೆ ಕಾರ್ಯಾಚರಣೆಗೆ ಟ್ಯಾಗ್‌ಗಳನ್ನು ಬಂಧಿಸಲು ಮತ್ತು ಮೆಮೊರಿಯನ್ನು ಪ್ರವೇಶಿಸುವಾಗ ಪಾಯಿಂಟರ್‌ನ ಚೆಕ್ ಅನ್ನು ಸಂಘಟಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುವ ಆಜ್ಞೆಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಅದು ಸರಿಯಾದ ಟ್ಯಾಗ್‌ನೊಂದಿಗೆ ಸಂಬಂಧ ಹೊಂದಿರಬೇಕು.
  • LLDB ಡೀಬಗರ್ ಮತ್ತು ಫೋರ್ಟ್ರಾನ್ ಭಾಷೆಯ ಮುಂಭಾಗ - ಫ್ಲಾಂಗ್ ಅನ್ನು ಯೋಜನೆಯಿಂದ ರಚಿಸಲಾದ ಬೈನರಿ ಅಸೆಂಬ್ಲಿಗಳಿಗೆ ಸೇರಿಸಲಾಗಿದೆ.

ಮೂಲ: opennet.ru

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ