เจ‡เฉฑเจ• เจ—เฉ‹ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจคเฉ‹เจ‚ LLVM

เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจฆเจพ เจตเจฟเจ•เจพเจธ เจ•เจฐเจจเจพ เจฌเจนเฉเจค เจ”เจ–เจพ เจ•เฉฐเจฎ เจนเฉˆเฅค เจชเจฐ, เจ–เฉเจธเจผเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, LLVM เจตเจฐเจ—เฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจฆเฉ‡ เจจเจพเจฒ, เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจฆเฉ‡ เจนเฉฑเจฒ เจจเฉ‚เฉฐ เจฌเจนเฉเจค เจธเจฐเจฒ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฐ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจญเจพเจธเจผเจพ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจœเฉ‹ C เจฆเฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฆเฉ‡ เจจเฉ‡เฉœเฉ‡ เจนเฉˆเฅค LLVM เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจ‡เจธ เจคเฉฑเจฅ เจฆเฉเจ†เจฐเจพ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจนเฉˆ เจ•เจฟ เจ‡เจน เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจ•เฉ‹เจก เจฆเฉ€ เจ‡เฉฑเจ• เจตเฉฑเจกเฉ€ เจฎเจพเจคเจฐเจพ เจฆเฉเจ†เจฐเจพ เจฆเจฐเจธเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจจเจพเจฒ เจฒเฉˆเจธ เจนเฉˆเฅค เจ‡เจธ เจ•เจฎเฉ€ เจจเฉ‚เฉฐ เจ เฉ€เจ• เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจจ เจฒเจˆ, เจธเจฎเฉฑเจ—เจฐเฉ€ เจฆเจพ เจฒเฉ‡เจ–เจ•, เจœเจฟเจธเจฆเจพ เจ…เจจเฉเจตเจพเจฆ เจ…เจธเฉ€เจ‚ เจ…เฉฑเจœ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚, เจ—เฉ‹ เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‡ เจ•เฉ‹เจก เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเจฟเจ–เจพเจ‰เจฃ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจน เจฆเจฟเจ–เจพเจ‰เจฃ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ เจ•เจฟ เจ‰เจนเจจเจพเจ‚ เจฆเจพ เจชเจนเจฟเจฒเฉ€ เจตเจพเจฐ เจ…เจจเฉเจตเจพเจฆ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค เจœเจพเจ“ SSA, เจ…เจคเฉ‡ เจซเจฟเจฐ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ LLVM IR เจตเจฟเฉฑเจš เจŸเจฟเฉฐเจจเฉ€เจ—เฉ‹. Go SSA เจ…เจคเฉ‡ LLVM IR เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจจเฉ‚เฉฐ เจนเจŸเจพเจ‰เจฃ เจฒเจˆ เจฅเฉ‹เฉœเฉเจนเจพ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจฅเฉ‡ เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจธเจชเฉฑเจธเจผเจŸเฉ€เจ•เจฐเจจเจพเจ‚ เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจจเจนเฉ€เจ‚ เจนเจจ, เจคเจพเจ‚ เจœเฉ‹ เจธเจชเฉฑเจธเจผเจŸเฉ€เจ•เจฐเจจเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจธเจฎเจเจฃ เจฏเฉ‹เจ— เจฌเจฃเจพเจ‡เจ† เจœเจพ เจธเจ•เฉ‡เฅค

เจ‡เฉฑเจ• เจ—เฉ‹ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจคเฉ‹เจ‚ 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 เจฆเฉ‡ เจ‡เฉฑเจ• เจชเจนเจฟเจฒเฉ‚ เจฆเฉ‡ เจธเจพเจฐ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ…เจฐเจฅเจพเจค, เจœเจฆเฉ‹เจ‚ เจ•เฉ‹เจก เจจเฉ‚เฉฐ 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 เจชเจพเจฐเจธเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจ—เจฒเฉ‹เจฌเจฒ เจ‡เจ•เจพเจˆเจ†เจ‚ เจฆเฉ‡ เจจเจพเจฎ เจšเจฟเฉฐเจจเฉเจน เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเจจ @, เจ…เจคเฉ‡ เจธเจฅเจพเจจเจ• เจจเจพเจตเจพเจ‚ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ‡เฉฑเจ• เจšเจฟเฉฐเจจเฉเจน เจนเฉˆ % (เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ—เจฒเฉ‹เจฌเจฒ เจ‡เจ•เจพเจˆ เจตเฉ€ เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ)เฅค

