แจแแแแแแแแแแก แจแแแฃแจแแแแแ แซแแแแแ แ แแฃแแ แแแแชแแแแ. แแแแ แแ, แกแแแแแแแแ แแ, 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
}
แ แแช แจแแแแซแแแแ แจแแแแฉแแแแ แแ แแก แแก, แ แแ แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแฅ แแแแแแงแแแแแ แกแฎแแแแแกแฎแแ แกแแแขแแฅแกแฃแ แ แกแขแ แฃแฅแขแฃแ แแแ, แคแฃแแฅแชแแแก แกแขแ แฃแฅแขแฃแ แ แซแแ แแแแแแ แฃแชแแแแแแ. LLVM IR แแแแ แแแแแ แฃแคแ แ แซแแแแ แแ แแแแ แ Go SSA แแแแ, C-แแก แแกแแแแกแ. แแฅ, แคแฃแแฅแชแแแก แแแแแแ แแชแแแจแ, แฏแแ แแ แแก แแฆแฌแแ แแแแแ แแแก แแแแ แแแแ แฃแแแแฃแ แแแแแชแแแแ แขแแแแ, แแ แแฃแแแแขแแก แขแแแ แแแแแแแแฃแแแ แแ แแฃแแแแขแแก แกแแฎแแแแแแ. แแแ แแ แแแแกแ, IR แแแแแแแแก แแแกแแแแ แขแแแแแแแ, แแแแแแแฃแ แ แแ แแแฃแแแแแก แกแแฎแแแแแก แฌแแ แฃแซแฆแแแก แกแแแแแแ @
แแ แแแแแแแแ แแแ แกแแฎแแแแแแก แฌแแ แแ แแก แกแแแแแแ %
(แคแฃแแฅแชแแ แแกแแแ แแแแแฎแแแแแ แแแแแแแฃแ แแ แแแฃแแแ).
แแ แแ แ แแ, แ แแช แฃแแแ แแฆแแแแจแแแก แแ แแแแแแ แแแแแแจแแ แแแแ, แแ แแก Go-แก แขแแแแก แฌแแ แแแแแแแแแแแแแก แแแแแฌแงแแแขแแแแแ int
, แ แแแแแแช แจแแแซแแแแ แฌแแ แแแแแแแแแ แแงแแก 32-แแแขแแแแ แแ 64-แแแขแแแแ แแแแจแแแแแแแแ, แจแแแแแแแแแแกแ แแ แแแแแแแแชแแแก แแแแแแก แแแฎแแแแแ, แแแแฆแแแ, แ แแแแกแแช LLVM แแแแแแ แแ แแแก IR แแแแก. แแก แแ แแก แแ แ-แแ แแ แแแแแแ แแแแกแ, แ แแ LLVM IR แแแแ แแ แแ แแก, แ แแแแ แช แแแแ แ แคแแฅแ แแแก, แแแแขแคแแ แแแแ แแแแแฃแแแแแแแแ. แแกแแแ แแแแ, แ แแแแแแช แจแแฅแแแแแแ แแ แแ แแแแขแคแแ แแแกแแแแก, แแ แจแแแซแแแแ แฃแแ แแแแ แแฅแแแก แแแฆแแแฃแแ แแ แจแแแแแแแแ แกแฎแแ แแแแขแคแแ แแแกแแแแก (แแฃ แแ แฎแแ แ แจแแกแแคแแ แแกแ แแ แแ แแแแแแแก แแแแแกแแญแ แแแแ
แแแแแ แแ แแ แกแแแแขแแ แแกแ แแฃแแฅแขแ, แ แแแแแแช แฃแแแ แแฆแแแแจแแแก, แแ แแก แแก, แ แแ แขแแแ i64
แแ แแ แแก แฎแแแแแฌแแ แแแ แแแแแ แ แแชแฎแแ: แแก แแแแขแ แแแฃแ แแ แ แแชแฎแแแก แแแจแแแก แฌแแ แแแแแแแแก แแแแแกแแแ แแกแแ. แแแกแขแ แฃแฅแชแแแก แแแฎแแแแแ, แแแก แจแแฃแซแแแ แฌแแ แแแแแแแแแก แ แแแแ แช แฎแแแแแฌแแ แแแ, แแกแแแ แฎแแแแแฃแฌแแ แแแ แแแแ แแแ. แจแแแ แแแแก แแแแ แแชแแแก แฌแแ แแแแแแแแก แจแแแแฎแแแแแจแ แแแแก แแแแจแแแแแแแ แแ แแฅแแก, แแแแขแแ แแ แแ แแก แแแแกแฎแแแแแแ แฎแแแแแฌแแ แแ แแ แฎแแแแแฃแฌแแ แแ แ แแชแฎแแแแแแ แแฃแจแแแแแจแ. แแฅแแ แแแแแ แแฆแแแแจแแ, แ แแ C แแแแจแ, แฎแแแแแฌแแ แแแ แแแแแ แ แแชแฎแแแก แชแแแแแแก แแแแแญแแ แแแแ แแฌแแแแก แแแแฃแกแแแฆแแ แแ แฅแชแแแแก, แแแแขแแ Clang แฌแแแ แแแฌแแแ แแแแขแแแก แแ แแจแแก แแแแ แแชแแแก. 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
. แแแกแขแ แฃแฅแชแแแแ แกแแแแแแ แฃแฉแแแฃแแแ แแ แจแแแซแแแแ แแแ แแแแฃแแ แแ แ แแแกแญแแ แแแก แแแก แแแแแแแก. แแแแฎแกแแแแแก, แ แแ myAdd
แแแฉแแแแแแแ แแแแแ, แแแแ แแ แแ แแ แแก แจแแกแแคแแ แแกแ แฃแคแ แ แ แแฃแแ แคแฃแแฅแชแแแแแกแแแแก, แ แแแแ แแชแแ แแ แแแฌแแแจแ แแแแฎแแแฃแแ แคแฃแแฅแชแแ sum
. แแแ แซแแ, แชแแแแแแแ แแชแแแแแ แแแ แงแฃแแแก แจแแกแ แฃแแแแแก แแ แแก i
ะธ n
.
SSA แแแแ แแก แฃแแแแก แชแแแแแแก แแแแจแแแแแแแแแแก แแ แแฎแแ แแแแแญแแแแก แจแแแฆแฃแแแแก แ.แฌ. phi
(แแแกแ แกแแฎแแแ แแฆแแแฃแแแ แแแ แซแแฃแแ แแแแแแแแแ). แคแแฅแขแแ, แ แแ แแแแกแแแแแก, แ แแ แแแแแก SSA แฌแแ แแแแแแแ แจแแแฅแแแแก แแกแแแ แแแแแแกแแแแก, แ แแแแ แแชแแ C, แแฅแแแ แฃแแแ แแแแแ แแแ แ แแแแแแแแ แฎแ แแแก. แแ แแแกแขแ แฃแฅแชแแแก แแแแแซแแฎแแแแก แจแแแแแ แแ แแก แชแแแแแแก แแแแแแแแ แ แแแแจแแแแแแแ (i
แแ n
), แแ แแแก แแแ แแแแขแ แแแแ แแแแแแงแแแแแ แซแแ แแแแแ แแแแแแแแก แกแแ. แแแแแแแแแ, แแแแแแแแแกแฌแแแแ แแก แแแกแขแ แฃแฅแชแแ:
t0 = phi [entry: 0:int, for.body: t6] #n
แแแกแ แแแแจแแแแแแแ แแกแแแแ: แแฃ แฌแแแ แซแแ แแแแแ แแแแแ แแงแ แแแแแ entry
(แจแแงแแแแ), แจแแแแแ t0
แแ แแก แแฃแแแแแ 0
แแ แแฃ แฌแแแ แซแแ แแแแแ แแแแแ แแงแ for.body
, แแแจแแ แแฅแแแ แฃแแแ แแแฆแแ แแแแจแแแแแแแ t6
แแ แแแแแแแแ. แแก แงแแแแแคแแ แ แจแแแซแแแแ แกแแแแแแ แแแฃแแแแ แฉแแแแแก, แแแแ แแ แแก แแแฅแแแแแแ แแ แแก แแก, แ แแช แแแซแฃแแแแก SSA-แก แแฃแจแแแแแก. แแแแแแแแแก แแแ แกแแแฅแขแแแแแแ แแก แงแแแแแคแแ แ แแ แแฃแแแแก แแแแแก แแแแแแแก, แแแแ แแ แแก แคแแฅแขแ, แ แแ แแแแแแฃแแ แแแแจแแแแแแแ แแฎแแแแ แแ แแฎแแ แแ แแก แแแแแญแแแฃแแ, แแแแ แแแขแแแแแแชแแแก แแแแ แแ แแแแแแแแแก.
แแแแแแแแแกแฌแแแแ, แ แแ แแฃ แแฅแแแ แแแฌแแ แ แกแแแฃแแแ แจแแแแแแแแแก, แฉแแแฃแแแแ แแ, แแ แแแแแฌแแแ แกแแฅแแ แแ แขแแแแก แกแแแแแฎแแแแแ. แแแแแแแช แแ แแ แฅแแแแก แงแแแแ แแ แแแกแขแ แฃแฅแชแแแก phi
, แแก แแงแแแแแก แแแฅแแแแแแก alloca
(แแก แฌแแแแแแก แฉแแแฃแแแแ แแ แแแแแแฃแ แชแแแแแแแแแ แแฃแจแแแแแก). แจแแแแแ, LLVM แแแขแแแแแแชแแแก แกแแจแแแก แแแจแแแแแกแแก แแแแแแซแแฎแแก 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 แแ แฃแญแแ แก แแฎแแ แก slices-แก แแ แจแแแแแแ, แ แแแแ แช แแแขแแแแแแชแแ, 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-แก?
แฌแงแแ แ: www.habr.com