рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ

AOT рд╕рдВрдХрд▓рдХ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рд╕рдВрд░рдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИ:

  1. рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рджреГрд╢реНрдпрдкрдЯрд▓
  2. рдорд╢реАрди-рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди (IR) рдкрд╛рдЗрдкрд▓рд╛рдЗрди: рдкрд╛рд╕ рдХрд╛ рдПрдХ рдХреНрд░рдо рдЬреЛ рдЕрдХреНрд╖рдо рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IR рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реАрдзреЗ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдЗрд╕ рднрд╛рдЧ рдХреЛ рдордзреНрдп-рдЕрдВрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рдпрд╛ рдорд╢реАрди рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╢реАрди рдЖрд╢реНрд░рд┐рдд рдмреИрдХрдПрдВрдбред



рдХреБрдЫ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдореЗрдВ, рдЖрдИрдЖрд░ рдкреНрд░рд╛рд░реВрдк рдкреВрд░реЗ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИ, рджреВрд╕рд░реЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдпрд╛ рд╢рдмреНрджрд╛рд░реНрде рдмрджрд▓рддрд╛ рд╣реИред LLVM рдореЗрдВ, рдкреНрд░рд╛рд░реВрдк рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЧрд▓рдд рд╕рдВрдХрд▓рди рдпрд╛ рд╕рдВрдХрд▓рдХ рдХреНрд░реИрд╢ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рдкрд╛рд╕ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдЕрдиреБрдХреВрд▓рди рдкрд╛рд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд▓рдХреНрд╖реНрдп рдХреЛ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдордп рдореЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рд╕рдордп-рд╕рдордп рдкрд░ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдХреВрд▓рди рд╕реНрддрд░реЛрдВ рдкрд░ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рд╣реИред рдХрдВрдкреНрдпреВрдЯрд░ рдЕрдиреБрд╕рдВрдзрд╛рди рдореЗрдВ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдпрд╛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдХреВрд▓рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред

рдорд╛рд░реНрдЧ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдЕрддрд┐рд╕реВрдХреНрд╖реНрдорд╡рд╛рдж рдФрд░ рд░реВрдврд╝рд┐рд╡рд╛рджрд┐рддрд╛ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд╕ рдХреЛ рдПрдХ рдХрд╛рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрдирдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдУрд╡рд░рд▓реИрдк рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕рдордЭреМрддрд╛ рдХрднреА-рдХрднреА рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЬрдм рджреЛ рдкрд╛рд╕ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрдбрд╝реЗ рдкрд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдЖрдИрдЖрд░-рд╕реНрддрд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЬреИрд╕реЗ рдХрд┐ рдирд┐рд░рдВрддрд░ рдСрдкрд░реЗрдЯрд░ рдХреЛ рддрд╣ рдХрд░рдирд╛, рдЗрддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрд▓рдЧ рдкрд╛рд╕ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдПрд▓рдПрд▓рд╡реАрдПрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдирд┐рд░рдВрддрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреБрдЫ рдПрд▓рдПрд▓рд╡реАрдПрдо рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкрд╛рд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдХреНрд▓реИрдВрдЧ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред SSA (рд╕реНрдЯреЗрдЯрд┐рдХ рд╕рд┐рдВрдЧрд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ) рдлреЙрд░реНрдо рдХреЛ рд╕рдордЭрдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╣рд╛рдпрдХ рд╣реИ: рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдЖрдкрдХреЛ рдПрдХ рдкрд░рд┐рдЪрдп рджреЗрдЧрд╛, рдФрд░ рдпрд╣ рдкреБрд╕реНрддрдХ рдЖрдкрдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЧреА, рдЬреЛ рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрд▓рдПрд▓рд╡реАрдПрдо рднрд╛рд╖рд╛ рд╕рдВрджрд░реНрдн рдФрд░ рдЕрдиреБрдХреВрд▓рди рдкрд╛рд╕ рдХреА рдПрдХ рд╕реВрдЪреА рднреА рдкрдврд╝реЗрдВред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ Clang / LLVM 6.0.1 рдЗрд╕ C ++ рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ:

bool is_sorted(int *a, int n) { for (int i = 0; i < n - 1; i++) if (a[i] > a[i + 1]) return false; return true; } 