เจ‡เจธ เจ•เฉ‹เจก เจฌเจพเจฐเฉ‡ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจตเจพเจฒเฉ€ เจ—เฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ—เฉ‹ เจฆเฉ€ เจ•เจฟเจธเจฎ เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพ เจฆเจพ เจซเฉˆเจธเจฒเจพ int, เจœเจฟเจธ เจจเฉ‚เฉฐ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจ…เจคเฉ‡ เจ•เฉฐเจชเจพเจˆเจฒเฉ‡เจธเจผเจจ เจฆเฉ‡ เจŸเฉ€เจšเฉ‡ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ 32-เจฌเจฟเฉฑเจŸ เจœเจพเจ‚ 64-เจฌเจฟเฉฑเจŸ เจฎเฉเฉฑเจฒ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจฆเจฐเจธเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฆเฉ‹เจ‚ LLVM IR เจ•เฉ‹เจก เจคเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจธเจตเฉ€เจ•เจพเจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจ•เจพเจฐเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจนเฉˆ เจ•เจฟ LLVM IR เจ•เฉ‹เจก เจจเจนเฉ€เจ‚ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฒเฉ‹เจ• เจธเฉ‹เจšเจฆเฉ‡ เจนเจจ, เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจธเฉเจคเฉฐเจคเจฐ เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เฉ‹เจก, เจ‡เฉฑเจ• เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฒเจˆ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ, เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจฆเฉ‚เจœเฉ‡ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฒเจˆ เจฒเจฟเจ† เจœเจพเจ‚ เจ•เฉฐเจชเจพเจ‡เจฒ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ (เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจขเฉเจ•เจตเฉ‡เจ‚ เจจเจนเฉ€เจ‚ เจนเฉ‹เฅค เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจฆเฉ‡เจ–เจญเจพเจฒ เจฆเฉ‡ เจจเจพเจฒ).

เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจ‡เจ• เจนเฉ‹เจฐ เจฆเจฟเจฒเจšเจธเจช เจจเฉเจ•เจคเจพ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ•เจฟเจธเจฎ i64 เจ‡เฉฑเจ• เจนเจธเจคเจพเจ–เจฐเจฟเจค เจชเฉ‚เจฐเจจ เจ…เฉฐเจ• เจจเจนเฉ€เจ‚ เจนเฉˆ: เจ‡เจน เจธเฉฐเจ–เจฟเจ† เจฆเฉ‡ เจšเจฟเฉฐเจจเฉเจน เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจฃ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš เจจเจฟเจฐเจชเฉฑเจ– เจนเฉˆเฅค เจนเจฆเจพเจ‡เจคเจพเจ‚ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจฟเจ†เจ‚, เจ‡เจน เจฆเจธเจคเจ–เจค เจ•เฉ€เจคเฉ‡ เจ…เจคเฉ‡ เจนเจธเจคเจพเจ–เจฐเจฟเจค เจฆเฉ‹เจตเฉ‡เจ‚ เจจเฉฐเจฌเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจœเฉ‹เฉœ เจ•เจพเจฐเจตเจพเจˆ เจฆเฉ€ เจจเฉเจฎเจพเจ‡เฉฐเจฆเจ—เฉ€ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ‡เจธ เจจเจพเจฒ เจ•เฉ‹เจˆ เจซเจผเจฐเจ• เจจเจนเฉ€เจ‚ เจชเฉˆเจ‚เจฆเจพ, เจ‡เจธ เจฒเจˆ เจนเจธเจคเจพเจ–เจฐเจฟเจค เจœเจพเจ‚ เจนเจธเจคเจพเจ–เจฐเจฟเจค เจธเฉฐเจ–เจฟเจ†เจตเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ•เฉ‹เจˆ เจ…เฉฐเจคเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‡เฉฑเจฅเฉ‡ เจฎเฉˆเจ‚ เจ‡เจน เจจเฉ‹เจŸ เจ•เจฐเจจเจพ เจšเจพเจนเจพเจ‚เจ—เจพ เจ•เจฟ C เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš, เจ‡เฉฑเจ• เจธเจพเจˆเจจ เจ•เฉ€เจคเฉ‡ เจชเฉ‚เจฐเจจ เจ…เฉฐเจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจจเฉ‚เฉฐ เจ“เจตเจฐเจซเจฒเฉ‹ เจ•เจฐเจจ เจจเจพเจฒ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจตเจฟเจตเจนเจพเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจ•เจฒเฉˆเจ‚เจ— เจซเจฐเฉฐเจŸเจเจ‚เจก เจ“เจชเจฐเฉ‡เจธเจผเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจซเจฒเฉˆเจ— เจœเฉ‹เฉœเจฆเจพ เจนเฉˆเฅค nsw (เจ•เฉ‹เจˆ เจธเจพเจˆเจจเจก เจฐเฉˆเจช เจจเจนเฉ€เจ‚), เจœเฉ‹ LLVM เจจเฉ‚เฉฐ เจฆเฉฑเจธเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจน เจ‡เจน เจฎเฉฐเจจ เจธเจ•เจฆเจพ เจนเฉˆ เจ•เจฟ เจœเฉ‹เฉœ เจ•เจฆเฉ‡ เจตเฉ€ เจ“เจตเจฐเจซเจฒเฉ‹ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพเฅค

เจ‡เจน เจ•เฉเจ เจ…เจจเฉเจ•เฉ‚เจฒเจจ เจฒเจˆ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฆเฉ‹ เจฎเฉเฉฑเจฒ เจœเฉ‹เฉœเจจเจพ i16 เจ‡เฉฑเจ• 32-เจฌเจฟเฉฑเจŸ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ 'เจคเฉ‡ (32-เจฌเจฟเฉฑเจŸ เจฐเจœเจฟเจธเจŸเจฐเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ) เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ‡เจธเจฆเฉ‡ เจ‡เจฒเจพเจตเจพ, เจธเฉ€เจฎเจพ เจตเจฟเฉฑเจš เจฌเจฃเฉ‡ เจฐเจนเจฟเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจพเจˆเจจ เจเจ•เจธเจชเฉˆเจ‚เจธเจผเจจ เจ“เจชเจฐเฉ‡เจธเจผเจจ i16. เจ‡เจธเจฆเฉ‡ เจ•เจพเจฐเจจ, เจฎเจธเจผเฉ€เจจ เจฐเจœเจฟเจธเจŸเจฐ เจฆเฉ‡ เจ†เจ•เจพเจฐเจพเจ‚ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจชเฉ‚เจฐเจจ เจ…เฉฐเจ• เจ“เจชเจฐเฉ‡เจธเจผเจจ เจ•เจฐเจจเจพ เจ…เจ•เจธเจฐ เจตเจงเฉ‡เจฐเฉ‡ เจ•เฉเจธเจผเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค

เจ‡เจธ IR เจ•เฉ‹เจก เจจเจพเจฒ เจ…เฉฑเจ—เฉ‡ เจ•เฉ€ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจนเฉเจฃ เจธเจพเจกเฉ‡ เจฒเจˆ เจ•เฉ‹เจˆ เจ–เจพเจธ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ (เจชเจฐ เจธเจพเจกเฉ‡ เจตเจฐเจ—เฉ‡ เจธเจงเจพเจฐเจจ เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ•เฉเจ เจตเฉ€ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจจเจนเฉ€เจ‚ เจนเฉˆ) เจ…เจคเฉ‡ เจซเจฟเจฐ เจฎเจธเจผเฉ€เจจ เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจฆเฉ‚เจœเฉ€ เจ‰เจฆเจพเจนเจฐเจจ

เจ…เจ—เจฒเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡ เจ‰เจน เจฅเฉ‹เฉœเฉ€ เจนเฉ‹เจฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจ…เจฐเจฅเจพเจค, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจชเฉ‚เจฐเจจ เจ…เฉฐเจ•เจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจŸเฉเจ•เฉœเฉ‡ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆ:

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

