เบเบฒเบเบเบฑเบเบเบฐเบเบฒ compiler เปเบเบฑเบเบงเบฝเบเบเบตเปเบเบฒเบเบซเบผเบฒเบ. เปเบเป, เปเบเบเบเบต, เบเปเบงเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบเบเบเบฒเบเปเบเบฑเปเบ LLVM, เบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบกเปเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบ, เปเบเบดเปเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบฑเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบฝเบงเบชเบฒเบกเบฒเบเบชเปเบฒเบเบเบฒเบชเบฒเปเบซเบกเปเบเบตเปเปเบเปเบเบดเบเบเบฑเบ C. เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ LLVM เปเบกเปเบเบชเบฑเบเบชเบปเบเปเบเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบตเป. เบฅเบฐโเบเบปเบโเปเบกเปเบโเบเบปเบงโเปเบเบโเปเบเบโเบเปเบฒโเบเบงเบโเบเบฐโเบซเบเบฒเบโเปเบซเบเปโเบเบญเบโเบฅเบฐโเบซเบฑเบโ, เปเบเบโเบกเบตโเปเบญโเบเบฐโเบชเบฒเบโเบเบฝเบโเปเบฅเบฑเบโเบเปเบญเบโ. เปเบเบทเปเบญเบเบฐเบเบฒเบเบฒเบกเปเบเปเปเบเบเปเปเบเบปเบเบเปเบญเบเบเบตเป, เบเบนเปเบเบฝเบเบเบญเบเปเบญเบเบฐเบชเบฒเบ, เบเบฒเบเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเปเบเบตเบเปเบเปเปเบเบกเบทเปเบเบตเป, เบเบฐเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเบเบฝเบเปเบ 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 เปเบฅเปเบง. เบเบท, เปเบกเบทเปเบญเบเปเบฝเบเบฅเบฐเบซเบฑเบเปเบเบปเปเบฒเปเบเปเบเปเบเบเบเบญเบก SSA, เปเบเปเบฅเบฐเบเบฒเบเบชเบฐเปเบเบเบญเบญเบเปเบกเปเบเปเบเปเบเบญเบญเบเปเบเบฑเบเบชเปเบงเบเบเบฐเบเบปเบกเบชเปเบงเบเปเบซเบเปเบเบตเปเบกเบฑเบเบเบทเบเบเบฐเบเบญเบ. เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเปเบฒเบชเบฑเปเบ return a + b
, เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เปเบเบฑเบเบเบปเบงเปเบเบเบชเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ: เบเบฒเบเปเบเบตเปเบกเบชเบญเบเบเบปเบงเปเบฅเบเปเบฅเบฐเบเบฒเบเบเบฑเบเบเบทเบเบเบปเบเปเบเปเบฎเบฑเบ.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เปเบเบเบตเปเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบเบฑเบเบเบทเปเบเบเบฒเบเบเบญเบเปเบเบเบเบฒเบ; เปเบเบฅเบฐเบซเบฑเบเบเบตเปเบกเบตเบเบฝเบเปเบเปเบซเบเบถเปเบเบเบฑเบ - เบเบฑเบเปเบเบปเปเบฒ. เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบงเบปเปเบฒเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบเบฅเบฑเบญเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเป.
เบฅเบฐเบซเบฑเบ Go SSA เบเปเบฝเบเปเบเบฑเบ LLVM IR เปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบ:
define i64 @myAdd(i64 %a, i64 %b) {
entry:
%0 = add i64 %a, %b
ret i64 %0
}
เบชเบดเปเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบฑเบเปเบเบเปเบซเบฑเบเปเบกเปเบเบงเปเบฒเปเบเบดเบเปเบกเปเบเบงเปเบฒเปเบเบเบชเปเบฒเบ syntactic เบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบเบทเบเบเปเบฒเปเบเปเบขเบนเปเบเบตเปเบเบตเป, เปเบเบเบชเปเบฒเบเบเบญเบเบซเบเปเบฒเบเบตเปเปเบกเปเบเบเบทเปเบเบเบฒเบเบเปเปเบเปเบฝเบเปเบเบ. เบฅเบฐเบซเบฑเบ LLVM IR เปเบกเปเบเปเบฅเบฑเบเบเปเบญเบเบเบตเปเปเบเบฑเปเบกเปเบเบเบเบงเปเบฒเบฅเบฐเบซเบฑเบ Go SSA, เบเปเบฒเบเบเบทเบเบฑเบ C. เบเบตเปเบเบตเป, เปเบเบเบฒเบเบเบฐเบเบฒเบเบเบฑเบเบเบฑเบ, เบเปเบฒเบญเบดเบเบกเบตเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเปเบฝเบงเบเบฑเบเบเบฐเปเบเบเบเปเปเบกเบนเบเบเบตเปเบกเบฑเบเบเบฑเบเบเบทเบเบกเบฒ, เบเบฐเปเบเบเบเบญเบเบเบฒเบเปเบเปเบเบฝเบเปเบกเปเบเบชเบฐเปเบเบเบเปเบญเบเบเบทเปเบเบฒเบเปเบเปเบเบฝเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเบเบฒเบเบงเบดเปเบเบฒเบฐ IR เบเปเบฒเบเบเบฒเบ, เบเบทเปเบเบญเบเบซเบเปเบงเบเบเบฒเบเบเบปเปเบงเปเบฅเบเปเบกเปเบเบเปเบฒเบซเบเปเบฒเบเปเบงเบเบชเบฑเบเบเบฒเบฅเบฑเบ. @
, เปเบฅเบฐเบเปเบญเบเบเบทเปเบเปเบญเบเบเบดเปเบเบกเบตเบชเบฑเบเบเบฒเบฅเบฑเบ %
(เบเบฑเบเบเบฑเบเปเบถเปเบเบเบฑเบเบเบทเบงเปเบฒเปเบเบฑเบเปเปเบงเบเปเบฅเบ).
เบชเบดเปเบเบซเบเบถเปเบเบเบตเปเบเบงเบเบชเบฑเบเปเบเบเบเปเบฝเบงเบเบฑเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบกเปเบเบเบฒเบเบเบฑเบเบชเบดเบเปเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบเบเบฐเปเบเบ Go int
, เปเบเบดเปเบเบชเบฒเบกเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเปเบเบฑเบเบเปเบฒ 32-bit เบซเบผเบท 64-bit, เบเบถเปเบเบเบฑเบ compiler เปเบฅเบฐเปเบเบปเปเบฒเบซเบกเบฒเบเบเบญเบเบเบฒเบเบฅเบงเบเบฅเบงเบก, เบเบทเบเบเบญเบกเบฎเบฑเบเปเบกเบทเปเบญ LLVM เบชเปเบฒเบเบฅเบฐเบซเบฑเบ IR. เบเบตเปเปเบกเปเบ เปเบถเปเบ เปเบเบซเบผเบฒเบเปเบซเบเบเบปเบเบเบตเปเบงเปเบฒเบฅเบฐเบซเบฑเบ LLVM IR เบเปเปเปเบกเปเบ, เบเบฑเปเบเบเบตเปเบซเบผเบฒเบเบเบปเบเบเบดเบ, เปเบงเบเบตเปเบญเบเบฐเบฅเบฒเบ. เบฅเบฐเบซเบฑเบเบเบฑเปเบเบเปเบฒเบง, เบชเปเบฒเบเบชเปเบฒเบฅเบฑเบเปเบงเบเบตเบเบฝเบง, เบเปเปเบชเบฒเบกเบฒเบเบเบฝเบเปเบเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบฅเบฐเบฅเบงเบเบฅเบงเบกเบชเปเบฒเบฅเบฑเบเปเบงเบเบตเบญเบทเปเบ (เปเบงเบฑเปเบเปเบชเบเปเบเปเบงเปเบฒเบเปเบฒเบเปเบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเป.
เบเบธเบเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบญเบตเบเบญเบฑเบเบซเบเบถเปเบเบเบตเปเบเบงเบเบชเบฑเบเปเบเบเปเบกเปเบเบงเปเบฒเบเบฐเปเบเบ i64
เบเปเปเปเบกเปเบเบเบณเบเบงเบเปเบเบฑเบกเบเบตเปเบฅเบปเบเบฅเบฒเบเปเบเบฑเบ: เบกเบฑเบเปเบเบฑเบเบเบฒเบเปเบเปเบเปเบเบญเบเบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบเบเบปเบงเปเบฅเบ. เบญเบตเบเบเบฒเบกเบเปเบฒเปเบเบฐเบเปเบฒ, เบกเบฑเบเบชเบฒเบกเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบฑเบเบเบปเบงเปเบฅเบเบเบตเปเปเบเบฑเบเปเบฅเบฐเบเปเปเปเบเปเปเบเบฑเบ. เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฒเบเปเบเบตเปเบกเปเบเบตเบก, เบเบตเปเบเปเปเบชเปเบฒเบเบฑเบ, เบเบฑเปเบเบเบฑเปเบเบเปเปเบกเบตเบเบงเบฒเบกเปเบเบเบเปเบฒเบเบเบฑเบเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบปเบงเปเบฅเบเบเบตเปเปเบเบฑเบเบซเบผเบทเบเปเปเปเบเปเปเบเบฑเบ. เปเบเบเบตเปเบเบตเปเบเปเบญเบเบขเบฒเบเบชเบฑเบเปเบเบเบงเปเบฒเปเบเบเบฒเบชเบฒ C, เบเบฒเบ overflowing เบเบปเบงเปเบ integer เบเบตเปเบฅเบปเบเบเบฒเบกเบเปเบฒเปเบเบชเบนเปเบเบถเบเบเบดเบเปเบฒเบเบตเปเบเปเปเปเบเปเบเปเบฒเบเบปเบ, เบเบฑเปเบเบเบฑเปเบ Clang frontend เปเบเบตเปเบกเบเบธเบเปเบชเปเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ. nsw
(เบเปเปเบกเบตเปเบเบฑเบเบเบปเบเบเบฑเบเบเบถเบ), เปเบเบดเปเบเบเบญเบ LLVM เบงเปเบฒเบกเบฑเบเบชเบฒเบกเบฒเบเบชเบปเบกเบกเบธเบเบงเปเบฒเบเบญเบเบเบฒเบเบเบฑเปเบเบเปเปเปเบเบตเบ overflows.
เบเบตเปเบญเบฒเบเบเบฐเบกเบตเบเบงเบฒเบกเบชเปเบฒเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบฒเบเบขเปเบฒเบ. เบเบปเบงเบขเปเบฒเบ, เปเบเบตเปเบกเบชเบญเบเบเปเบฒ i16
เปเบเปเบงเบเบต 32-bit (เบกเบตเบเบฐเบเบฝเบ 32-bit) เบฎเบฝเบเบฎเปเบญเบเปเบซเป, เบซเบผเบฑเบเบเบฒเบเบเบตเป, เบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฒเบเบเบฐเบซเบเบฒเบเบชเบฑเบเบเบฒเบเปเบเบทเปเบญเบเบฑเบเบเบปเบเบขเบนเปเปเบเบเบญเบเปเบเบ. i16
. เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเบตเป, เบกเบฑเบเบกเบฑเบเบเบฐเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเบซเบผเบฒเบเบเบงเปเบฒเปเบเบปเปเบฒเปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเบฒเบเบงเบเปเบเบฑเบกเปเบเบเบญเบตเบเปเบชเปเบเบฐเบซเบเบฒเบเปเบเบทเปเบญเบเบฅเบปเบเบเบฐเบเบฝเบ.
เบชเบดเปเบเบเบตเปเปเบเบตเบเบเบถเปเบเบเปเปเปเบเบเบฑเบเบฅเบฐเบซเบฑเบ IR เบเบตเปเปเบกเปเบเบเปเปเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบเปเบเบเบชเบฐเปเบเบฒเบฐเบชเปเบฒเบฅเบฑเบเบเบงเบเปเบฎเบปเบฒเปเบเบเบฑเบเบเบธเบเบฑเบ. เบฅเบฐเบซเบฑเบเปเบกเปเบ optimized (เปเบเปเปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบปเบงเบขเปเบฒเบเบเบตเปเบเปเบฒเบเบเบฒเบเปเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒ, เบเปเปเบกเบตเบซเบเบฑเบเปเบกเปเบ optimized) เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฝเบเปเบเบฑเบเบฅเบฐเบซเบฑเบเปเบเบทเปเบญเบเบเบฑเบ.
เบเบปเบงเบขเปเบฒเบเบเบตเบชเบญเบ
เบเบปเบงเบขเปเบฒเบเบเปเปเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบดเปเบเบเบฐเบกเบตเบเบงเบฒเบกเบชเบฑเบเบชเบปเบเบซเบผเบฒเบเปเบฅเบฑเบเบเปเบญเบ. เบเบฑเปเบเปเบกเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบฑเบเบเบฑเบเบเบตเปเบฅเบงเบกเปเบญเบปเบฒเบชเปเบงเบเบเบญเบเบเปเบฒเบเบงเบเปเบเบฑเบก:
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. เบเบฒเบเบเบตเบฅเบฑเบเบชเบฐเบเบฐเบเบตเปเบเบฑเบเปเบเบเบเบตเปเบชเบธเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบกเปเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเปเปเบกเบตเบเปเบฒเบชเบฑเปเบเบเบงเบเบเบธเบกเบเบฒเบเปเบซเบผเบเบตเปเบกเบตเปเบเบเบชเปเบฒเบ. เปเบเบทเปเบญเบเบงเบเบเบธเบกเบเบฒเบเปเบซเบผเปเบเบปเปเบฒเบเบญเบเบเบฒเบเบเบดเบเปเบฅเป, เบกเบตเบเบฝเบเปเบเปเบเบฒเบเบเบฐเปเบเบเบเบตเปเบกเบตเปเบเบทเปเบญเบเปเบเปเบฅเบฐเบเปเปเบกเบตเปเบเบทเปเบญเบเปเบ, เปเบฅเบฐเบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบดเบเบฒเบฅเบฐเบเบฒเบเปเบฒเบชเบฑเปเบเบเบตเปเปเบเบฑเบเบเปเบฒเบชเบฑเปเบเบเบตเปเบเบฐเบเบงเบเบเบธเบกเบเบฒเบเปเบซเบผ, เบเปเบฒเบชเบฑเปเบเบเบฑเบเบเบทเบ.
เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เปเบเบเบตเปเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบญเบปเบฒเปเบเปเบชเปเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเปเบเบเบเบฒเบเบเปเปเปเบเปเปเบเปเบเบญเบญเบเปเบเบฑเบเบเปเบญเบเปเบกเปเปเบเบเปเบเปเบงเบปเบเปเบฅเบฑเบ curly (เปเบเบเบญเบเบเบปเบง C เบเบญเบเบเบฒเบชเบฒ). เบกเบฑเบเปเบเปเบเบทเบเปเบเปเบเบญเบญเบเปเบเบเบเปเบฒเบเบเบทเป, reminiscent เบเบญเบเบเบฒเบชเบฒเบเบฐเบเบญเบ, เปเบฅเบฐเบเปเบฒเบชเบฐเปเบซเบเบตเปเบเบฎเบนเบเปเบเบเบเบญเบเบเบฑเบเบเบทเปเบเบเบฒเบ. เปเบ SSA, เบเบฑเบเบเบทเปเบเบเบฒเบเปเบกเปเบเบเบทเบเบเปเบฒเบเบปเบเปเบเบฑเบเบฅเปเบฒเบเบฑเบเบเบตเปเบเบดเบเบเบฑเบเบเบญเบเบฅเบฐเบซเบฑเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเบเปเบฒเบเบเบทเปเปเบฅเบฐเบฅเบปเบเบเปเบฒเบเบเปเบงเบเบเปเบฒเปเบเบฐเบเปเบฒเบเบฒเบเบชเปเบฒเปเบฅเบฑเบเบเบผเบญเบเบเบทเปเบเบเบฒเบ, เปเบเบฑเปเบ: โ return
ะธ jump
.
เบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบญเบตเบเบญเบฑเบเบซเบเบถเปเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบกเปเบเปเบเบฑเบเบเบปเบงเปเบเบเปเบเบเบเปเบฒเปเบเบฐเบเปเบฒ phi
. เบเปเบฒเปเบเบฐเบเปเบฒเปเบกเปเบเบเปเบญเบเบเปเบฒเบเบเบดเบเบเบปเบเบเบฐเบเบดเปเบฅเบฐเบญเบฒเบเบเบฐเปเบเปเปเบงเบฅเบฒเบเบฒเบเปเบงเบฅเบฒเปเบเบทเปเบญเปเบเบปเปเบฒเปเบ. เบเบทเป, เบงเปเบฒ myAdd
เบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเปเบฒเบเปเบเบดเบ, เปเบเปเบเปเปเปเบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบเบซเบเปเบฒเบเบตเปเบชเบฐเบฅเบฑเบเบชเบฑเบเบเปเบญเบเบซเบผเบฒเบเปเบเบฑเปเบ: เบซเบเปเบฒเบเบตเปเบชเบปเบเบเบฐเบเบฒเปเบเบเบฒเบเบเบตเป sum
. เปเบเบเบชเบฐเปเบเบฒเบฐ, เบเบปเบงเปเบเบเปเบฝเบเปเบเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบ loop i
ะธ n
.
SSA เบเปเบฒเบกเบเปเปเบเปเบฒเบเบฑเบเปเบเบเบฒเบเบเปเบฒเบเบปเบเบเปเบฒเบเบปเบงเปเบเบซเบเบถเปเบเบเบฑเปเบเปเบเบเปเบเปเบญเบฑเบเบเบตเปเปเบญเบตเปเบเบงเปเบฒเบเปเบฒเปเบเบฐเบเปเบฒ. phi
(เบเบทเปโเบเบญเบโเบกเบฑเบโเบเบทเบโเปเบญเบปเบฒโเบกเบฒโเบเบฒเบโเบเบปเบงโเบญเบฑเบโเบชเบญเบโเบโเปเบฃเบฑเบโ)โ. เบเบงเบฒเบกเบเบดเบเปเบฅเปเบงเปเบกเปเบเบงเปเบฒเปเบเบทเปเบญเปเบซเปเบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบ SSA เบเบญเบเบฅเบฐเบซเบฑเบเบเบทเบเบชเปเบฒเบเบเบทเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบชเบฒเปเบเบฑเปเบ C, เบเปเบฒเบเบเปเบญเบเปเบเปเบเบฒเบ tricks. เบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเบเบฒเบเปเบเบซเบฒเบเปเบฒเปเบเบฐเบเปเบฒเบเบตเปเปเบกเปเบเบกเบนเบเบเปเบฒเบเบฑเบเบเบธเบเบฑเบเบเบญเบเบเบปเบงเปเบ (i
เบซเบผเบท n
), เปเบฅเบฐเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเบเบฑเบเบเบทเปเบเบเบฒเบเบเบทเบเบเปเบฒเปเบเปเปเบเบฑเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบญเบเบกเบฑเบ. เบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบ, เบเบดเบเบฒเบฅเบฐเบเบฒเบเปเบฒเปเบเบฐเบเปเบฒเบเบตเป:
t0 = phi [entry: 0:int, for.body: t6] #n
เบเบงเบฒเบกเบซเบกเบฒเบเบเบญเบเบกเบฑเบเปเบกเปเบเบเบฑเปเบเบเปเปเปเบเบเบตเป: เบเปเบฒเบซเบฒเบเบงเปเบฒเบเบฑเบเบเบทเปเบเบเบฒเบเบเบตเปเบเปเบฒเบเบกเบฒเปเบกเปเบเบเบฑเบ entry
(เบเปเบญเบ), เบเบฒเบเบเบฑเปเบ t0
เปเบกเปเบเบเบปเบเบเบตเป 0
, เปเบฅเบฐเบเปเบฒเบซเบฒเบเบงเปเบฒเบเบฑเบเบเบทเปเบเบเบฒเบเบเบตเปเบเปเบฒเบเบกเบฒเปเบกเปเบ for.body
, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบญเบปเบฒเบกเบนเบเบเปเบฒ t6
เบเบฒเบเบเบฑเบเบเบตเป. เบเบตเปเบเบฑเบเบซเบกเบปเบเบญเบฒเบเบเบฐเปเบเบดเปเบเบเบทเบงเปเบฒเบกเบตเบเบงเบฒเบกเบฅเบถเบเบฅเบฑเบ, เปเบเปเบเบปเบเปเบเบเบตเปเปเบกเปเบเบชเบดเปเบเบเบตเปเปเบฎเบฑเบเปเบซเป SSA เปเบฎเบฑเบเบงเบฝเบ. เบเบฒเบเบเบฑเบเบชเบฐเบเบฐเบเบญเบเบกเบฐเบเบธเบ, เบเบฑเบเบซเบกเบปเบเบเบตเปเปเบฎเบฑเบเปเบซเปเบฅเบฐเบซเบฑเบเบเบฒเบเบเบตเปเบเบฐเปเบเบปเปเบฒเปเบ, เปเบเปเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเปเบเปเบฅเบฐเบเปเบฒเบเบทเบเบกเบญเบเบซเบกเบฒเบเบเบฝเบเปเบเปเบเบฑเปเบเบเบฝเบงเปเบฎเบฑเบเปเบซเปเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบซเบผเบฒเบเบเปเบฒเบเบเบถเปเบ.
เปเบซเปเบชเบฑเบเปเบเบเบงเปเบฒเบเปเบฒเบเปเบฒเบเบเบฝเบเบเบปเบงเบฅเบงเบเบฅเบงเบกเบเบญเบเบเปเบฒเบเปเบญเบ, เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเบเปเบฒเบเบเบฐเบเปเปเบเปเบญเบเบเบฑเบเบเบฒเบเบเบฑเบเบชเบดเปเบเบเบฐเปเบเบเบเบตเป. เปเบเบดเบเปเบกเปเบเบงเปเบฒ Clang เบเปเปเปเบเปเบชเปเบฒเบเบเปเบฒเปเบเบฐเบเปเบฒเปเบซเบผเบปเปเบฒเบเบตเปเบเบฑเบเบซเบกเบปเบ phi
, เบกเบฑเบเปเบเปเบเบปเบเปเบ alloca
(เบกเบฑเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบปเบงเปเบเบเปเบญเบเบเบดเปเบเบเบปเปเบงเปเบ). เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เปเบกเบทเปเบญเปเบฅเปเบเบเปเบฒเบเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบ LLVM เปเบญเบตเปเบเบงเปเบฒ alloca
เบเปเบฝเบเปเบเบฑเบเปเบเบเบเบญเบก SSA. TinyGo, เปเบเบงเปเบเบเปเปเบเบฒเบก, เปเบเปเบฎเบฑเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเบเบฒเบ Go SSA, เปเบเบดเปเบเบชเบฐเบเบงเบ, เบเบทเบเบเปเบฝเบเปเบเบฑเบเปเบเบเบเบญเบก SSA เปเบฅเปเบง.
เบเบฒเบเบเบฐเบเบดเบเบชเปเบฒเบเบญเบตเบเบเบฐเบเบฒเบเบซเบเบถเปเบเบเบญเบเบเบดเปเบเบชเปเบงเบเบเบญเบเบฅเบฐเบซเบฑเบเบฅเบฐเบเบฑเบเบเบฒเบเบเบฒเบเปเบเปเบเบฒเบเบเบดเบเบฒเบฅเบฐเบเบฒเปเบกเปเบเบงเปเบฒเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบญเบปเบเบเบฐเบเบญเบ slice เปเบเบเบเบฑเบเบเบฐเบเบตเปเบกเปเบเปเบเบฑเบเบเบปเบงเปเบเบเปเบเบฎเบนเบเปเบเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบเบเบฒเบเบเบดเบเปเบฅเปเบเบตเปเบขเบนเปเปเบฅเบฐเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบ deferencing เบเบปเบงเบเบตเปเบเบปเบเปเบเปเบฎเบฑเบ. เปเบเบเบตเปเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบเบฒเบเปเบเบตเปเบกเบเปเบฒเบเบปเบเบเบตเปเปเบเบเบเบปเบเบเบฑเบเบฅเบฐเบซเบฑเบ 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
}
เบเบตเปเบเบตเป, เบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเบเบชเปเบฒเบเบเบฝเบงเบเบฑเบ, เปเบเบดเปเบเบเบฐเบเบญเบเบกเบตเปเบเบเบชเปเบฒเบ syntactic เบญเบทเปเบเป. เบเบปเบงเบขเปเบฒเบ, เปเบเบเบฒเบเปเบ phi
เบกเบนเบเบเปเบฒเปเบฅเบฐเบเปเบฒเบเบเบทเป swapped. เบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบกเบตเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบขเบนเปเบเบตเปเบเบตเปเบเบตเปเบกเบตเบกเบนเบเบเปเบฒเบเบฒเบเปเบญเบปเบฒเปเบเปเบชเปเปเบเบฑเบเบเบดเปเบชเบ.
เปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบ, เปเบเบเบตเปเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบฅเบฒเบเปเบเบฑเบเบเบญเบเบซเบเปเบฒเบเบตเปเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบซเบกเบปเบ. LLVM เบเปเปเบฎเบญเบเบฎเบฑเบเบเบดเปเบเบชเปเบงเบ, เปเบฅเบฐเบเปเบงเบเปเบซเบเบเบตเป, เปเบเบฑเบเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบ, เบเบปเบงเบชเบฑเบเบฅเบงเบก TinyGo เบเบตเปเบชเปเบฒเบเบฅเบฐเบซเบฑเบเบฅเบฐเบเบฑเบเบเบฒเบเบเบฒเบเบเบตเปเปเบเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบญเบเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเบตเปเบญเบญเบเปเบเบฑเบเบเบฒเบเบชเปเบงเบเบเปเบฒเบเป. เบกเบฑเบเบชเบฒเบกเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบชเบฒเบกเบญเบปเบเบเบฐเบเบญเบ (ptr
, len
ะธ cap
) เปเบเบฑเบเปเบเบเบชเปเบฒเบ (เปเบเบเบชเปเบฒเบ), เปเบเปเบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเปเบซเปเบเบงเบเปเบเบปเบฒเปเบเบฑเบเบชเบฒเบกเบซเบเปเบงเบเบเบฒเบเปเบเบเบเปเบฒเบเบซเบฒเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบกเบตเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบฒเบเบขเปเบฒเบ. เบเบญเบกเบเบตเบงเปเบเบตเบญเบทเปเบเปเบญเบฒเบเบเบฐเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบ slice เปเบเบงเบดเบเบตเบเบฒเบเบญเบทเปเบเป, เบเบถเปเบเบเบฑเบเบชเบปเบเบเบดเบชเบฑเบเบเบฒเบเบฒเบเปเบเบซเบฒเบเบญเบเบซเบเปเบฒเบเบตเปเบเบญเบเปเบงเบเบตเปเบเบปเปเบฒเบซเบกเบฒเบเบเบฑเปเบเบเปเบฒเบง.
เบฅเบฑเบเบชเบฐเบเบฐเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบญเบตเบเบญเบฑเบเบซเบเบถเปเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบกเปเบเบเบฒเบเบเปเบฒเปเบเปเบเปเบฒเปเบเบฐเบเปเบฒ 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. เปเบเปเบเบญเบ, เบกเบตเบซเบผเบฒเบเบซเบผเบฒเบเบขเบนเปเบเบตเปเบเบตเป. เปเบเบเบชเบฐเปเบเบฒเบฐ, เบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบฅเบฐเบเบฑเบเบเบฒเบเบเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบญเบฒเบเบเบฐเบเบฐเบเบญเบเบเปเบงเบเบซเบผเบฒเบเบเปเบฒเบเบฑเบเบเบฒเบเบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบเบทเปเบญเบเบดเบเบฒเบฅเบฐเบเบฒเบฅเบฑเบเบชเบฐเบเบฐเบเบฒเบเบขเปเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเบฎเบนเปเบเบฑเบเบเบฑเบ compiler เบเบตเปเบเปเปเบชเบฒเบกเบฒเบเบชเบฐเปเบเบเบญเบญเบเปเบ IR. เบเบปเบงเบขเปเบฒเบ, เบเบตเปเปเบกเปเบเบเบธเบ inbounds
เบเปเบฒเปเบเบฐเบเปเบฒ GEP, เบซเบผเบทเบเบธเบ nsw
ะธ nuw
, เปเบเบดเปเบเบชเบฒเบกเบฒเบเปเบเบตเปเบกเปเบชเปเบเปเบฒเปเบเบฐเบเปเบฒ add
. เบเบทเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบชเปเบฒเบเบฑเบ private
, เบเบตเปเปเบซเปเปเบซเบฑเบเปเบเบดเบ optimizer เบงเปเบฒเบซเบเปเบฒเบเบตเปเบกเบฑเบเบซเบกเบฒเบเบเบฐเบเปเปเบเบทเบเบญเปเบฒเบเบญเบตเบเบเบฒเบเบเบฒเบเบเบญเบเบซเบเปเบงเบเบเบฒเบเบฅเบงเบเบฅเบงเบกเบเบฐเบเบธเบเบฑเบ. เบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบกเบตเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบ interprocedural เบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบซเบผเบฒเบเปเบเบฑเปเบเบเบฒเบเบเปเบฒเบเบฑเบเบเบฒเบเปเบเปเบเบฝเบเบเบตเปเบเปเปเปเบเปเปเบเป.
เบเปเบฒเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบ LLVM เปเบ
เบเปเบฒเบเบเบนเปเบญเปเบฒเบเบเบตเปเบฎเบฑเบเปเบเบ! เปเบเบปเปเบฒเปเบเป LLVM เบเป?
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com