рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рдХрд╛рд░реНрдп рд╣реИред рд▓реЗрдХрд┐рди, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрд▓рдПрд▓рд╡реАрдПрдо рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рднреА рдПрдХ рдирдИ рднрд╛рд╖рд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕реА рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд░реАрдм рд╣реИред рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдереЛрдбрд╝реЗ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рд╕реБрд╕рдЬреНрдЬрд┐рдд рд╣реИред рдЗрд╕ рдХрдореА рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓реЗрдЦрдХ, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣рдо рдЖрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЧреЛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рдЙрдирдХрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг
рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдореИрдВ рдпрд╣рд╛рдВ рджреЗрдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рддрдВрддреНрд░ рд╣реИ:
func myAdd(a, b int) int{
return a + b
}
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдФрд░, рд╢рд╛рдпрдж, рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рд░рд▓ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреЛ рдПрд╕рдПрд╕рдП рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ:
func myAdd(a int, b int) int:
entry:
t0 = a + b int
return t0
рдЗрд╕ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХреЗрдд рджрд╛рдИрдВ рдУрд░ рд░рдЦреЗ рдЧрдП рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрд╕рдПрд╕рдП рдХреЗ рдПрдХ рдкрд╣рд▓реВ рдХрд╛ рд╕рд╛рд░ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдХреЛрдб рдХреЛ рдПрд╕рдПрд╕рдП рдлреЙрд░реНрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рддреНрдпреЗрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдмрд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╡рд╣ рдмрдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрджреЗрд╢ return a + b
, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рджреЛ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ: рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдирд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдореВрд▓ рдмреНрд▓реЙрдХ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ; рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд▓реЙрдХ рд╣реИ - рдПрдВрдЯреНрд░реА рдмреНрд▓реЙрдХред рд╣рдо рдиреАрдЪреЗ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рдЧреЛ рдПрд╕рдПрд╕рдП рдХреЛрдб рдЖрд╕рд╛рдиреА рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
define i64 @myAdd(i64 %a, i64 %b) {
entry:
%0 = add i64 %a, %b
ret i64 %0
}
рдЖрдк рдЬреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рдпрд╣рд╛рдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИред рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХреЛрдб рд╕реА рдХреЗ рд╕рдорд╛рди, рдЧреЛ рдПрд╕рдПрд╕рдП рдХреЛрдб рд╕реЗ рдереЛрдбрд╝рд╛ рдордЬрдмреВрдд рд╣реИред рдпрд╣рд╛рдВ, рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдореЗрдВ, рдкрд╣рд▓реЗ рдЙрд╕ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рддрд░реНрдХ рдирд╛рдо рд╕реЗ рдкрд╣рд▓реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдИрдЖрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рддреАрдХ рд▓рдЧрд╛рдП рдЧрдП рд╣реИрдВ @
, рдФрд░ рд╕реНрдерд╛рдиреАрдп рдирд╛рдореЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рддреАрдХ рд╣реИ %
(рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЗрдХрд╛рдИ рднреА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЗрд╕ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рдПрдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЧреЛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд┐рд░реНрдгрдп рд╣реИ int
, рдЬрд┐рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рд╕рдВрдХрд▓рди рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 32-рдмрд┐рдЯ рдпрд╛ 64-рдмрд┐рдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрдм рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрдИ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХреЛрдб, рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реНрд╡рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдРрд╕реЗ рдХреЛрдб рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рди рд╣реЛрдВ
рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ i64
рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЪрд┐рд╣реНрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рддрдЯрд╕реНрде рд╣реИред рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рджреЛрдиреЛрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрд╢рди рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдЗрд╕рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдпрд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ, рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдЪрд░ рдХреЛ рдУрд╡рд░рдлреНрд▓реЛ рдХрд░рдиреЗ рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓реИрдВрдЧ рдлреНрд░рдВрдЯрдПрдВрдб рдСрдкрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рддрд╛ рд╣реИ nsw
(рдХреЛрдИ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд░реИрдк рдирд╣реАрдВ), рдЬреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬреЛрдбрд╝ рдХрднреА рднреА рдУрд╡рд░рдлреНрд▓реЛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рдорд╛рди рдЬреЛрдбрд╝рдирд╛ i16
32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ (32-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде) рд╕реАрдорд╛ рдореЗрдВ рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рд╕рд╛рдЗрди рд╡рд┐рд╕реНрддрд╛рд░ рдСрдкрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ i16
. рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдорд╢реАрди рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдЖрдИрдЖрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реБрдЪрд┐ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИред рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЬреИрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдЫ рднреА рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдлрд┐рд░ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг
рдЕрдЧрд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕реЗ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рд╡рд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛ред рдЕрд░реНрдерд╛рддреН, рд╣рдо рдПрдХ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
func sum(numbers []int) int {
n := 0
for i := 0; i < len(numbers); i++ {
n += numbers[i]
}
return n
}
рдпрд╣ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Go SSA рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
func sum(numbers []int) int:
entry:
jump for.loop
for.loop:
t0 = phi [entry: 0:int, for.body: t6] #n int
t1 = phi [entry: 0:int, for.body: t7] #i int
t2 = len(numbers) int
t3 = t1 < t2 bool
if t3 goto for.body else for.done
for.body:
t4 = &numbers[t1] *int
t5 = *t4 int
t6 = t0 + t5 int
t7 = t1 + 1:int int
jump for.loop
for.done:
return t0
рдпрд╣рд╛рдВ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрд╕рдПрд╕рдП рдлреЙрд░реНрдо рдореЗрдВ рдХреЛрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдзрд┐рдХ рдирд┐рд░реНрдорд╛рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдЗрд╕ рдХреЛрдб рдХреА рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрд░рдЪрд┐рдд рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдЖрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВред рдЧрдгрдирд╛ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рд╕рд╢рд░реНрдд рдФрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдЫрд▓рд╛рдВрдЧ рд╣реЛрддреА рд╣реИ, рдФрд░, рдпрджрд┐ рд╣рдо рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╡рд╛рдкрд╕реА рдЖрджреЗрд╢ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ (рдЬреИрд╕реЗ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕реА рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛рдУрдВ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реБрдП рд▓реЗрдмрд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореВрд▓ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрд╕рдПрд╕рдП рдореЗрдВ, рдмреБрдирд┐рдпрд╛рджреА рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдПрдХ рд▓реЗрдмрд▓ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдмреНрд▓реЙрдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рд╕рдиреНрдирд┐рд╣рд┐рдд рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕реЗ - return
╨╕ jump
.
рдЗрд╕ рдХреЛрдб рдХрд╛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╡рд░рдг рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ phi
. рдирд┐рд░реНрджреЗрд╢ рдХрд╛рдлреА рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рд╕рдордЭрдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕реЗ рдпрд╛рдж рд░рдЦреЛ myAdd
рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ sum
. рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд▓реВрдк рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЪрд░ рдмрджрд▓рддреЗ рд╣реИрдВ i
╨╕ n
.
рдПрд╕рдПрд╕рдП рдПрдХ рддрдерд╛рдХрдерд┐рдд рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИ phi
(рдЗрд╕рдХрд╛ рдирд╛рдо рдЧреНрд░реАрдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реА рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрд╕рдПрд╕рдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рддрд░рдХреАрдмреЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдорд╛рди рд╣реИ (i
рдпрд╛ n
), рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдмреНрд▓реЙрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
t0 = phi [entry: 0:int, for.body: t6] #n
рдЗрд╕рдХрд╛ рдЕрд░реНрде рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдпрджрд┐ рдкрд┐рдЫрд▓рд╛ рдореВрд▓ рдмреНрд▓реЙрдХ рдПрдХ рдмреНрд▓реЙрдХ рдерд╛ entry
(рдЗрдирдкреБрдЯ), рдлрд┐рд░ t0
рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ 0
, рдФрд░ рдпрджрд┐ рдкрд┐рдЫрд▓рд╛ рдореВрд▓ рдмреНрд▓реЙрдХ рдерд╛ for.body
, рддреЛ рдЖрдкрдХреЛ рдорд╛рди рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ t6
рдЗрд╕ рдмреНрд▓реЙрдХ рд╕реЗ. рдпрд╣ рд╕рдм рдХрд╛рдлреА рд░рд╣рд╕реНрдпрдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣реА рддрдВрддреНрд░ рдПрд╕рдПрд╕рдП рдХреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдорд╛рдирд╡реАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рд╕рдм рдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рдХрдард┐рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрдИ рдЕрдиреБрдХреВрд▓рди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рдирд╣реАрдВ рдЬреВрдЭрдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреНрд▓реИрдВрдЧ рднреА рдпреЗ рд╕рднреА рдирд┐рд░реНрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ phi
, рдпрд╣ рдПрдХ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ alloca
(рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИ)ред рдлрд┐рд░, рдПрд▓рдПрд▓рд╡реАрдПрдо рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкрд╛рд╕ рдЪрд▓рд╛рддреЗ рд╕рдордп рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ alloca
рдПрд╕рдПрд╕рдП рдлреЙрд░реНрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЯрд┐рдиреАрдЧреЛ рдХреЛ рдЧреЛ рдПрд╕рдПрд╕рдП рд╕реЗ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрд╕рдПрд╕рдП рдлреЙрд░реНрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдПрдХ рдФрд░ рдирд╡рд╛рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рд╕реНрд▓рд╛рдЗрд╕ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдХреЗ рдПрдХ рдСрдкрд░реЗрд╢рди рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕реВрдЪрдХ рдХреЛ рдбреАрд░реЗрдлрд╝рд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЖрдк рдЖрдИрдЖрд░ рдХреЛрдб рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рд╕реАрдзрд╛ рдЬреЛрдбрд╝ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - 1:int
). рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдореЗрдВ myAdd
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЕрдм рдЬрдм рд╣рдореЗрдВ рд╡реЗ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдорд┐рд▓ рдЧрдИ рд╣реИрдВ, рддреЛ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдлреЙрд░реНрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИ:
define i64 @sum(i64* %ptr, i64 %len, i64 %cap) {
entry:
br label %for.loop
for.loop: ; preds = %for.body, %entry
%0 = phi i64 [ 0, %entry ], [ %5, %deref.next ]
%1 = phi i64 [ 0, %entry ], [ %6, %deref.next ]
%2 = icmp slt i64 %1, %len
br i1 %2, label %for.body, label %for.done
for.body: ; preds = %for.loop
%3 = getelementptr i64, i64* %ptr, i64 %1
%4 = load i64, i64* %3
%5 = add i64 %0, %4
%6 = add i64 %1, 1
br label %for.loop
for.done: ; preds = %for.loop
ret i64 %0
}
рдпрд╣рд╛рдВ, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рд╣рдо рд╡рд╣реА рд╕рдВрд░рдЪрдирд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рдореЗрдВ phi
рдорд╛рди рдФрд░ рд▓реЗрдмрд▓ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХреА рдЧрдИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣рд╛рдБ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдЖрдк рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реНрд▓рд╛рдЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдб рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯрд┐рдиреАрдЧреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ рдЗрд╕ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рддреАрди рд╕реНрд▓рд╛рдЗрд╕ рддрддреНрд╡реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (ptr
, len
╨╕ cap
) рдПрдХ рд╕рдВрд░рдЪрдирд╛ (рд╕рдВрд░рдЪрдирд╛) рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдХреЙрд▓рд┐рдВрдЧ рдкрд░рдВрдкрд░рд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЕрдиреНрдп рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реНрд▓рд╛рдЗрд╕ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдХреЛрдб рдХреА рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ getelementptr
(рдЕрдХреНрд╕рд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ GEP)ред
рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд▓рд╛рдЗрд╕ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕рдХреА рддреБрд▓рдирд╛ C рдореЗрдВ рд▓рд┐рдЦреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реЗ рдХрд░реЗрдВ:
int* sliceptr(int *ptr, int index) {
return &ptr[index];
}
рдпрд╛ рдЗрд╕рдХреЗ рд╕рдорддреБрд▓реНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде:
int* sliceptr(int *ptr, int index) {
return ptr + index;
}
рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╣реИ рдирд┐рд░реНрджреЗрд╢ getelementptr
рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд╕ рдореМрдЬреВрджрд╛ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдП рдкреЙрдЗрдВрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рддреМрд░ рдкрд░ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ mul
╨╕ add
рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реНрддрд░ рдкрд░. рдЖрдк GEP рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
рдЗрд╕ рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдб рдХреА рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ icmp
. рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реНрдгрд╛рдВрдХ рддреБрд▓рдирд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ i1
тАФ рддрд╛рд░реНрдХрд┐рдХ рдореВрд▓реНрдп. рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ slt
(рд╕реЗ рдХрдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд), рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рджрд░реНрд╢рд╛рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЧрдП рджреЛ рдирдВрдмрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ int
. рдпрджрд┐ рд╣рдо рджреЛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ icmp
, рдФрд░ рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдХреАрд╡рд░реНрдб рд╣реЛрдЧрд╛ ult
. рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, fcmp
, рдЬреЛ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдореИрдВрдиреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣рд╛рдВ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреЛрдб рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХрдИ рдПрдиреЛрдЯреЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЬреНрдЮрд╛рдд рдХреЛрдб рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкрд╛рд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреНрдпрдерд╛ рдЖрдИрдЖрд░ рдореЗрдВ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдЭрдВрдбрд╛ рд╣реИ inbounds
рдЬреАрдИрдкреА рдирд┐рд░реНрджреЗрд╢, рдпрд╛ рдЭрдВрдбреЗ nsw
╨╕ nuw
, рдЬрд┐рд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ add
. рдпрд╣реА рдмрд╛рдд рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ private
, рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд╣ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЕрдкреНрд░рдпреБрдХреНрдд рддрд░реНрдХреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдЬреИрд╕реЗ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрддрд░рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЕрдиреБрдХреВрд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЖрдк рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рд╕реНрд░реЛрдд: www.habr.com