LLVM 13.0 ์ปดํŒŒ์ผ๋Ÿฌ ์ œํ’ˆ๊ตฐ ์ถœ์‹œ

13.0๊ฐœ์›”๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— LLVM XNUMX ํ”„๋กœ์ ํŠธ์˜ ์ถœ์‹œ๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ RISC์™€ ๊ฐ™์€ ๊ฐ€์ƒ ๋ช…๋ น์–ด์˜ ์ค‘๊ฐ„ ๋น„ํŠธ์ฝ”๋“œ(๋‚ฎ์€ ์ˆ˜์ค€์˜ ๊ฐ€์ƒ ๋จธ์‹ )๋กœ ์ปดํŒŒ์ผํ•˜๋Š” GCC ํ˜ธํ™˜ ํˆดํ‚ท(์ปดํŒŒ์ผ๋Ÿฌ, ์˜ตํ‹ฐ๋งˆ์ด์ € ๋ฐ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ)์ž…๋‹ˆ๋‹ค. ๋‹ค๋‹จ๊ณ„ ์ตœ์ ํ™” ์‹œ์Šคํ…œ). ์ƒ์„ฑ๋œ ์˜์‚ฌ์ฝ”๋“œ๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์ง์ ‘ ๊ธฐ๊ณ„์–ด ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Clang 13.0์˜ ๊ฐœ์„  ์‚ฌํ•ญ:

  • ๋ณด์žฅ๋œ ํ…Œ์ผ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค(ํ•จ์ˆ˜์˜ ๋งจ ๋์—์„œ ์„œ๋ธŒ๋ฃจํ‹ด ํ˜ธ์ถœ, ์„œ๋ธŒ๋ฃจํ‹ด์ด ์ž์ฒด ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ํ…Œ์ผ ์žฌ๊ท€ ํ˜•์„ฑ). ๋ณด์žฅ๋œ ๋งˆ๋ฌด๋ฆฌ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ง€์›์€ "return" ๋ฌธ์— ์‚ฌ์šฉ๋˜๋Š” C++์˜ "[[clang::musttail]]" ํŠน์„ฑ๊ณผ C์˜ "__attribute__((musttail))"์— ์˜ํ•ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ํ”Œ๋žซ ๋ฐ˜๋ณต์œผ๋กœ ๋ฐฐํฌํ•˜์—ฌ ์ตœ์ ํ™”๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์Šคํƒ ์†Œ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • "using" ์„ ์–ธ๊ณผ clang ํ™•์žฅ์€ "[[]]" ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ C++11 ์Šคํƒ€์ผ ํŠน์„ฑ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ฝ”๋“œ์— ์˜ˆ์•ฝ๋œ ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•  ๋•Œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด "-Wreserved-identifier" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์—ˆ์ง€๋งŒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด "-Wunused-but-set-parameter" ๋ฐ "-Wunused-but-set-variable" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋นผ๊ธฐ ์ž‘์—…์—์„œ null ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ์—์„œ ์ •์˜๋˜์ง€ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” "-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 Tile")์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • clang-format ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. SpacesInLineCommentPrefix๋Š” ์ฃผ์„ ์•ž์˜ ๊ณต๋ฐฑ ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  IndentAccessModifiers, LambdaBodyIndentation ๋ฐ PPIndentWidth๋Š” ํ•ญ๋ชฉ ์ •๋ ฌ, ๋žŒ๋‹ค ์‹ ๋ฐ ์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ๋ฌธ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋” ํŒŒ์ผ ์—ด๊ฑฐ(SortIncludes) ์ •๋ ฌ ๊ฐ€๋Šฅ์„ฑ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. JSON ํŒŒ์ผ ํ˜•์‹ ์ง€์ •์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • linter clang-tidy์— ์ƒˆ๋กœ์šด ๊ฒ€์‚ฌ์˜ ์ƒ๋‹น ๋ถ€๋ถ„์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

LLVM 13.0์˜ ์ฃผ์š” ํ˜์‹  ์‚ฌํ•ญ:

  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ROP(๋ฐ˜ํ™˜ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋œ ๊ณต๊ฒฉ ์‹คํ–‰์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด CET(Windows ์ œ์–ด ํ๋ฆ„ ์ ์šฉ ๊ธฐ์ˆ ) ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” "-ehcontguard" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • debuginfo-test ํ”„๋กœ์ ํŠธ๋Š” cross-project-tests๋กœ ์ด๋ฆ„์ด ๋ฐ”๋€Œ์—ˆ์œผ๋ฉฐ ๋””๋ฒ„๊น… ์ •๋ณด์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์–ด์…ˆ๋ธ”๋ฆฌ ์‹œ์Šคํ…œ์€ ์—ฌ๋Ÿฌ ๋ฐฐํฌํŒ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์žˆ๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊ฐœ๋ฐœ์ž์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • AArch64 ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ์—์„œ๋Š” Armv9-A RME(Realm Management Extension) ๋ฐ SME(Scalable Matrix Extension) ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์–ด์…ˆ๋ธ”๋Ÿฌ์—์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
  • ISA V68/HVX์— ๋Œ€ํ•œ ์ง€์›์ด Hexagon ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • x86 ๋ฐฑ์—”๋“œ๋Š” AMD Zen 3 ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • AMDGPU ๋ฐฑ์—”๋“œ์— GFX1013 RDNA2 APU์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Libc++๋Š” "concepts" ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์™„์„ฑ์„ ํฌํ•จํ•˜์—ฌ C++20 ๋ฐ C++2b ํ‘œ์ค€์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ณ„์† ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. MinGW ๊ธฐ๋ฐ˜ Windows ํ”Œ๋žซํผ์— ๋Œ€ํ•œ std::filesystem์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ—ค๋” ํŒŒ์ผ , ๋ฐ ๋Š” ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™„์ „ํžˆ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ํ—ค๋” ํŒŒ์ผ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋นŒ๋“œ ์˜ต์…˜ LIBCXX_ENABLE_INCOMPLETE_FEATURES๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Big-endian Aarch64 ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜๋Š” LLD ๋ง์ปค์˜ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์œผ๋ฉฐ Mach-O ๋ฐฑ์—”๋“œ๋Š” ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋งํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. LLD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Glibc๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • llvm-mca(๊ธฐ๊ณ„ ์ฝ”๋“œ ๋ถ„์„๊ธฐ) ์œ ํ‹ธ๋ฆฌํ‹ฐ์—๋Š” ARM Cortex-A55์™€ ๊ฐ™์ด ๋ช…๋ น์„ ์ˆœ์„œ๋Œ€๋กœ(์ˆœ์ฐจ์  ์ˆ˜ํผ์Šค์นผ๋ผ ํŒŒ์ดํ”„๋ผ์ธ) ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • AArch64 ํ”Œ๋žซํผ์šฉ LLDB ๋””๋ฒ„๊ฑฐ๋Š” ํฌ์ธํ„ฐ ์ธ์ฆ, MTE(MemTag, Memory Tagged Extension) ๋ฐ SVE ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ž‘์—…์— ํƒœ๊ทธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์•ก์„ธ์Šคํ•  ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ํƒœ๊ทธ์™€ ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•˜๋Š” ํฌ์ธํ„ฐ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • LLDB ๋””๋ฒ„๊ฑฐ์™€ Fortran ์–ธ์–ด์šฉ ํ”„๋ŸฐํŠธ์—”๋“œ(Flang)๊ฐ€ ํ”„๋กœ์ ํŠธ์—์„œ ์ƒ์„ฑ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์–ด์…ˆ๋ธ”๋ฆฌ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€