เจ‡เฉฑเจฅเฉ‡ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ SSA เจซเจพเจฐเจฎ เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจฆเฉ€ เจจเฉเจฎเจพเจ‡เฉฐเจฆเจ—เฉ€ เจ•เจฐเจจ เจฒเจˆ เจ–เจพเจธ เจนเฉ‹เจฐ เจ‰เจธเจพเจฐเฉ€เจ†เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจธเจผเจพเจ‡เจฆ เจ‡เจธ เจ•เฉ‹เจก เจฆเฉ€ เจธเจญ เจคเฉ‹เจ‚ เจธเจชเฉฑเจธเจผเจŸ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจ‡เจน เจคเฉฑเจฅ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจฅเฉ‡ เจ•เฉ‹เจˆ เจขเจพเจ‚เจšเจพเจ—เจค เจชเฉเจฐเจตเจพเจน เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจจเจนเฉ€เจ‚ เจนเจจเฅค เจ—เจฃเจจเจพ เจฆเฉ‡ เจชเฉเจฐเจตเจพเจน เจจเฉ‚เฉฐ เจจเจฟเจฏเฉฐเจคเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ, เจ‡เฉฑเจฅเฉ‡ เจธเจฟเจฐเจซ เจธเจผเจฐเจคเฉ€เจ† เจ…เจคเฉ‡ เจฌเจฟเจจเจพเจ‚ เจธเจผเจฐเจค เจ›เจพเจฒ เจนเจจ, เจ…เจคเฉ‡, เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจ•เจฎเจพเจ‚เจก เจจเฉ‚เฉฐ เจชเฉเจฐเจตเจพเจน เจจเฉ‚เฉฐ เจจเจฟเจฏเฉฐเจคเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจ•เจฎเจพเจ‚เจก เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฎเฉฐเจจเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจ‡เฉฑเจ• เจตเจพเจชเจธเฉ€ เจ•เจฎเจพเจ‚เจกเฅค

เจตเจพเจธเจคเจต เจตเจฟเฉฑเจš, เจ‡เฉฑเจฅเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจคเฉฑเจฅ เจตเฉฑเจฒ เจงเจฟเจ†เจจ เจฆเฉ‡ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจ•เจฐเจฒเฉ€ เจฌเจฐเฉ‡เจธ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฆเฉ‡ C เจชเจฐเจฟเจตเจพเจฐ เจตเจฟเฉฑเจš) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจฌเจฒเจพเจ•เจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจจเจนเฉ€เจ‚ เจ—เจฟเจ† เจนเฉˆเฅค เจ‡เจน เจฒเฉ‡เจฌเจฒ เจฆเฉเจ†เจฐเจพ เจตเฉฐเจกเจฟเจ† เจ—เจฟเจ† เจนเฉˆ, เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฆเฉ€ เจฏเจพเจฆ เจฆเจฟเจตเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจฌเจฒเจพเจ•เจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจชเฉ‡เจธเจผ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค SSA เจตเจฟเฉฑเจš, เจฎเฉ‚เจฒ เจฌเจฒเจพเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฒเฉ‡เจฌเจฒ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจฃ เจตเจพเจฒเฉ‡ เจ…เจคเฉ‡ เจฎเฉ‚เจฒ เจฌเจฒเจพเจ• เจธเฉฐเจชเฉ‚เจฐเจจเจคเจพ เจจเจฟเจฐเจฆเฉ‡เจธเจผเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ–เจคเจฎ เจนเฉ‹เจฃ เจตเจพเจฒเฉ‡ เจ•เฉ‹เจก เจฆเฉ‡ เจ…เจจเฉเจฐเฉ‚เจช เจ•เฉเจฐเจฎ เจตเจœเฉ‹เจ‚ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ - return ะธ jump.