рдЙрд╕реА рд╕рдордп, рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рдЕрдиреБрдХреВрд▓рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рдЬрдЧрд╣ рд╣реИ, рдФрд░ рд╣рдо рдмрд╣реБрдд рд╕рд╛рд░реЗ рдордЬреЗрджрд╛рд░ рдХреНрд╖рдгреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕реЗ:

рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрдХреВрд▓рди рд╣реИ рдЬреЛ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╕реА ++ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдЧрднрдЧ рд╕рднреА рдЕрдиреБрдХреВрд▓рди, рд▓реЗрдХрд┐рди рд╕реА-рдСрдЯреЛ-рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдЬреЛ рд▓реВрдк рд╕реЗ рдЬрд▓реНрджреА рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкрд╛рда рдореЗрдВ, рдореИрдВ рдЙрди рд╕рднреА рдкрд╛рд╕ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдЬреЛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдмреИрдХрдПрдВрдб рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рдЬреЛ рдмрд╣реБрдд рдХрд╛рдо рднреА рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╢реЗрд╖ рдорд╛рд░реНрдЧ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ! (рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡рд░реВрдкрдг рдХрдард┐рдирд╛рдЗрдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ)ред

рдпрд╣рд╛рдБ Clang рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ IR рдлрд╝рд╛рдЗрд▓ рд╣реИ (рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ "Optnone" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ Clang рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдХреВрд▓рди рдкрд╛рд╕ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди:

 opt -O2 -print-before-all -print-after-all is_sorted2.ll 

рдкрд╣рд▓рд╛ рдкрд╛рд╕ рд╕реАрдПрдлрдЬреА рд╕рд░рд▓реАрдХрд░рдг (рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЧреНрд░рд╛рдл) рд╣реИред рдЪреВрдВрдХрд┐ рдХреНрд▓реИрдВрдЧ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдИрдЖрд░ рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ рдЙрд╕рдореЗрдВ рд╕рд░рд▓ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ:



рдпрд╣рд╛рдБ, рдмреЗрд╕ рдпреВрдирд┐рдЯ 26 рдмрд╕ 27 рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ рдЧрдВрддрд╡реНрдп рдмреНрд▓реЙрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдХреЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреНрд▓реЙрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдпрдо рдХрд░реЗрдЧрд╛ред SimplifyCFG рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдЧрд▓рд┐рдпрд╛рд░реЗ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╣реИред

, . :

, , . phi- , . , . invoke nounwind- call "if (x) if (y)" "if (x&y)"
  • , . :

    , , . phi- , . , . invoke nounwind- call "if (x) if (y)" "if (x&y)"
  • , . :

    , , . phi- , . , . invoke nounwind- call "if (x) if (y)" "if (x&y)"
  • , . :

    , , . phi- , . , . invoke nounwind- call "if (x) if (y)" "if (x&y)"
  • , . :

    , , . phi- , . , . invoke nounwind- call "if (x) if (y)" "if (x&y)"
  • , . :

    , , . phi- , . , . invoke nounwind- call "if (x) if (y)" "if (x&y)"
  • , . :

    , , . phi- , . , . invoke nounwind- call "if (x) if (y)" "if (x&y)"
, . :

, , . phi- , . , . invoke nounwind- call "if (x) if (y)" "if (x&y)"

рд╕реАрдПрдлрдЬреА рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрд╡рд╕рд░ рдЕрдиреНрдп рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд╛рд╕ рдХреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдб рдХреЛрдб рдПрд▓рд┐рдорд┐рдиреЗрд╢рди рдФрд░ рдореВрд╡рд┐рдВрдЧ рд▓реВрдк рдЗрдиреНрд╡реИрд░рд┐рдПрдВрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦрд╛рд▓реА рдЖрдзрд╛рд░ рдмреНрд▓реЙрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛ рдорд╛рд░реНрдЧ, рдПрд╕рдЖрд░рдП (рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рдХрд╛ рд╕реНрдХреЗрд▓рд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди), рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╣реИред рдЗрд╕рдХрд╛ рдирд╛рдо рдХреБрдЫ рднреНрд░рдо рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ SROA рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рдХ рдирд┐рд░реНрджреЗрд╢ (рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреИрдХ рдкрд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди) рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдПрд╕рдПрд╕рдП рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдПрд▓реЛрдХрд╛ рдирд┐рд░реНрджреЗрд╢ ( рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рдЧрднрдЧ рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдЪрд░ рд╣реИред рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди ..) рдХрдИ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдХрдИ рдмрд╛рд░ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдПрд▓реЛрдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕реЗ "рд╕реНрдХреЗрд▓рд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди "рдорд╛рд░реНрдЧ рдХреЗ рдирд╛рдо рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд)ред рдПрд╕рдЖрд░рдП рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рдЪрд░ рдХреЛ рдвреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддреНрдорд╕рдорд░реНрдкрдг рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрддрд╛ рд▓реЗрдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдЕрдиреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдмреБрджреНрдзрд┐рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред



рдПрд╕рдЖрд░рдПрдП рдХреЗ рдмрд╛рдж, рдПрд▓реЛрдХрд╛ рдирд┐рд░реНрджреЗрд╢ (рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЛрдб рдФрд░ рд╕реНрдЯреЛрд░ рдирд┐рд░реНрджреЗрд╢) рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХреЛрдб рдХреНрд▓реАрдирд░ рдФрд░ рдмрд╛рдж рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдмреЗрд╢рдХ, рдПрд╕рдЖрд░рдУ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рднреА рдПрд▓реЛрдХ рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╕реВрдЪрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдирд╛рдо рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛)ред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, SROA рдХреЛрдб рдореЗрдВ phi рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред Phi рдирд┐рд░реНрджреЗрд╢ SSA рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдореВрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ Clang рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдореЗрдВ phi рдХреА рдХрдореА рд╣рдореЗрдВ рдмрддрд╛рддреА рд╣реИ рдХрд┐ Clang SSA рдХрд╛ рдПрдХ рддреБрдЪреНрдЫ рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдзрд╛рд░ рдмреНрд▓реЙрдХ рдореЗрдореЛрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рди рдХрд┐ SSA рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ " рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдо рд╕рдмрдкреНрд░реЗрд╕реНрдкреНрд░реЗрд╢рди рдПрд▓рд┐рдорд┐рдиреЗрд╢рди ", рд╕реАрдПрд╕рдИ (рдЖрдо рд╕рдмрдПрдХреНрд╕рдкреНрд░реЗрд╕рди рдХреЗ рд╢реБрд░реБрдЖрддреА рд╣рдЯрд╛рдиреЗ)ред CSE рдЕрддреНрдпрдзрд┐рдХ рдЙрдк-рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдорд╛рдирд╡-рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рджреЛрдиреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред "рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реАрдПрд╕рдИ" рд╕реАрдПрд╕рдИ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЖрд╕рд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рддреБрдЪреНрдЫ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред



рдпрд╣рд╛рдВ,% 10 рдФрд░% 17 рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рджреВрд╕рд░рд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдПрд╕рдПрд╕рдП рдХреЗ рд▓рд╛рднреЛрдВ рдореЗрдВ рдХреБрдЫ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рджреЗрддрд╛ рд╣реИ: рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЗрди-рдбреЗрдкреНрде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рддреБрд▓реНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдПрд╕рдПрд╕рдП рджреБрдирд┐рдпрд╛ рдХреЗ рдмрд╛рд╣рд░ рдореМрдЬреВрдж рдореЗрдореЛрд░реА рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ)ред

рдЕрдЧрд▓рд╛, рдХрдИ рдкрд╛рд╕ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдлрд┐рд░ " рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЕрдиреБрдХреВрд▓рдХ " рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

, . , , , , ..

рдпрд╣ рдорд╛рд░реНрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реИ:



рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реА: рд╕рдВрдХрд▓рдХ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореЗрдЯрд╛рдбреЗрдЯрд╛ред рдЖрдк рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдордиреЗ рдЬрд┐рди рдЕрдиреНрдп рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рдиреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдЙрдирдХреЗ рд╡рд┐рдкрд░реАрдд, рдЧреНрд▓реЛрдмрд▓ рд╡реИрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдЗрдВрдЯрд░рдкреНрд░реЛрдбреНрдпреВрд░рд▓ рд╣реИ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЙрдбреНрдпреВрд▓ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╕реА рдФрд░ рд╕реА ++ рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░ (рдЕрдзрд┐рдХ рдпрд╛ рдХрдо) рд╣реИред рдЗрдВрдЯрд░рдкреНрд░реЛрдбреЗрдХреНрдЯреЛрд░рд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрдВрдЯреНрд░рд╛рдкреНрд░реЛрд╕реЗрд░реЗрдбреБрд░рд▓ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдлрдВрдХреНрд╢рди рджреЗрдЦрддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛ рдорд╛рд░реНрдЧ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ " рдирд┐рд░реНрджреЗрд╢ рд╕рдВрдпреЛрдЬрди ", InstCombine рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреАрдкрд╣реЛрд▓ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╡рд┐рдз рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬреЛ (рдЖрдорддреМрд░ рдкрд░) рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ , рдЬреЛ рдЖрдо рдбреЗрдЯрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред InstCombine рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдЙрдкрд░реНрдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╡рд╣ рдмрд╣реБрдд рдирд╣реАрдВ рдмрджрд▓рд╛:



рдпрд╣рд╛рдВ,% 1 рд╕реЗ 1 рдХреЛ рдШрдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп,% 4 рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо -1 рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╣рд┐рддреАрдХрд░рдг рд╣реИред рдЬрдм рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЗрд╕реЗ рдХреИрдиреЛрдирд┐рдХрд▓ (рдЕрдХреНрд╕рд░ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪреБрдиреЗ рд╣реБрдП) рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЧреБрдЬрд░рддрд╛ рд╣реИ рдФрд░ рдмреИрдХреЗрдВрдб рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдмрджрд▓рд╛рд╡ InstCombine рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рджреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ (рд╕реЗрдХреНрд╕реНрдЯ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди) рдХрд╛ рд╡рд┐рд╣рд┐рдд рд░реВрдк рд╣реИ, рдЬреЛ% 7 рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ 11% рд╢реВрдиреНрдп рд╡рд┐рд╕реНрддрд╛рд░ (zext) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд░реВрдкрд╛рдВрддрд░рдг рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдЬрдм рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реЗрдХреНрд╕реНрдЯ рдСрдкрд░реЗрдВрдб рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реВрдк рд╡реЗрд░рд┐рдПрдмрд▓ 0 рд╕реЗ n рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ (рдпрджрд┐ рдПрди рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рддреЛ рд▓реВрдк рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред рдирд╡реАрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди "nuw" (рдмрд┐рдирд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд▓рдкреЗрдЯ) рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдерд╛ рдЬреЛ% 10 рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ (1) рд▓реВрдк рд╡реИрд░рд┐рдПрдмрд▓ рд╣рдореЗрд╢рд╛ рдмрдврд╝рддрд╛ рд░рд╣рддрд╛ рд╣реИ рдФрд░ (2) рдпрджрд┐ рд╡реИрд░рд┐рдПрдмрд▓ рд╢реВрдиреНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬрдм рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВ INT_MAX рдЪреМрд░рд╛рд╣реЗ рдкрд░ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдУрд╡рд░рдлреНрд▓реЛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, UINT_MAX рдХреЗ рдмрд╛рджред рдЗрд╕ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдж рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, SimpleifyCFG рджреВрд╕рд░реА рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреЛ рдЦрд╛рд▓реА рдмреЗрд╕ рдмреНрд▓реЙрдХ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ:



рдлрд┐рд░, "Deduce рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ" рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рддрд╛ рд╣реИ:



"рдиреЙрд░рдХреЗрд░реНрд╕" рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рднреА рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, "рдЖрд╕рд╛рдиреА рд╕реЗ" рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ "nocapture" рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХрд╣реАрдВ рднреА рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рдФрд░ "рдЖрд╕рд╛рдиреА рд╕реЗ" рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореЗрдореЛрд░реА рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдлрд┐рд░ " рд░реЛрдЯреЗрдЯ рд▓реВрдкреНрд╕ " рдкрд╛рд╕ рдмрд╛рдж рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:



рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрддрд░ рдбрд░рд╛рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреЛрдЯреЗ рд╣реИрдВред рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ, рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп рддрд░реАрдХреЗ рд╕реЗ, рдЕрдЧрд░ рд╣рдо рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рд░реЛрдЯреЗрд╢рди рдЪрдХреНрд░реЛрдВ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рдЧреНрд░рд╛рдл рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ (рдкрд╣рд▓реЗ) рдФрд░ рдмрд╛рдж рдореЗрдВ (рджрд╛рдПрдВ) рдЙрдирдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ:



рдореВрд▓ рдХреЛрдб рдЕрднреА рднреА рд▓реВрдк рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓реИрдВрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

 initializer goto COND COND: if (condition) goto BODY else goto EXIT BODY: body modifier goto COND EXIT: 

рд░рди рдХреЗ рдмрд╛рдж, рд▓реВрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 initializer if (condition) goto BODY else goto EXIT BODY: body modifier if (condition) goto BODY else goto EXIT EXIT: 

(рдЬреЛрд╣рд╛рдиреНрд╕ рдбрд░реНрдлрд╝рд░реНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реБрдзрд╛рд░ рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ - рдзрдиреНрдпрд╡рд╛рдж!)

рд▓реВрдк рд░реЛрдЯреЗрд╢рди рдкрд╛рд╕ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рд╢рд╛рдЦрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИ, рдЬреЛ рдЖрдЧреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдмреЗрд╣рддрд░ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ред

CFG рд╕рд░рд▓реАрдХрд░рдг рдкрд╛рд╕ рджреЛ рдмреЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдкрддрд┐рдд (рдПрдХрд▓-рдЗрдирдкреБрдЯ) phi рдирд┐рд░реНрджреЗрд╢ рд╣реЛрддреЗ рд╣реИрдВ:



рдирд┐рд░реНрджреЗрд╢ рдХреЙрдореНрдмрд┐рдирд░ рдкрд╛рд╕ "% 4 = 0 s <(% 1 - 1)" рдХреЛ "% 4 =% 1 s> 1 <(рдЬрд╣рд╛рдБ s <рдФрд░ s> рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдСрдкрд░реЗрдВрдб рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ," рдЙрдкрдпреЛрдЧреА рдкрд░рд┐рд╡рд░реНрддрди, рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд▓рдВрдмрд╛рдИ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ "рдореГрдд" (рдЕрдкреНрд░рд╛рдкреНрдп) рдирд┐рд░реНрджреЗрд╢ рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ ( рдкреИрдЪ рдХреЛ рджреЗрдЦреЗрдВ)ред рдпрд╣ рдкрд╛рд╕ рднреА рддреБрдЪреНрдЫ phi рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд▓реВрдк рд░реЛрдЯреЗрд╢рди рдкрд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗред



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд " рдХреИрдиреЛрдирд┐рдХрд▓рд╛рдЗрдЬрд╝ рдиреЗрдЪреБрд░рд▓ рд▓реВрдкреНрд╕ " рдорд╛рд░реНрдЧ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рд╣реИ:

, .

(Loop pre-header) , , . ,, LICM.

, , ( ) ( ). , , "store-sinking", LICM.

, (backedge).

Indirectbr . , . , , .

, simplifycfg , , , .

, , CFG, .


рдпрд╣рд╛рдБ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдмреНрд▓реЙрдХ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛:



рдлрд┐рд░ " рд▓реВрдк рдЪрд░ рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг " рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

( , ), , .

, :

, . , 'for (i = 7; i*i < 1000; ++i)' 'for (i = 0; i != 25; ++i)'.

indvar , . , "".

рдЗрд╕ рдкрд╛рд╕ рдХрд╛ рдкреНрд░рднрд╛рд╡ 32-рдмрд┐рдЯ рд▓реВрдк рдЪрд░ рдХреЛ 64-рдмрд┐рдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛:



рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВ zext - рдкрд╣рд▓реЗ рд╕реЗрдХреНрд╕реНрдЯ рд╕реЗ рд╡рд┐рд╣рд┐рдд рд░реВрдк рдореЗрдВ рдбрд╛рд▓реА рдЧрдИ, рдлрд┐рд░ рд╕реЗ sext рдореЗрдВ рд▓реМрдЯ рдЖрдИред

рдЕрдм " рд╡реИрд╢реНрд╡рд┐рдХ рдореВрд▓реНрдп рдЕрдВрдХрди " рдкрд╛рд╕ рдмрд╣реБрдд рд╣реА рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЙрд╕реЗ рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?



рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛? рд╣рд╛рдВ, [i] рдФрд░ [i + 1] рдХреЗ рдЕрдиреБрд░реВрдк, рдмрд╛рдИрдВ рдУрд░ рд▓реВрдк рдореЗрдВ рджреЛ рд▓реЛрдб рдирд┐рд░реНрджреЗрд╢ред рдпрд╣рд╛рдВ, GVN рдиреЗ рдкрд╛рдпрд╛ рдХрд┐ [i] рд▓реЛрдб рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓реВрдк рдХреЗ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ [i + 1] рдХреЛ рдЕрдЧрд▓реЗ [i] рдХреА рддрд░рд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд░рд▓ рдЪрд╛рд▓ рд╕рдорд╛рд░реЛрд╣ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдореЗрдореЛрд░реА рд░реАрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдзреЗ рд╕реЗ рдХрдо рдХрд░ рджреЗрддреА рд╣реИред LLVM рдФрд░ GCC рджреЛрдиреЛрдВ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдХрд░рдирд╛ рд╕реАрдЦрд╛ рд╣реИред

рдЖрдк рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рддрд░рдХреАрдм рдХрд╛рдо рдХрд░реЗрдЧреА рдЕрдЧрд░ рд╣рдо [i] рдХреА рддреБрд▓рдирд╛ [i + 2] рд╕реЗ рдХрд░реЗрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЬреАрд╕реАрд╕реА рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдЪрд╛рд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдлрд┐рд░ " рдмрд┐рдЯ-рдЯреНрд░реИрдХрд┐рдВрдЧ рдбреЗрдб рдХреЛрдб рдПрд▓рд┐рдорд┐рдиреЗрд╢рди " рдкрд╛рд╕ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:

"Bit-Tracking Dead Code Elimination". (, "" "" ..) "" . , "" .

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХрдорд╛рддреНрд░ рдбреЗрдб рдХреЛрдб GEP (рдПрд▓рд┐рдореЗрдВрдЯ рдкреЙрдЗрдВрдЯрд░) рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рд╣реИ, рдФрд░ рдпрд╣ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдбреЗрдб рд╣реИ (GVN рдкрд╛рд╕ рдиреЗ рд▓реЛрдб рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЛ рдбрд┐рд▓реАрдЯ рдХрд░ рджрд┐рдпрд╛, рдЬреЛ рдЗрд╕ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдПрдбреНрд░реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ:



рдЕрдм рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдиреЗ рдПрдХ рдФрд░ рдЖрдзрд╛рд░ рдЗрдХрд╛рдИ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░реНрдХ рд╕реЗ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ InstCombine рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд╢рд╛рдпрдж рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕реНрдерд╛рди рдирд╣реАрдВ рдерд╛ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



рдЕрдм рдХреБрдЫ рдЬреНрдпрд╛рджрд╛ рд╣реА рдЕрдЬреАрдм рд╣реЛ рд░рд╣рд╛ рд╣реИ: " рдЬрдВрдк рдереНрд░реЗрдбрд┐рдВрдЧ " рдкрд╛рд╕ рдиреЗ рдХреНрдпрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ "рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЫреЛрд░реЛрдВ" рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рдлрд┐рд░ рд╣рдо рдлрд┐рд░ рд╕реЗ рд╡рд┐рд╣рд┐рдд рд░реВрдк рдореЗрдВ рдврд▓реЗ:



рдФрд░ рд╕реАрдПрдлрдЬреА рд╕рд░рд▓реАрдХрд░рдг рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:



рдФрд░ рдкреАрдЫреЗ:



рдФрд░ рдлрд┐рд░ рд╕реЗ:



рдФрд░ рдкреАрдЫреЗ:



рдФрд░ рд╡рд╣рд╛рдБ:



рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдорд┐рдбрд▓реИрдВрдб рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВ! рджрд╛рдИрдВ рдУрд░ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╡рд╣ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ) x86-64 рдмреИрдХреЗрдВрдб рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рдЖрдк рдЙрддреНрд╕реБрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд, рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрдирдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЕрдиреБрдХреВрд▓рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рджреВрд╕рд░реА рдЫрдорд╛рд╣реА рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкрддрд┐рдд рдорд╛рдорд▓реЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

рдЖрднрд╛рд░: рдореЗрд░реЗ рдЗрди-рдЗрди-рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрд░реНрд╕ рдХреЗ рдХреБрдЫ рдЫрд╛рддреНрд░реЛрдВ рдиреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдорд╕реМрджреЗ рдкрд░ рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЫреЛрдбрд╝ рджреА (рдФрд░ рдореИрдВрдиреЗ рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд┐рдпрд╛)ред рдореИрдВ рд▓реВрдк рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХреЗ рдЗрд╕ рдЕрдЪреНрдЫреЗ рд╕реЗрдЯ рдореЗрдВ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ред

Source: https://habr.com/ru/post/hi433598/


All Articles