āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻĄā§āĻā§āĻ˛āĻĒ āĻāĻ°āĻž āĻā§āĻŦāĻ āĻāĻ āĻŋāĻ¨ āĻāĻžāĻāĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§, āĻ¸ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤, LLVM-āĻāĻ° āĻŽāĻ¤ā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ° āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻ¸āĻžāĻĨā§, āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻāĻŋ āĻŦā§āĻ¯āĻžāĻĒāĻāĻāĻžāĻŦā§ āĻ¸āĻ°āĻ˛ā§āĻā§āĻ¤ āĻšāĻ¯āĻŧā§āĻā§, āĻ¯āĻž āĻāĻŽāĻ¨āĻāĻŋ āĻāĻāĻāĻ¨ āĻāĻāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻžāĻ°āĻā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻžāĻˇāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ āĻ¯āĻž C-āĻāĻ° āĻĒāĻžāĻ°āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¸ā§āĻ° āĻāĻžāĻāĻžāĻāĻžāĻāĻŋāĨ¤ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻāĻŋ āĻŦāĻŋāĻĒā§āĻ˛ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻā§āĻĄ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻĻāĻŋāĻ¯āĻŧā§ āĻ¸āĻā§āĻāĻŋāĻ¤āĨ¤ āĻāĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻāĻŋ āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻāĻŋāĻ° āĻ˛ā§āĻāĻ, āĻ¯āĻžāĻ° āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻŽāĻ°āĻž āĻāĻ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻāĻŋ, Go-āĻ¤ā§ āĻ˛ā§āĻāĻž āĻā§āĻĄā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻ˛ā§āĻā§āĻ¨ āĻāĻŦāĻ āĻĻā§āĻāĻžāĻŦā§āĻ¨ āĻ¯ā§ āĻā§āĻāĻžāĻŦā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĨāĻŽ āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛
āĻĒā§āĻ°āĻĨāĻŽ āĻāĻĻāĻžāĻšāĻ°āĻŖ
āĻāĻŽāĻŋ āĻāĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻĨāĻŽ āĻ¯ā§ āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻ¯āĻžāĻā§āĻāĻŋ āĻ¤āĻž āĻšāĻ˛ āĻ¸āĻāĻā§āĻ¯āĻž āĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻšāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž:
func myAdd(a, b int) int{
return a + b
}
āĻāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻā§āĻŦ āĻ¸āĻšāĻ, āĻāĻŦāĻ, āĻ¸āĻŽā§āĻāĻŦāĻ¤, āĻāĻŋāĻā§āĻ āĻ¸āĻšāĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻž. āĻāĻāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ Go SSA āĻā§āĻĄā§ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°ā§:
func myAdd(a int, b int) int:
entry:
t0 = a + b int
return t0
āĻāĻ āĻĻā§āĻļā§āĻ¯ā§āĻ° āĻ¸āĻžāĻĨā§, āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻāĻā§āĻāĻŋāĻ¤āĻā§āĻ˛āĻŋ āĻĄāĻžāĻ¨āĻĻāĻŋāĻā§ āĻ°āĻžāĻāĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻĒā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻ āĻā§āĻ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻĒāĻ¨āĻžāĻā§ SSA āĻāĻ° āĻāĻāĻāĻŋ āĻĻāĻŋāĻāĻāĻŋāĻ° āĻ¸āĻžāĻ°āĻŽāĻ°ā§āĻŽ āĻĻā§āĻāĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻ¯āĻĨāĻž, āĻā§āĻĄāĻā§ āĻāĻ¸āĻāĻ¸āĻ āĻĢāĻ°ā§āĻŽā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻ
āĻāĻļā§ āĻŦāĻŋāĻāĻā§āĻ¤ āĻšāĻ¯āĻŧ āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻŋ āĻāĻ āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻĻā§āĻļ return a + b
, āĻāĻ¸āĻ˛ā§, āĻĻā§āĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°ā§: āĻĻā§āĻāĻŋ āĻ¸āĻāĻā§āĻ¯āĻž āĻ¯ā§āĻ āĻāĻ°āĻž āĻāĻŦāĻ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻžāĨ¤
āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻāĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻŽā§āĻ˛āĻŋāĻ āĻŦā§āĻ˛āĻ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨; āĻāĻ āĻā§āĻĄā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻ āĻāĻā§ - āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻŦā§āĻ˛āĻāĨ¤ āĻāĻŽāĻ°āĻž āĻ¨ā§āĻā§ āĻŦā§āĻ˛āĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻāĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤
Go SSA āĻā§āĻĄ āĻ¸āĻšāĻā§āĻ LLVM IR āĻ¤ā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ:
define i64 @myAdd(i64 %a, i64 %b) {
entry:
%0 = add i64 %a, %b
ret i64 %0
}
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻž āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¤āĻž āĻšāĻ˛ āĻ¯ā§ āĻ¯āĻĻāĻŋāĻ āĻāĻāĻžāĻ¨ā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻŋāĻ¨āĻā§āĻ¯āĻžāĻāĻāĻŋāĻ āĻ¸ā§āĻā§āĻ°āĻžāĻāĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻ āĻ¨ āĻŽā§āĻ˛āĻ¤ āĻ
āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤āĨ¤ LLVM IR āĻā§āĻĄāĻāĻŋ Go SSA āĻā§āĻĄā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻāĻā§ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§, C āĻāĻ° āĻŽāĻ¤ā§āĨ¤ āĻāĻāĻžāĻ¨ā§, āĻĢāĻžāĻāĻļāĻ¨ āĻā§āĻˇāĻŖāĻžāĻ¯āĻŧ, āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻāĻŋ āĻ¯ā§ āĻĄā§āĻāĻž āĻāĻžāĻāĻĒāĻāĻŋ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻ¯āĻŧ āĻ¤āĻžāĻ° āĻāĻāĻāĻŋ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻĨāĻžāĻā§, āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§āĻ° āĻ¨āĻžāĻŽā§āĻ° āĻāĻā§ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§āĻ° āĻ§āĻ°āĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, IR āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ āĻ¸āĻšāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§ āĻ¸āĻ¤ā§āĻ¤ā§āĻŦāĻžāĻ° āĻ¨āĻžāĻŽ āĻĒā§āĻ°āĻ¤ā§āĻā§āĻ° āĻāĻā§ āĻĨāĻžāĻā§ @
, āĻāĻŦāĻ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻ¨āĻžāĻŽā§āĻ° āĻāĻā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤ā§āĻ āĻāĻā§ %
(āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§ āĻ¸āĻ¤ā§āĻ¤āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāĻŋāĻ¤ āĻšāĻ¯āĻŧ)āĨ¤
āĻāĻ āĻā§āĻĄ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻāĻāĻŋ āĻāĻŋāĻ¨āĻŋāĻ¸ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻ¨ āĻ¯ā§ Go āĻāĻ° āĻāĻžāĻāĻĒ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ int
, āĻ¯āĻž āĻāĻāĻāĻŋ 32-āĻŦāĻŋāĻ āĻŦāĻž 64-āĻŦāĻŋāĻ āĻŽāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻāĻŦāĻ āĻ¸āĻāĻāĻ˛āĻ¨ā§āĻ° āĻ˛āĻā§āĻˇā§āĻ¯ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§, āĻāĻ˛āĻāĻ˛āĻāĻŋāĻāĻŽ āĻ¯āĻāĻ¨ āĻāĻāĻāĻ° āĻā§āĻĄ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ āĻ¤āĻāĻ¨ āĻā§āĻšā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤ LLVM IR āĻā§āĻĄāĻāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽ āĻ¸ā§āĻŦāĻžāĻ§ā§āĻ¨ āĻ¨āĻ¯āĻŧ āĻāĻŽāĻ¨ āĻ
āĻ¨ā§āĻ āĻāĻžāĻ°āĻŖā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻŋ āĻāĻāĻāĻŋāĨ¤ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻā§āĻĄ, āĻāĻāĻāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¤ā§āĻ°āĻŋ, āĻ
āĻ¨ā§āĻ¯ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻšāĻāĻāĻžāĻŦā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻāĻŦāĻ āĻ¸āĻāĻāĻ˛āĻ¨ āĻāĻ°āĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻž (āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻšāĻ¨)
āĻāĻ°ā§āĻāĻāĻŋ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ˛āĻā§āĻˇā§āĻ¯āĻ¨ā§āĻ¯āĻŧ āĻ¯ā§ āĻāĻžāĻāĻĒ i64
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŋāĻ¤ āĻĒā§āĻ°ā§āĻŖāĻ¸āĻāĻā§āĻ¯āĻž āĻ¨āĻ¯āĻŧ: āĻ¸āĻāĻā§āĻ¯āĻžāĻ° āĻāĻŋāĻšā§āĻ¨ā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻāĻŋ āĻ¨āĻŋāĻ°āĻĒā§āĻā§āĻˇāĨ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§, āĻāĻāĻŋ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŋāĻ¤ āĻāĻŦāĻ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŦāĻŋāĻšā§āĻ¨ āĻāĻāĻ¯āĻŧ āĻ¸āĻāĻā§āĻ¯āĻžāĻ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¸āĻāĻ¯ā§āĻāĻ¨ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻāĻŋ āĻā§āĻ¨ āĻŦā§āĻ¯āĻžāĻĒāĻžāĻ° āĻ¨āĻ¯āĻŧ, āĻ¤āĻžāĻ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŋāĻ¤ āĻŦāĻž āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŦāĻŋāĻšā§āĻ¨ āĻ¸āĻāĻā§āĻ¯āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻā§āĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻ¨ā§āĻāĨ¤ āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻ¯ā§ C āĻāĻžāĻˇāĻžāĻ¯āĻŧ, āĻāĻāĻāĻŋ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŋāĻ¤ āĻĒā§āĻ°ā§āĻŖāĻ¸āĻāĻā§āĻ¯āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛āĻā§ āĻāĻĒāĻā§ āĻĒāĻĄāĻŧāĻž āĻ
āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻāĻāĻ°āĻŖā§āĻ° āĻĻāĻŋāĻā§ āĻ¨āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻ¯āĻŧ, āĻ¤āĻžāĻ āĻā§āĻ˛ā§āĻ¯āĻžāĻ āĻĢā§āĻ°āĻ¨ā§āĻāĻāĻ¨ā§āĻĄ āĻ
āĻĒāĻžāĻ°ā§āĻļāĻ¨ā§ āĻāĻāĻāĻŋ āĻĒāĻ¤āĻžāĻāĻž āĻ¯ā§āĻā§āĻ¤ āĻāĻ°ā§ nsw
(āĻā§āĻ¨ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŋāĻ¤ āĻŽā§āĻĄāĻŧāĻ), āĻ¯āĻž LLVM āĻā§ āĻŦāĻ˛ā§ āĻ¯ā§ āĻāĻāĻŋ āĻ
āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯ā§ āĻ¸āĻāĻ¯ā§āĻāĻ¨ āĻāĻāĻ¨āĻ āĻāĻāĻžāĻ°āĻĢā§āĻ˛ā§ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻāĻāĻŋ āĻāĻŋāĻā§ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĻā§āĻāĻŋ āĻŽāĻžāĻ¨ āĻ¯ā§āĻ āĻāĻ°āĻž 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
āĻāĻ āĻŦā§āĻ˛āĻ āĻĨā§āĻā§ āĻāĻ āĻ¸āĻŦ āĻŦā§āĻļ āĻ°āĻšāĻ¸ā§āĻ¯āĻŽāĻ¯āĻŧ āĻŽāĻ¨ā§ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¯āĻž SSA āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻŽāĻžāĻ¨ā§āĻˇā§āĻ° āĻĻā§āĻˇā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§, āĻāĻ āĻ¸āĻŦ āĻā§āĻĄ āĻŦā§āĻāĻž āĻāĻ āĻŋāĻ¨ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻŽāĻžāĻ¨ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻŦāĻžāĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¤āĻž āĻ
āĻ¨ā§āĻ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨āĻā§ āĻ
āĻ¨ā§āĻ āĻ¸āĻšāĻ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§āĨ¤
āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻ¯ā§ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ¨āĻŋāĻā§āĻ° āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻ˛ā§āĻā§āĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻ āĻ§āĻ°āĻŖā§āĻ° āĻāĻŋāĻ¨āĻŋāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽā§āĻāĻžāĻŦāĻŋāĻ˛āĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¨āĻžāĨ¤ āĻāĻŽāĻ¨āĻāĻŋ āĻāĻ¨āĻāĻ¨ āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻ¨āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ āĻ¨āĻž phi
, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ alloca
(āĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻŽāĻ¤ā§)āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°, āĻāĻāĻāĻŋ LLVM āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨ āĻĒāĻžāĻ¸ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ alloca
āĻāĻ¸āĻāĻ¸āĻ āĻĢāĻ°ā§āĻŽā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤āĨ¤ TinyGo, āĻ¯āĻžāĻāĻšā§āĻ, Go SSA āĻĨā§āĻā§ āĻāĻ¨āĻĒā§āĻ āĻā§āĻ°āĻšāĻŖ āĻāĻ°ā§, āĻ¯āĻž, āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻŽāĻ¤, āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ SSA āĻĢāĻ°ā§āĻŽā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§āĨ¤
āĻŦāĻŋāĻŦā§āĻāĻ¨āĻžāĻ§ā§āĻ¨ āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§ āĻā§āĻĄā§āĻ° āĻāĻŖā§āĻĄāĻāĻŋāĻ° āĻāĻ°ā§āĻāĻāĻŋ āĻāĻĻā§āĻāĻžāĻŦāĻ¨ āĻšāĻ˛ āĻ¯ā§ āĻ¸ā§āĻāĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸ā§āĻ˛āĻžāĻāĻ¸ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻ āĻŋāĻāĻžāĻ¨āĻž āĻāĻŖāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻāĻāĻāĻŋ āĻ
āĻĒāĻžāĻ°ā§āĻļāĻ¨ āĻāĻŦāĻ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻžāĻ°āĻā§ āĻĄāĻŋāĻ°ā§āĻĢāĻžāĻ°ā§āĻ¨ā§āĻ¸ āĻāĻ°āĻžāĻ° āĻāĻāĻāĻŋ āĻ
āĻĒāĻžāĻ°ā§āĻļāĻ¨ āĻāĻāĻžāĻ°ā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ IR āĻā§āĻĄā§ āĻ§ā§āĻ°ā§āĻŦāĻā§āĻ° āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¯ā§āĻ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ - 1:int
) āĻĢāĻžāĻāĻļāĻ¨ āĻ¸āĻš āĻāĻĻāĻžāĻšāĻ°āĻŖā§ myAdd
āĻāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻŋ. āĻāĻāĻ¨ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋ āĻā§āĻāĻā§ āĻĒā§āĻ¯āĻŧā§āĻāĻŋ, āĻāĻ¸ā§āĻ¨ LLVM IR āĻĢāĻ°ā§āĻŽā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ˛ā§ āĻāĻ āĻā§āĻĄāĻāĻŋ āĻā§ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻāĻāĻŦāĻžāĻ° āĻĻā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ:
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
āĻŽāĻžāĻ¨ āĻāĻŦāĻ āĻ˛ā§āĻŦā§āĻ˛ āĻ
āĻĻāĻ˛āĻŦāĻĻāĻ˛ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻāĻžāĻ¨ā§ āĻāĻŋāĻā§ āĻāĻā§ āĻ¯āĻž āĻŦāĻŋāĻļā§āĻˇ āĻŽāĻ¨ā§āĻ¯ā§āĻ āĻĻāĻŋāĻ¤ā§ āĻŽā§āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨āĨ¤
āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻŋāĻ¨ā§āĻ¨ āĻĢāĻžāĻāĻļāĻ¨ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ LLVM āĻ¸ā§āĻ˛āĻžāĻāĻ¸ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ āĻ¨āĻž, āĻāĻŦāĻ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻāĻŋ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§, TinyGo āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻ¯āĻž āĻāĻ āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§ āĻā§āĻĄ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻā§, āĻāĻ āĻĄā§āĻāĻž āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻžāĻā§ āĻ
āĻāĻļā§ āĻŦāĻŋāĻāĻā§āĻ¤ āĻāĻ°ā§āĻā§āĨ¤ āĻāĻāĻŋ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻ¸ā§āĻ˛āĻžāĻāĻ¸ āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ (ptr
, len
и cap
) āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§ (struct) āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻĒā§āĻĨāĻ āĻ¸āĻ¤ā§āĻ¤āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¤āĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻŋāĻā§ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧāĨ¤ āĻ˛āĻā§āĻˇā§āĻ¯ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽā§āĻ° āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻ˛āĻŋāĻ āĻāĻ¨āĻā§āĻ¨āĻļāĻ¨ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ°āĻ°āĻž āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻĒāĻžāĻ¯āĻŧā§ āĻ¸ā§āĻ˛āĻžāĻāĻ¸āĻā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻ āĻā§āĻĄā§āĻ° āĻāĻ°ā§āĻāĻāĻŋ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻšāĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° 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
, āĻ¯āĻž āĻāĻāĻ āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§āĨ¤
āĻĢāĻ˛āĻžāĻĢāĻ˛
āĻāĻŽāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ āĻāĻ°āĻŋ āĻ¯ā§ āĻāĻ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻāĻŋāĻ¤ā§ āĻāĻŽāĻŋ LLVM IR-āĻāĻ° āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻžāĻ° āĻāĻ°ā§āĻāĻŋāĨ¤ āĻ
āĻŦāĻļā§āĻ¯āĻ, āĻāĻāĻžāĻ¨ā§ āĻāĻ°āĻ āĻ
āĻ¨ā§āĻ āĻāĻŋāĻā§ āĻāĻā§āĨ¤ āĻŦāĻŋāĻļā§āĻˇ āĻāĻ°ā§, āĻā§āĻĄā§āĻ° āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦā§ āĻ
āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻā§āĻāĻž āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯āĻž āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ āĻĒāĻžāĻ¸āĻā§āĻ˛āĻŋāĻā§ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ°ā§āĻ° āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻā§āĻĄā§āĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋāĻā§ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻžāĻ¯āĻŧ āĻ¨ā§āĻāĻ¯āĻŧāĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ āĻ¯āĻž āĻ
āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ IR āĻ¤ā§ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒāĻ¤āĻžāĻāĻž inbounds
GEP āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§, āĻŦāĻž āĻĒāĻ¤āĻžāĻāĻž nsw
и nuw
, āĻ¯āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§āĻ¤ā§ āĻ¯ā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ add
. āĻāĻāĻ āĻā§āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻžāĻ¯āĻŧ private
, āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻžāĻ°āĻā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§ āĻ¯ā§ āĻāĻāĻŋ āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻāĻāĻ˛āĻ¨ āĻāĻāĻ¨āĻŋāĻā§āĻ° āĻŦāĻžāĻāĻ°ā§ āĻĨā§āĻā§ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻž āĻšāĻŦā§ āĻ¨āĻžāĨ¤ āĻāĻāĻŋ āĻ
āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻŦāĻžāĻĻ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻŽāĻ¤ā§ āĻ
āĻ¨ā§āĻ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻāĻ¨ā§āĻ¤āĻāĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ¤ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧāĨ¤
āĻāĻĒāĻ¨āĻŋ LLVM āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻĒāĻĄāĻŧāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻĒāĻžāĻ āĻāĻāĻŖ! āĻāĻĒāĻ¨āĻŋ LLVM āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻā§āĻ¨?
āĻāĻ¤ā§āĻ¸: www.habr.com