เจ‡เจธ เจ•เฉ‹เจก เจฆเจพ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจฆเจฟเจฒเจšเจธเจช เจตเฉ‡เจฐเจตเจพ เจจเจฟเจฐเจฆเฉ‡เจธเจผ เจฆเฉเจ†เจฐเจพ เจฆเจฐเจธเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ phi. เจจเจฟเจฐเจฆเฉ‡เจธเจผ เจ•เจพเจซเจผเฉ€ เจ…เจธเจงเจพเจฐเจจ เจนเจจ เจ…เจคเฉ‡ เจธเจฎเจเจฃ เจตเจฟเฉฑเจš เจ•เฉเจ เจธเจฎเจพเจ‚ เจฒเฉฑเจ— เจธเจ•เจฆเจพ เจนเฉˆเฅค เจฏเจพเจฆ เจฐเฉฑเจ–เฉ‹, เจ•เจฟ SSA เจธเจŸเฉˆเจŸเจฟเจ• เจธเจฟเฉฐเจ—เจฒ เจ…เจธเจพเจˆเจจเจฎเฉˆเจ‚เจŸ เจฒเจˆ เจ›เฉ‹เจŸเจพ เจนเฉˆเฅค เจ‡เจน เจ•เฉฐเจชเจพเจˆเจฒเจฐเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจตเจฐเจคเฉ‡ เจ—เจ เจ•เฉ‹เจก เจฆเฉ€ เจ‡เฉฑเจ• เจตเจฟเจšเจ•เจพเจฐเจฒเฉ€ เจจเฉเจฎเจพเจ‡เฉฐเจฆเจ—เฉ€ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจนเจฐเฉ‡เจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจจเฉ‚เฉฐ เจ•เฉ‡เจตเจฒ เจ‡เฉฑเจ• เจตเจพเจฐ เจ‡เฉฑเจ• เจฎเฉเฉฑเจฒ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจธเจพเจกเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจตเจฐเจ—เฉ‡ เจธเจงเจพเจฐเจจ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจ—เจŸ เจ•เจฐเจจ เจฒเจˆ เจฌเจนเฉเจค เจตเจงเฉ€เจ† เจนเฉˆ myAddเจ‰เฉฑเจชเจฐ เจฆเจฟเจ–เจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ, เจชเจฐ เจตเจงเฉ‡เจฐเฉ‡ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฒเจˆ เจขเฉเจ•เจตเจพเจ‚ เจจเจนเฉ€เจ‚ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เจธ เจญเจพเจ— เจตเจฟเฉฑเจš เจšเจฐเจšเจพ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจซเฉฐเจ•เจธเจผเจจ sum. เจ–เจพเจธ เจคเฉŒเจฐ 'เจคเฉ‡, เจฒเฉ‚เจช เจฆเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฆเฉŒเจฐเจพเจจ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฌเจฆเจฒเจฆเฉ‡ เจนเจจ i ะธ n.

SSA เจ‡เฉฑเจ• เจ…เจ–เฉŒเจคเฉ€ เจนเจฆเจพเจ‡เจค เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจตเจพเจฐ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฎเฉเฉฑเจฒ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ 'เจคเฉ‡ เจชเจพเจฌเฉฐเจฆเฉ€ เจจเฉ‚เฉฐ เจฌเจพเจˆเจชเจพเจธ เจ•เจฐเจฆเจพ เจนเฉˆ phi (เจ‡เจธเจฆเจพ เจจเจพเจฎ เจฏเฉ‚เจจเจพเจจเฉ€ เจตเจฐเจฃเจฎเจพเจฒเจพ เจคเฉ‹เจ‚ เจฒเจฟเจ† เจ—เจฟเจ† เจนเฉˆ)เฅค เจคเฉฑเจฅ เจ‡เจน เจนเฉˆ เจ•เจฟ เจธเฉ€ เจตเจฐเจ—เฉ€เจ†เจ‚ เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฒเจˆ เจ•เฉ‹เจก เจฆเฉ€ SSA เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉเจ เจšเจพเจฒ เจฆเจพ เจธเจนเจพเจฐเจพ เจฒเฉˆเจฃเจพ เจชเจตเฉ‡เจ—เจพเฅค เจ‡เจธ เจนเจฆเจพเจ‡เจค เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจจ เจฆเจพ เจจเจคเฉ€เจœเจพ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเจพ เจฎเฉŒเจœเฉ‚เจฆเจพ เจฎเฉเฉฑเจฒ เจนเฉˆ (i เจœ n), เจ…เจคเฉ‡ เจฎเฉ‚เจฒ เจฌเจฒเจพเจ•เจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจ‡เจธเจฆเฉ‡ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจตเจœเฉ‹เจ‚ เจตเจฐเจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เจธ เจนเจฆเจพเจ‡เจค 'เจคเฉ‡ เจ—เฉŒเจฐ เจ•เจฐเฉ‹:

t0 = phi [entry: 0:int, for.body: t6] #n

เจ‡เจธเจฆเจพ เจ…เจฐเจฅ เจ‡เจธ เจชเฉเจฐเจ•เจพเจฐ เจนเฉˆ: เจœเฉ‡เจ•เจฐ เจชเจฟเจ›เจฒเจพ เจฎเฉ‚เจฒ เจฌเจฒเจพเจ• เจ‡เฉฑเจ• เจฌเจฒเจพเจ• เจธเฉ€ entry (เจ‡เจจเจชเฉเจŸ), เจซเจฟเจฐ t0 เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจนเฉˆ 0, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจชเจฟเจ›เจฒเจพ เจฎเฉ‚เจฒ เจฌเจฒเจพเจ• เจธเฉ€ for.body, เจซเจฟเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเฉเฉฑเจฒ เจฒเฉˆเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ t6 เจ‡เจธ เจฌเจฒเจพเจ• เจคเฉ‹เจ‚. เจ‡เจน เจธเจญ เจ•เฉเจ เจ•เจพเจซเจผเฉ€ เจฐเจนเฉฑเจธเจฎเจˆ เจฒเฉฑเจ— เจธเจ•เจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เจน เจตเจฟเจงเฉ€ เจเจธเจเจธเจ เจจเฉ‚เฉฐ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจฎเจจเฉเฉฑเจ–เฉ€ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจคเฉ‹เจ‚, เจ‡เจน เจธเจญ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจธเจฎเจเจฃเจพ เจฎเฉเจธเจผเจ•เจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เจน เจคเฉฑเจฅ เจ•เจฟ เจนเจฐเฉ‡เจ• เจฎเฉเฉฑเจฒ เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจตเจพเจฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจจ เจจเฉ‚เฉฐ เจฌเจนเฉเจค เจธเฉŒเจ–เจพ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค

เจจเฉ‹เจŸ เจ•เจฐเฉ‹ เจ•เจฟ เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเจพ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจฒเจฟเจ–เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจธ เจ•เจฟเจธเจฎ เจฆเฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเจพเจฒ เจจเจœเจฟเฉฑเจ เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจชเจตเฉ‡เจ—เฉ€เฅค เจ‡เฉฑเจฅเฉ‹เจ‚ เจคเฉฑเจ• เจ•เจฟ เจ•เจฒเฉˆเจ‚เจ— เจตเฉ€ เจ‡เจน เจธเจพเจฐเฉ€เจ†เจ‚ เจนเจฆเจพเจ‡เจคเจพเจ‚ เจคเจฟเจ†เจฐ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ phi, เจ‡เจน เจ‡เฉฑเจ• เจตเจฟเจงเฉ€ เจตเจฐเจคเจฆเจพ เจนเฉˆ alloca (เจ‡เจน เจ†เจฎ เจฒเฉ‹เจ•เจฒ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจตเจฐเจ—เจพ เจนเฉˆ)เฅค เจซเจฟเจฐ, เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• LLVM เจ“เจชเจŸเฉ€เจฎเจพเจˆเจœเฉ‡เจธเจผเจจ เจชเจพเจธ เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ mem2reg, เจจเจฟเจฐเจฆเฉ‡เจธเจผ alloca SSA เจซเจพเจฐเจฎ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฟเจ† เจ—เจฟเจ†เฅค 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) เจ‡เฉฑเจ• เจขเจพเจ‚เจšเฉ‡ (เจขเจพเจ‚เจšเจพ) เจฆเฉ‡ เจคเฉŒเจฐ เจคเฉ‡, เจชเจฐ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจคเจฟเฉฐเจจ เจตเฉฑเจ–เจฐเฉ€เจ†เจ‚ เจ‡เจ•เจพเจˆเจ†เจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ‰เจฃเจพ เจ•เฉเจ เจ…เจจเฉเจ•เฉ‚เจฒเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจนเฉ‹เจฐ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจŸเจพเจฐเจ—เฉ‡เจŸ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฆเฉ‡ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจ•เจพเจฒเจฟเฉฐเจ— เจ•เจจเจตเฉˆเจจเจธเจผเจจเจพเจ‚ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจธเจฒเจพเจˆเจธ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจจเจพเจฒ เจชเฉ‡เจธเจผ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

เจ‡เจธ เจ•เฉ‹เจก เจฆเฉ€ เจ‡เจ• เจนเฉ‹เจฐ เจฆเจฟเจฒเจšเจธเจช เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจนเจฆเจพเจ‡เจค เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจนเฉˆ 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 เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเฉ‹?

เจ‡เฉฑเจ• เจ—เฉ‹ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจคเฉ‹เจ‚ LLVM

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