Π Π°Π·Π²ΠΎΡ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠ° ΡΠ΅ Π²Π΅ΠΎΠΌΠ° ΡΠ΅ΠΆΠ°ΠΊ Π·Π°Π΄Π°ΡΠ°ΠΊ. ΠΠ»ΠΈ, Π½Π° ΡΡΠ΅ΡΡ, ΡΠ°Π·Π²ΠΎΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΏΠΎΠΏΡΡ ΠΠΠΠ-Π°, ΡΠ΅ΡΠ΅ΡΠ΅ ΠΎΠ²ΠΎΠ³ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ Ρ Π²Π΅Π»ΠΈΠΊΠΎΡ ΠΌΠ΅ΡΠΈ ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠ΅Π½ΠΎ, ΡΡΠΎ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° ΡΠ°ΠΊ ΠΈ ΡΠ΅Π΄Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΡ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ° Π½ΠΎΠ²ΠΈ ΡΠ΅Π·ΠΈΠΊ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΠΎ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠ°ΠΌΠ° Π±Π»ΠΈΠ·Π°ΠΊ Π¦. Π Π°Π΄ ΡΠ° ΠΠΠΠ-ΠΎΠΌ ΡΠ΅ ΠΊΠΎΠΌΠΏΠ»ΠΈΠΊΠΎΠ²Π°Π½ ΡΠΈΡΠ΅Π½ΠΈΡΠΎΠΌ Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎ ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠΈΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π°, ΠΎΠΏΡΠ΅ΠΌΡΠ΅Π½ ΡΠ° ΠΌΠ°Π»ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅. ΠΠ° Π±ΠΈ ΠΏΠΎΠΊΡΡΠ°ΠΎ Π΄Π° ΠΈΡΠΏΡΠ°Π²ΠΈ ΠΎΠ²Π°Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠ°ΠΊ, Π°ΡΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»Π°, ΡΠΈΡΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ Π΄Π°Π½Π°Ρ ΠΎΠ±ΡΠ°Π²ΡΡΡΠ΅ΠΌΠΎ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΎΠ³ Ρ ΠΠΎ-Ρ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΎΠ½ΠΈ ΠΏΡΠ²ΠΎ ΠΏΡΠ΅Π²ΠΎΠ΄Π΅ Ρ
ΠΡΠ²ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ
ΠΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΊΠΎΡΡ ΡΡ ΠΎΠ²Π΄Π΅ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠΈ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π±ΡΠΎΡΠ΅Π²Π°:
func myAdd(a, b int) int{
return a + b
}
ΠΠ²Π° ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΠ΅ Π²Π΅ΠΎΠΌΠ° ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΠΈ, ΠΌΠΎΠΆΠ΄Π°, Π½ΠΈΡΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΡΠ΅. ΠΡΠ΅Π²ΠΎΠ΄ΠΈ ΡΠ΅ Ρ ΡΠ»Π΅Π΄Π΅ΡΠΈ ΠΠΎ Π‘Π‘Π ΠΊΠΎΠ΄:
func myAdd(a int, b int) int:
entry:
t0 = a + b int
return t0
Π‘Π° ΠΎΠ²ΠΈΠΌ ΠΏΡΠΈΠΊΠ°Π·ΠΎΠΌ, Π½Π°Π³ΠΎΠ²Π΅ΡΡΠ°ΡΠΈ Π·Π° ΡΠΈΠΏ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΡ ΡΠ° Π΄Π΅ΡΠ½Π΅ ΡΡΡΠ°Π½Π΅ ΠΈ ΠΌΠΎΠ³Ρ ΡΠ΅ Π·Π°Π½Π΅ΠΌΠ°ΡΠΈΡΠΈ Ρ Π²Π΅ΡΠΈΠ½ΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π²Π°.
ΠΠ²Π°Ρ ΠΌΠ°Π»ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π²Π°ΠΌ Π²Π΅Ρ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΡΡΠΈΠ½Ρ ΡΠ΅Π΄Π½ΠΎΠ³ Π°ΡΠΏΠ΅ΠΊΡΠ° Π‘Π‘Π. ΠΠ°ΠΈΠΌΠ΅, ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΠ²Π°ΡΠ° ΠΊΠΎΠ΄Π° Ρ Π‘Π‘Π ΡΠΎΡΠΌΡ, ΡΠ²Π°ΠΊΠΈ ΠΈΠ·ΡΠ°Π· ΡΠ΅ ΡΠ°Π·Π»Π°ΠΆΠ΅ Π½Π° Π½Π°ΡΠ΅Π»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΠΈΡΠ΅ Π΄Π΅Π»ΠΎΠ²Π΅ ΠΎΠ΄ ΠΊΠΎΡΠΈΡ
ΡΠ΅ ΡΠ°ΡΡΠ°Π²ΡΠ΅Π½. Π£ Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° return a + b
, Ρ ΡΡΠ²Π°ΡΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ° Π΄Π²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ΅: ΡΠ°Π±ΠΈΡΠ°ΡΠ΅ Π΄Π²Π° Π±ΡΠΎΡΠ° ΠΈ Π²ΡΠ°ΡΠ°ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°.
ΠΠΎΡΠ΅Π΄ ΡΠΎΠ³Π°, ΠΎΠ²Π΄Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°; Ρ ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Ρ ΠΏΠΎΡΡΠΎΡΠΈ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π°Π½ Π±Π»ΠΎΠΊ - Π±Π»ΠΎΠΊ Π·Π° ΡΠ½ΠΎΡ. Π£ Π½Π°ΡΡΠ°Π²ΠΊΡ ΡΠ΅ΠΌΠΎ Π²ΠΈΡΠ΅ ΠΏΡΠΈΡΠ°ΡΠΈ ΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΠΈΠΌΠ°.
ΠΠΎ Π‘Π‘Π ΠΊΠΎΠ΄ ΡΠ΅ Π»Π°ΠΊΠΎ ΠΏΡΠ΅ΡΠ²Π°ΡΠ° Ρ ΠΠΠΠ ΠΠ :
define i64 @myAdd(i64 %a, i64 %b) {
entry:
%0 = add i64 %a, %b
ret i64 %0
}
ΠΠ½ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠΈ ΡΠ΅ Π΄Π° ΠΈΠ°ΠΊΠΎ ΡΠ΅ ΠΎΠ²Π΄Π΅ ΠΊΠΎΡΠΈΡΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΊΠ΅ ΡΡΡΡΠΊΡΡΡΠ΅, ΡΡΡΡΠΊΡΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΡΠ΅ Ρ ΠΎΡΠ½ΠΎΠ²ΠΈ Π½Π΅ΠΏΡΠΎΠΌΠ΅ΡΠ΅Π½Π°. ΠΠΠΠ ΠΠ ΠΊΠΎΠ΄ ΡΠ΅ ΠΌΠ°Π»ΠΎ ΡΠ°ΡΠΈ ΠΎΠ΄ ΠΠΎ Π‘Π‘Π ΠΊΠΎΠ΄Π°, ΡΠ»ΠΈΡΠ°Π½ Π¦. ΠΠ²Π΄Π΅, Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠΈ ΡΡΠ½ΠΊΡΠΈΡΠ΅, ΠΏΡΠ²ΠΎ ΠΏΠΎΡΡΠΎΡΠΈ ΠΎΠΏΠΈΡ ΡΠΈΠΏΠ° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΊΠΎΡΠΈ Π²ΡΠ°ΡΠ°, ΡΠΈΠΏ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ ΠΏΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠΎΡΠ΅Π΄ ΡΠΎΠ³Π°, Π΄Π° Π±ΠΈ ΡΠ΅ ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΠΈΠ»ΠΎ ΠΠ ΡΠ°ΡΡΠ»Π°ΡΠΈΠ²Π°ΡΠ΅, ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡ
Π΅Π½ΡΠΈΡΠ΅ΡΠ° ΠΏΡΠ΅ΡΡ
ΠΎΠ΄ΠΈ ΡΠΈΠΌΠ±ΠΎΠ» @
, Π° ΠΈΡΠΏΡΠ΅Π΄ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ
Π½Π°Π·ΠΈΠ²Π° ΡΡΠΎΡΠΈ ΡΠΈΠΌΠ±ΠΎΠ» %
(ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΠ΅ ΡΠ°ΠΊΠΎΡΠ΅ ΡΠΌΠ°ΡΡΠ° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΠΌ Π΅Π½ΡΠΈΡΠ΅ΡΠΎΠΌ).
ΠΠ΅Π΄Π½Π° ΡΡΠ²Π°Ρ ΠΊΠΎΡΡ ΡΡΠ΅Π±Π° ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠΈ Ρ Π²Π΅Π·ΠΈ ΡΠ° ΠΎΠ²ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠ΅ ΠΎΠ΄Π»ΡΠΊΠ° ΠΠΎ ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΡ ΡΠΈΠΏΠ° int
, ΠΊΠΎΡΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½ ΠΊΠ°ΠΎ 32-Π±ΠΈΡΠ½Π° ΠΈΠ»ΠΈ 64-Π±ΠΈΡΠ½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ, Ρ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠ° ΠΈ ΡΠΈΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ΅, ΠΏΡΠΈΡ
Π²Π°ΡΠ° ΡΠ΅ ΠΊΠ°Π΄Π° ΠΠΠΠ Π³Π΅Π½Π΅ΡΠΈΡΠ΅ ΠΠ ΠΊΠΎΠ΄. ΠΠ²ΠΎ ΡΠ΅ ΡΠ΅Π΄Π°Π½ ΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ°Π·Π»ΠΎΠ³Π° Π·Π°ΡΡΠΎ ΠΠΠΠ ΠΠ ΠΊΠΎΠ΄ Π½ΠΈΡΠ΅, ΠΊΠ°ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈ ΠΌΠΈΡΠ»Π΅, Π½Π΅Π·Π°Π²ΠΈΡΠ°Π½ ΠΎΠ΄ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅. Π’Π°ΠΊΠ°Π² ΠΊΠΎΠ΄, ΠΊΡΠ΅ΠΈΡΠ°Π½ Π·Π° ΡΠ΅Π΄Π½Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π½Π΅ ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ·Π΅ΡΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠΈ Π·Π° Π΄ΡΡΠ³Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (ΠΎΡΠΈΠΌ Π°ΠΊΠΎ Π½ΠΈΡΡΠ΅ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ ΠΎΠ²ΠΎΠ³ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°
ΠΠΎΡ ΡΠ΅Π΄Π½Π° Π·Π°Π½ΠΈΠΌΡΠΈΠ²Π° ΡΡΠ²Π°Ρ ΠΊΠΎΡΡ Π²ΡΠ΅Π΄ΠΈ Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡΡΠΈ ΡΠ΅ Π΄Π° ΡΠΈΠΏ i64
Π½ΠΈΡΠ΅ ΡΠ΅ΠΎ Π±ΡΠΎΡ ΡΠ° ΠΏΡΠ΅Π΄Π·Π½Π°ΠΊΠΎΠΌ: Π½Π΅ΡΡΡΠ°Π»Π°Π½ ΡΠ΅ Ρ ΡΠΌΠΈΡΠ»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠ° ΠΏΡΠ΅Π΄Π·Π½Π°ΠΊΠ° Π±ΡΠΎΡΠ°. Π£ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠΈ ΠΈ ΠΏΠΎΡΠΏΠΈΡΠ°Π½Π΅ ΠΈ Π½Π΅ΠΏΠΎΡΠΏΠΈΡΠ°Π½Π΅ Π±ΡΠΎΡΠ΅Π²Π΅. Π£ ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ΅ ΡΠ°Π±ΠΈΡΠ°ΡΠ°, ΠΎΠ²ΠΎ Π½ΠΈΡΠ΅ Π±ΠΈΡΠ½ΠΎ, ΡΠ°ΠΊΠΎ Π΄Π° Π½Π΅ΠΌΠ° ΡΠ°Π·Π»ΠΈΠΊΠ΅ Ρ ΡΠ°Π΄Ρ ΡΠ° Π±ΡΠΎΡΠ΅Π²ΠΈΠΌΠ° ΡΠ° ΠΏΡΠ΅Π΄Π·Π½Π°ΠΊΠΎΠΌ ΠΈΠ»ΠΈ Π±Π΅Π· ΠΏΡΠ΅Π΄Π·Π½Π°ΠΊΠ°. ΠΠ²Π΄Π΅ Π±ΠΈΡ
ΠΆΠ΅Π»Π΅ΠΎ Π΄Π° ΠΏΡΠΈΠΌΠ΅ΡΠΈΠΌ Π΄Π° Ρ ΡΠ΅Π·ΠΈΠΊΡ Π¦, ΠΏΡΠ΅ΠΊΠΎΡΠ°ΡΠ΅ΡΠ΅ ΠΏΠΎΡΠΏΠΈΡΠ°Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ ΡΠ΅Π»ΠΎΠ³ Π±ΡΠΎΡΠ° Π΄ΠΎΠ²ΠΎΠ΄ΠΈ Π΄ΠΎ Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎΠ³ ΠΏΠΎΠ½Π°ΡΠ°ΡΠ°, ΡΠ°ΠΊΠΎ Π΄Π° Π¦Π»Π°Π½Π³ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ Π΄ΠΎΠ΄Π°ΡΠ΅ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΈ nsw
(Π±Π΅Π· ΠΏΠΎΡΠΏΠΈΡΠ°Π½ΠΎΠ³ ΠΎΠΌΠΎΡΠ°), ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈ ΠΠΠΠ-Ρ Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΡΠΈ Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΈΡΠ°ΡΠ΅ Π½ΠΈΠΊΠ°Π΄Π° Π½Π΅ ΠΏΡΠ΅Π»ΠΈΠ²Π°.
ΠΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ Π²Π°ΠΆΠ½ΠΎ Π·Π° Π½Π΅ΠΊΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π΄Π²Π΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ i16
Π½Π° 32-Π±ΠΈΡΠ½ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ (ΡΠ° 32-Π±ΠΈΡΠ½ΠΈΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΈΠΌΠ°) Π·Π°Ρ
ΡΠ΅Π²Π°, Π½Π°ΠΊΠΎΠ½ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ°, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΠΏΡΠΎΡΠΈΡΠ΅ΡΠ° Π·Π½Π°ΠΊΠ° Π΄Π° Π±ΠΈ ΠΎΡΡΠ°ΠΎ Ρ Π΄ΠΎΠΌΠ΅ΡΡ i16
. ΠΠ±ΠΎΠ³ ΡΠΎΠ³Π° ΡΠ΅ ΡΠ΅ΡΡΠΎ Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΈΡΠ΅ ΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠΈ ΡΠ΅Π»ΠΎΠ±ΡΠΎΡΠ½Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ Π²Π΅Π»ΠΈΡΠΈΠ½Π° ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΌΠ°ΡΠΈΠ½Π°.
Π¨ΡΠ° ΡΠ΅ Π΄Π°ΡΠ΅ Π΄Π΅ΡΠ°Π²Π° ΡΠ° ΠΎΠ²ΠΈΠΌ ΠΠ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π°Ρ ΡΠ°Π΄Π° Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°. ΠΠΎΠ΄ ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΡΡΠ΅ (Π°Π»ΠΈ Ρ ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎΠ³ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ Π½Π°Ρ, Π½ΠΈΡΡΠ° Π½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΎΠ²Π°Π½ΠΎ) ΠΈ Π·Π°ΡΠΈΠΌ ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΡΡΠ΅ Ρ ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΈ ΠΊΠΎΠ΄.
ΠΡΡΠ³ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ
Π‘Π»Π΅Π΄Π΅ΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΡΠΈ ΡΠ΅ΠΌΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠΈ Π±ΠΈΡΠ΅ ΠΌΠ°Π»ΠΎ ΠΊΠΎΠΌΠΏΠ»ΠΈΠΊΠΎΠ²Π°Π½ΠΈΡΠΈ. ΠΠ°ΠΈΠΌΠ΅, Π³ΠΎΠ²ΠΎΡΠΈΠΌΠΎ ΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΈ ΠΊΠΎΡΠ° ΡΠ°Π±ΠΈΡΠ° ΠΈΡΠ΅ΡΠ°ΠΊ ΡΠ΅Π»ΠΈΡ Π±ΡΠΎΡΠ΅Π²Π°:
func sum(numbers []int) int {
n := 0
for i := 0; i < len(numbers); i++ {
n += numbers[i]
}
return n
}
ΠΠ²Π°Ρ ΠΊΠΎΠ΄ ΡΠ΅ ΠΏΡΠ΅ΡΠ²Π°ΡΠ° Ρ ΡΠ»Π΅Π΄Π΅ΡΠΈ ΠΠΎ Π‘Π‘Π ΠΊΠΎΠ΄:
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
ΠΈΠ· ΠΎΠ²ΠΎΠ³ Π±Π»ΠΎΠΊΠ°. Π‘Π²Π΅ ΠΎΠ²ΠΎ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΠΈ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΠΌΠΈΡΡΠ΅ΡΠΈΠΎΠ·Π½ΠΎ, Π°Π»ΠΈ ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·Π°ΠΌ ΡΠ΅ ΠΎΠ½ΠΎ ΡΡΠΎ ΡΠΈΠ½ΠΈ Π‘Π‘Π Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅. ΠΠ· ΡΡΠ΄ΡΠΊΠ΅ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅, ΡΠ²Π΅ ΠΎΠ²ΠΎ ΡΠΈΠ½ΠΈ ΠΊΠΎΠ΄ ΡΠ΅ΡΠΊΠΈΠΌ Π·Π° ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΠ΅, Π°Π»ΠΈ ΡΠΈΡΠ΅Π½ΠΈΡΠ° Π΄Π° ΡΠ΅ ΡΠ²Π°ΠΊΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π΄ΠΎΠ΄Π΅ΡΡΡΠ΅ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π½ΠΎΠΌ ΡΠΈΠ½ΠΈ ΠΌΠ½ΠΎΠ³Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π°ΠΊΡΠΈΠΌ.
ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌΡ Π΄Π° Π°ΠΊΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ, ΠΎΠ±ΠΈΡΠ½ΠΎ Π½Π΅ΡΠ΅ΡΠ΅ ΠΌΠΎΡΠ°ΡΠΈ Π΄Π° ΡΠ΅ Π±Π°Π²ΠΈΡΠ΅ ΠΎΠ²Π°ΠΊΠ²ΠΈΠΌ ΡΡΠ²Π°ΡΠΈΠΌΠ°. Π§Π°ΠΊ Π½ΠΈ Π¦Π»Π°Π½Π³ Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΠ΅ ΡΠ²Π° ΠΎΠ²Π° ΡΠΏΡΡΡΡΠ²Π° phi
, ΠΊΠΎΡΠΈΡΡΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·Π°ΠΌ alloca
(Π»ΠΈΡΠΈ Π½Π° ΡΠ°Π΄ ΡΠ° ΠΎΠ±ΠΈΡΠ½ΠΈΠΌ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΌ Π²Π°ΡΠΈΡΠ°Π±Π»Π°ΠΌΠ°). ΠΠ°ΡΠΈΠΌ, ΠΊΠ°Π΄Π° ΡΠ΅ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ ΠΠΠΠ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠΊΠΈ ΠΏΡΠΎΠ»Π°Π· ΠΏΠΎΠ·Π²Π°Π½ alloca
ΠΏΡΠ΅ΡΠ²ΠΎΡΠ΅Π½ Ρ Π‘Π‘Π ΠΎΠ±Π»ΠΈΠΊ. Π’ΠΈΠ½ΠΈΠΠΎ, ΠΌΠ΅ΡΡΡΠΈΠΌ, ΠΏΡΠΈΠΌΠ° ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΎΠ΄ ΠΠΎ Π‘Π‘Π, ΠΊΠΎΡΠΈ ΡΠ΅, Π·Π³ΠΎΠ΄Π½ΠΎ, Π²Π΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΠ²Π°Π½ Ρ Π‘Π‘Π ΠΎΠ±Π»ΠΈΠΊ.
ΠΠΎΡ ΡΠ΅Π΄Π½Π° ΠΈΠ½ΠΎΠ²Π°ΡΠΈΡΠ° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΌΠ΅ΡΡΠΊΠΎΠ΄Π° ΠΊΠΎΡΠΈ ΡΠ΅ ΡΠ°Π·ΠΌΠ°ΡΡΠ° ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΡΡΠΏ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΠΌΠ° ΠΏΡΠ΅ΡΠ΅ΠΊΠ° ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½ Ρ ΠΎΠ±Π»ΠΈΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ΅ ΠΈΠ·ΡΠ°ΡΡΠ½Π°Π²Π°ΡΠ° Π°Π΄ΡΠ΅ΡΠ΅ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ΅ Π΄Π΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΡΡΡΠ΅Π³ ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°ΡΠ°. ΠΠ²Π΄Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Ρ ΠΠ ΠΊΠΎΠ΄ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ - 1:int
). Π£ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠΎΠΌ myAdd
ΠΎΠ²ΠΎ Π½ΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΎ. Π‘Π°Π΄Π° ΠΊΠ°Π΄Π° ΡΠΌΠΎ ΡΠΊΠ»ΠΎΠ½ΠΈΠ»ΠΈ ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΡΠ° ΠΏΡΡΠ°, Ρ
Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ ΡΡΠ° ΠΎΠ²Π°Ρ ΠΊΠΎΠ΄ ΠΏΠΎΡΡΠ°ΡΠ΅ ΠΊΠ°Π΄Π° ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΡΡΠ΅ Ρ ΠΠΠΠ ΠΠ ΠΎΠ±Π»ΠΈΠΊ:
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
Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΈ ΠΎΠ·Π½Π°ΠΊΠ΅ Π·Π°ΠΌΠ΅ΡΠ΅Π½Π΅. ΠΠΏΠ°ΠΊ, ΠΎΠ²Π΄Π΅ ΠΏΠΎΡΡΠΎΡΠΈ Π½Π΅ΡΡΠΎ Π½Π° ΡΡΠ° Π²ΡΠ΅Π΄ΠΈ ΠΎΠ±ΡΠ°ΡΠΈΡΠΈ ΠΏΠΎΡΠ΅Π±Π½Ρ ΠΏΠ°ΠΆΡΡ.
ΠΠ° ΠΏΠΎΡΠ΅ΡΠ°ΠΊ, ΠΎΠ²Π΄Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ ΠΏΠΎΡΠΏΡΠ½ΠΎ Π΄ΡΡΠ³Π°ΡΠΈΡΠΈ ΠΏΠΎΡΠΏΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΠ΅. ΠΠΠΠ Π½Π΅ ΠΏΠΎΠ΄ΡΠΆΠ°Π²Π° ΡΠ΅Π·ΠΎΠ²Π΅, ΠΈ ΠΊΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΎΠ³Π°, ΠΊΠ°ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ°, Π’ΠΈΠ½ΠΈΠΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ ΠΊΠΎΡΠΈ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΠΎ ΠΎΠ²Π°Ρ ΠΌΠ΅ΡΡΠΊΠΎΠ΄ ΠΏΠΎΠ΄Π΅Π»ΠΈΠΎ ΡΠ΅ ΠΎΠΏΠΈΡ ΠΎΠ²Π΅ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π° Π΄Π΅Π»ΠΎΠ²Π΅. ΠΠΎΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠΈ ΡΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠ΅ΡΠ΅ΠΊΠ° (ptr
, len
ΠΈ cap
) ΠΊΠ°ΠΎ ΡΡΡΡΠΊΡΡΡΠ° (ΡΡΡΡΠΊΡΡΡΠ°), Π°Π»ΠΈ ΡΠΈΡ
ΠΎΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠ΅ ΠΊΠ°ΠΎ ΡΡΠΈ ΠΎΠ΄Π²ΠΎΡΠ΅Π½Π° Π΅Π½ΡΠΈΡΠ΅ΡΠ° ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π½Π΅ΠΊΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ΅. ΠΡΡΠ³ΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈΠΎΡΠΈ ΠΌΠΎΠ³Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠΈ ΠΈΡΠ΅ΡΠ°ΠΊ Π½Π° Π΄ΡΡΠ³Π΅ Π½Π°ΡΠΈΠ½Π΅, Ρ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡΠ° ΠΏΠΎΠ·ΠΈΠ²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΠΈΡΠ½Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅.
ΠΠΎΡ ΡΠ΅Π΄Π½Π° Π·Π°Π½ΠΈΠΌΡΠΈΠ²Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΠΎΠ²ΠΎΠ³ ΠΊΠΎΠ΄Π° ΡΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ΅ getelementptr
(ΡΠ΅ΡΡΠΎ ΡΠΊΡΠ°ΡΠ΅Π½ΠΎ ΠΊΠ°ΠΎ ΠΠΠ).
ΠΠ²ΠΎ ΡΠΏΡΡΡΡΠ²ΠΎ ΡΠ°Π΄ΠΈ ΡΠ° ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°ΡΠΈΠΌΠ° ΠΈ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅ Π·Π° Π΄ΠΎΠ±ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°ΡΠ° Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠ΅ΡΠ΅ΠΊΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΎΡΠ΅Π΄ΠΈΠΌΠΎ Π³Π° ΡΠ° ΡΠ»Π΅Π΄Π΅ΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΌ Ρ Π¦:
int* sliceptr(int *ptr, int index) {
return &ptr[index];
}
ΠΠ»ΠΈ ΡΠ° ΡΠ»Π΅Π΄Π΅ΡΠΈΠΌ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΎΠΌ ΠΎΠ²ΠΎΠΌΠ΅:
int* sliceptr(int *ptr, int index) {
return ptr + index;
}
ΠΠ²Π΄Π΅ ΡΠ΅ Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΡΠ΅ Π΄Π° ΡΠΏΡΡΡΡΠ²Π° getelementptr
Π½Π΅ Π²ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ΅ Π΄Π΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ°. Π‘Π°ΠΌΠΎ ΠΈΠ·ΡΠ°ΡΡΠ½Π°Π²Π° Π½ΠΎΠ²ΠΈ ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΠΎΡΡΠΎΡΠ΅ΡΠ΅Π³. ΠΠΎΠΆΠ΅ ΡΠ΅ ΡΠ·Π΅ΡΠΈ ΠΊΠ°ΠΎ ΡΠΏΡΡΡΡΠ²Π° mul
ΠΈ add
Π½Π° Π½ΠΈΠ²ΠΎΡ Ρ
Π°ΡΠ΄Π²Π΅ΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΠΈ Π²ΠΈΡΠ΅ ΠΎ ΠΠΠ ΡΠΏΡΡΡΡΠ²ΠΈΠΌΠ°
ΠΠΎΡ ΡΠ΅Π΄Π½Π° Π·Π°Π½ΠΈΠΌΡΠΈΠ²Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΠΎΠ²ΠΎΠ³ ΠΌΠ΅ΡΡΠΊΠΎΠ΄Π° ΡΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ΅ icmp
. ΠΠ²ΠΎ ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ° ΠΎΠΏΡΡΠ΅ Π½Π°ΠΌΠ΅Π½Π΅ ΠΊΠΎΡΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΠΏΠΎΡΠ΅ΡΠ΅ΡΠ° ΡΠ΅Π»ΠΈΡ
Π±ΡΠΎΡΠ΅Π²Π°. Π Π΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° ΠΎΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ΅ ΡΠ΅ ΡΠ²Π΅ΠΊ Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΡΠΈΠΏΠ° i1
β Π»ΠΎΠ³ΠΈΡΠΊΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ, ΠΏΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΠ΅ Π²ΡΡΠΈ ΠΏΠΎΠΌΠΎΡΡ ΠΊΡΡΡΠ½Π΅ ΡΠ΅ΡΠΈ slt
(ΠΏΠΎΡΠΏΠΈΡΠ°Π½ΠΎ ΠΌΠ°ΡΠ΅ ΠΎΠ΄), ΠΏΠΎΡΡΠΎ ΡΠΏΠΎΡΠ΅ΡΡΡΠ΅ΠΌΠΎ Π΄Π²Π° Π±ΡΠΎΡΠ° ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½Π° ΡΠΈΠΏΠΎΠΌ int
. ΠΠΊΠΎ Π±ΠΈΡΠΌΠΎ ΡΠΏΠΎΡΠ΅ΡΠΈΠ²Π°Π»ΠΈ Π΄Π²Π° Π½Π΅ΠΎΠ·Π½Π°ΡΠ΅Π½Π° ΡΠ΅Π»Π° Π±ΡΠΎΡΠ°, ΠΎΠ½Π΄Π° Π±ΠΈΡΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ icmp
, Π° ΠΊΡΡΡΠ½Π° ΡΠ΅Ρ ΠΊΠΎΡΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Ρ ΠΏΠΎΡΠ΅ΡΠ΅ΡΡ Π±ΠΈ Π±ΠΈΠ»Π° ult
. ΠΠ° ΡΠΏΠΎΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ Π±ΡΠΎΡΠ΅Π²Π° ΡΠ° ΠΏΠ»ΡΡΠ°ΡΡΡΠΈΠΌ Π·Π°ΡΠ΅Π·ΠΎΠΌ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅ Π΄ΡΡΠ³Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ°, fcmp
, ΠΊΠΎΡΠΈ ΡΠ°Π΄ΠΈ Π½Π° ΡΠ»ΠΈΡΠ°Π½ Π½Π°ΡΠΈΠ½.
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ
ΠΠ΅ΡΡΡΠ΅ΠΌ Π΄Π° ΡΠ°ΠΌ Ρ ΠΎΠ²ΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»Ρ ΠΏΠΎΠΊΡΠΈΠΎ Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ΅ ΠΠΠΠ ΠΠ . ΠΠ°ΡΠ°Π²Π½ΠΎ, ΠΎΠ²Π΄Π΅ ΠΈΠΌΠ° ΡΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠ³Π°. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ, ΡΡΠ΅Π΄ΡΠ° ΡΠ΅ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΠ° ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅ ΡΠ°Π΄ΡΠΆΠ°ΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΠΏΠΎΠΌΠ΅Π½Π° ΠΊΠΎΡΠ΅ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠΊΠ΅ ΠΏΡΠΎΠ»Π°Π·Π΅ ΠΊΠ°ΠΊΠΎ Π±ΠΈ ΡΠ΅ ΡΠ·Π΅Π»Π΅ Ρ ΠΎΠ±Π·ΠΈΡ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Π΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ·Π½Π°ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΡ ΠΊΠΎΡΠ΅ ΡΠ΅ Π΄ΡΡΠ³Π°ΡΠΈΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΈΠ·ΡΠ°Π·ΠΈΡΠΈ Ρ ΠΠ . ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ²ΠΎ ΡΠ΅ Π·Π°ΡΡΠ°Π²Π° inbounds
ΠΠΠ ΡΠΏΡΡΡΡΠ²Π°, ΠΈΠ»ΠΈ Π·Π°ΡΡΠ°Π²ΠΈΡΠ΅ nsw
ΠΈ nuw
, ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄ΠΎΠ΄Π°ΡΠΈ ΡΠΏΡΡΡΡΠ²ΠΈΠΌΠ° add
. ΠΡΡΠΎ Π²Π°ΠΆΠΈ ΠΈ Π·Π° ΠΊΡΡΡΠ½Ρ ΡΠ΅Ρ private
, ΡΡΠΎ ΡΠΊΠ°Π·ΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΡ Π΄Π° ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΊΠΎΡΡ ΠΎΠ½ ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π½Π΅ΡΠ΅ Π±ΠΈΡΠΈ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°Π½Π° ΠΈΠ·Π²Π°Π½ ΡΡΠ΅Π½ΡΡΠ½Π΅ ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ΅. ΠΠ²ΠΎ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π½ΠΈΠΌΡΠΈΠ²ΠΈΡ
ΠΌΠ΅ΡΡΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°Π»Π½ΠΈΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π΅ΠΈΡΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΡ
Π°ΡΠ³ΡΠΌΠ΅Π½Π°ΡΠ°.
ΠΠΈΡΠ΅ ΠΎ ΠΠΠΠ-Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΠΈ Ρ
ΠΡΠ°Π³ΠΈ ΡΠΈΡΠ°ΠΎΡΠΈ! ΠΠ° Π»ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΠΠΠ?
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