āĻāĻ•āϟāĻŋ Go āĻĻ⧃āĻˇā§āϟāĻŋāϕ⧋āĻŖ āĻĨ⧇āϕ⧇ LLVM

āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āĻĄā§‡āϭ⧇āϞāĻĒ āĻ•āϰāĻž āϖ⧁āĻŦāχ āĻ•āĻ āĻŋāύ āĻ•āĻžāϜāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁, āϏ⧌āĻ­āĻžāĻ—ā§āϝāĻŦāĻļāϤ, LLVM-āĻāϰ āĻŽāϤ⧋ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϗ⧁āϞāĻŋāϰ āĻŦāĻŋāĻ•āĻžāĻļ⧇āϰ āϏāĻžāĻĨ⧇, āĻāχ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύāϟāĻŋ āĻŦā§āϝāĻžāĻĒāĻ•āĻ­āĻžāĻŦ⧇ āϏāϰāϞ⧀āĻ•ā§ƒāϤ āĻšāϝāĻŧ⧇āϛ⧇, āϝāĻž āĻāĻŽāύāĻ•āĻŋ āĻāĻ•āϜāύ āĻāĻ•āĻ• āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻžāϰāϕ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ­āĻžāώāĻž āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ āϝāĻž C-āĻāϰ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ⧇āϰ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋāĨ¤ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϟāĻŋ āĻŦāĻŋāĻĒ⧁āϞ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āϕ⧋āĻĄ āĻĻā§āĻŦāĻžāϰāĻž āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāϤ āĻšāϝāĻŧ, āϏāĻžāĻŽāĻžāĻ¨ā§āϝ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻœā§āϜāĻŋāϤāĨ¤ āĻāχ āĻ¤ā§āϰ⧁āϟāĻŋāϟāĻŋ āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āωāĻĒāĻžāĻĻāĻžāύāϟāĻŋāϰ āϞ⧇āĻ–āĻ•, āϝāĻžāϰ āĻ…āύ⧁āĻŦāĻžāĻĻ āφāĻŽāϰāĻž āφāϜ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻ›āĻŋ, Go-āϤ⧇ āϞ⧇āĻ–āĻž āϕ⧋āĻĄā§‡āϰ āωāĻĻāĻžāĻšāϰāĻŖāϗ⧁āϞāĻŋ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāϤ⧇ āϚāϞ⧇āϛ⧇āύ āĻāĻŦāĻ‚ āĻĻ⧇āĻ–āĻžāĻŦ⧇āύ āϝ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏ⧇āϗ⧁āϞāĻŋ āĻĒā§āϰāĻĨāĻŽ āĻ…āύ⧁āĻŦāĻžāĻĻ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āĻāϏāĻāϏāĻ āϝāĻžāύ, āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāϞāĻāϞāĻ­āĻŋāĻāĻŽ āφāχāφāϰ-āĻ āϟāĻŋāύāĻŋāĻ—ā§‹. Go SSA āĻāĻŦāĻ‚ LLVM IR āϕ⧋āĻĄ āϏāĻžāĻŽāĻžāĻ¨ā§āϝ āĻāĻĄāĻŋāϟ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āϝāĻžāϤ⧇ āĻ•āϰ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻžāϗ⧁āϞāĻŋāϕ⧇ āφāϰāĻ“ āĻŦā§‹āϧāĻ—āĻŽā§āϝ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ–āĻžāύ⧇ āĻĒā§āϰāĻĻāĻ¤ā§āϤ āĻŦā§āϝāĻžāĻ–ā§āϝāĻžāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ• āύāϝāĻŧ āĻāĻŽāύ āϜāĻŋāύāĻŋāϏāϗ⧁āϞāĻŋāϕ⧇ āϏāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āϛ⧇⧎

āĻāĻ•āϟāĻŋ Go āĻĻ⧃āĻˇā§āϟāĻŋāϕ⧋āĻŖ āĻĨ⧇āϕ⧇ LLVM

āĻĒā§āϰāĻĨāĻŽ āωāĻĻāĻžāĻšāϰāĻŖ

āφāĻŽāĻŋ āĻāĻ–āĻžāύ⧇ āĻĒā§āϰāĻĨāĻŽ āϝ⧇ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻĻ⧇āĻ–āϤ⧇ āϝāĻžāĻšā§āĻ›āĻŋ āϤāĻž āĻšāϞ āϏāĻ‚āĻ–ā§āϝāĻž āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž:

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 āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ āĻĒāĻžāϏ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ āĻŦāϞāĻž āĻšāϝāĻŧ mem2reg, āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ 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-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āφāĻĒāύāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāĻŦ⧇āύāĨ¤ āĻāĻ–āĻžāύ⧇ āύ⧇āϤ⧃āĻ¤ā§āĻŦ, āϝāĻž āĻāĻ•āϟāĻŋ āϖ⧁āĻŦ āϏāĻšāϜ āĻ­āĻžāώāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āĻŦāĻŋāĻ•āĻžāĻļ⧇āϰ āĻĻāĻŋāϕ⧇ āύāϜāϰ āĻĻ⧇āϝāĻŧāĨ¤ āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϤāĻĨā§āϝ⧇āϰ āĻāχ āĻĻ⧁āϟāĻŋ āĻ‰ā§ŽāϏāχ āφāĻĒāύāĻžāϰ āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āĻŦ⧇āĨ¤

āĻĒā§āϰāĻŋāϝāĻŧ āĻĒāĻžāĻ āĻ•āĻ—āĻŖ! āφāĻĒāύāĻŋ LLVM āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϛ⧇āύ?

āĻāĻ•āϟāĻŋ Go āĻĻ⧃āĻˇā§āϟāĻŋāϕ⧋āĻŖ āĻĨ⧇āϕ⧇ LLVM

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster