Skip to content

Instantly share code, notes, and snippets.

@resetius
Last active October 29, 2025 10:03
Show Gist options
  • Select an option

  • Save resetius/7d855d3551e2d2e772b9fc82bda8d1ea to your computer and use it in GitHub Desktop.

Select an option

Save resetius/7d855d3551e2d2e772b9fc82bda8d1ea to your computer and use it in GitHub Desktop.
алг
нач
| Решение Ax=b методом Гаусса с частичным выбором, нормировкой строки
| и обратным ходом с делением на диагональ. Матрица Гильберта, b=1.
| Вектор решения записывается в B. В конце выводятся нормы невязки.
| параметры
цел n
вещ Eps
n := 16
Eps := 0.000000000001 | относительный порог по масштабу строки
| данные
вещ таб A[0:n-1,0:n-1]
вещ таб B[0:0,0:n-1]
| служебные
цел i, j, k, imax, t
вещ p, tmp, bestSq, curSq, sum, rowmax, scale
| инициализация: A(i,j) = 1/(i+j+1), B(i) = 1
нц для i от 0 до n-1
нц для j от 0 до n-1
A[i,j] := 1.0 / (i + j + 1.0)
кц
B[0,i] := 1.0
кц
| прямой ход Гаусса с частичным выбором; НОРМИРУЕМ всегда
нц для k от 0 до n-1
| выбор ведущей строки по максимуму |A[i,k]|
imax := k
bestSq := A[k,k] * A[k,k]
нц для i от k+1 до n-1
curSq := A[i,k] * A[i,k]
если curSq > bestSq то
bestSq := curSq
imax := i
все
кц
| swap k <-> imax
если imax <> k то
нц для j от k до n-1
tmp := A[k,j]
A[k,j] := A[imax,j]
A[imax,j] := tmp
кц
tmp := B[0,k]; B[0,k] := B[0,imax]; B[0,imax] := tmp
все
p := A[k,k]
| относительная проверка на вырожденность: |p| <= Eps * max_j |A[k,j]|
rowmax := 0.0
нц для j от k до n-1
sum := A[k,j]; если sum < 0.0 то sum := -sum все
если sum > rowmax то rowmax := sum все
кц
scale := Eps * rowmax
sum := p; если sum < 0.0 то sum := -sum все
если sum <= scale то
| почти нулевой пивот — прекращаем исключение
все
все
| нормируем ведущую строку k
нц для j от k до n-1
A[k,j] := A[k,j] / p
кц
B[0,k] := B[0,k] / p
| исключаем ниже
нц для i от k+1 до n-1
tmp := A[i,k]
если tmp <> 0.0 то
нц для j от k до n-1
A[i,j] := A[i,j] - A[k,j] * tmp
кц
B[0,i] := B[0,i] - B[0,k] * tmp
все
кц
кц
| обратный ход: ВСЕГДА делим на диагональ (diagUnit=false)
нц для t от 0 до n-1
i := n - 1 - t
sum := B[0,i]
нц для j от i+1 до n-1
sum := sum - A[i,j] * B[0,j]
кц
если A[i,i] <> 0.0 то
B[0,i] := sum / A[i,i]
иначе
B[0,i] := 0.0
все
кц
| === расчёт невязки r = A_orig * X - 1 ===
вещ res_l2_sq, res_l2, res_inf, r, absv
res_l2_sq := 0.0
res_inf := 0.0
нц для i от 0 до n-1
sum := 0.0
нц для j от 0 до n-1
sum := sum + (1.0 / (i + j + 1.0)) * B[0,j] | A_orig * x
кц
r := sum - 1.0 | вычитаем b_orig
absv := r; если absv < 0.0 то absv := -absv все
res_l2_sq := res_l2_sq + r * r
если absv > res_inf то res_inf := absv все
кц
res_l2 := sqrt(res_l2_sq)
| выводим нормы невязки
вывод "||r||_2^2 = ", res_l2_sq, нс
вывод "||r||_2 = ", res_l2, нс
вывод "||r||_inf = ", res_inf, нс
кон
=========== IR: ============
function <main> () { ; void
block { ; succ: label(1)
label: label(0)
- tmp(0,i64) = imm(16,i64) imm(1,i64)
- tmp(1,i64) = tmp(0,i64) imm(0,i64)
+ tmp(2,i64) = tmp(1,i64) imm(1,i64)
* tmp(3,i64) = imm(1,i64) tmp(2,i64)
- tmp(4,i64) = imm(16,i64) imm(1,i64)
- tmp(5,i64) = tmp(4,i64) imm(0,i64)
+ tmp(6,i64) = tmp(5,i64) imm(1,i64)
* tmp(7,i64) = imm(1,i64) tmp(2,i64)
* tmp(8,i64) = tmp(7,i64) tmp(6,i64)
* tmp(9,i64) = tmp(8,i64) imm(8,i64)
arg tmp(9,i64)
call tmp(10,ptr to f64) = array_create
- tmp(11,i64) = imm(16,i64) imm(1,i64)
- tmp(12,i64) = tmp(11,i64) imm(0,i64)
+ tmp(13,i64) = tmp(12,i64) imm(1,i64)
* tmp(14,i64) = imm(1,i64) tmp(13,i64)
- tmp(15,i64) = imm(0,i64) imm(0,i64)
+ tmp(16,i64) = tmp(15,i64) imm(1,i64)
* tmp(17,i64) = imm(1,i64) tmp(13,i64)
* tmp(18,i64) = tmp(17,i64) tmp(16,i64)
* tmp(19,i64) = tmp(18,i64) imm(8,i64)
arg tmp(19,i64)
call tmp(20,ptr to f64) = array_create
- tmp(21,i64) = imm(16,i64) imm(1,i64)
+ tmp(22,i64) = tmp(21,i64) imm(1,i64)
jmp label(1)
}
block { ; succ: label(2), label(5) ; pred: label(0), label(4)
label: label(1)
phi tmp(23,i64) = imm(0,i64) label(0) tmp(24,i64) label(4)
!= tmp(25,i1) = tmp(23,i64) tmp(22,i64)
cmp tmp(25,i1) label(2) label(5)
}
block { ; succ: label(3) ; pred: label(1)
label: label(2)
jmp label(3)
}
block { ; succ: label(6) ; pred: label(2)
label: label(3)
- tmp(26,i64) = imm(16,i64) imm(1,i64)
+ tmp(27,i64) = tmp(26,i64) imm(1,i64)
jmp label(6)
}
block { ; succ: label(1) ; pred: label(10)
label: label(4)
+ tmp(24,i64) = tmp(23,i64) imm(1,i64)
jmp label(1)
}
block { ; succ: label(7), label(10) ; pred: label(3), label(9)
label: label(6)
phi tmp(28,i64) = imm(0,i64) label(3) tmp(29,i64) label(9)
!= tmp(30,i1) = tmp(28,i64) tmp(27,i64)
cmp tmp(30,i1) label(7) label(10)
}
block { ; succ: label(8) ; pred: label(6)
label: label(7)
jmp label(8)
}
block { ; succ: label(9) ; pred: label(7)
label: label(8)
- tmp(31,i64) = tmp(28,i64) imm(0,i64)
- tmp(32,i64) = tmp(23,i64) imm(0,i64)
* tmp(33,i64) = tmp(32,i64) tmp(3,i64)
+ tmp(34,i64) = tmp(33,i64) tmp(31,i64)
* tmp(35,i64) = tmp(34,i64) imm(8,i64)
+ tmp(36,ptr to f64) = tmp(10,ptr to f64) tmp(35,i64)
+ tmp(37,i64) = tmp(23,i64) tmp(28,i64)
i2f tmp(38,f64) = tmp(37,i64)
+ tmp(39,f64) = tmp(38,f64) imm(4607182418800017408,f64)
/ tmp(40,f64) = imm(4607182418800017408,f64) tmp(39,f64)
ste tmp(36,ptr to f64) tmp(40,f64)
jmp label(9)
}
block { ; succ: label(6) ; pred: label(8)
label: label(9)
+ tmp(29,i64) = tmp(28,i64) imm(1,i64)
jmp label(6)
}
block { ; succ: label(4) ; pred: label(6)
label: label(10)
- tmp(41,i64) = tmp(23,i64) imm(0,i64)
- tmp(42,i64) = imm(0,i64) imm(0,i64)
* tmp(43,i64) = tmp(42,i64) tmp(14,i64)
+ tmp(44,i64) = tmp(43,i64) tmp(41,i64)
* tmp(45,i64) = tmp(44,i64) imm(8,i64)
+ tmp(46,ptr to f64) = tmp(20,ptr to f64) tmp(45,i64)
ste tmp(46,ptr to f64) imm(4607182418800017408,f64)
jmp label(4)
}
block { ; succ: label(11) ; pred: label(1)
label: label(5)
- tmp(47,i64) = imm(16,i64) imm(1,i64)
+ tmp(48,i64) = tmp(47,i64) imm(1,i64)
jmp label(11)
}
block { ; succ: label(12), label(15) ; pred: label(5), label(14)
label: label(11)
phi tmp(49,i64) = imm(0,i64) label(5) tmp(50,i64) label(14)
!= tmp(51,i1) = tmp(49,i64) tmp(48,i64)
cmp tmp(51,i1) label(12) label(15)
}
block { ; succ: label(13) ; pred: label(11)
label: label(12)
jmp label(13)
}
block { ; succ: label(16) ; pred: label(12)
label: label(13)
- tmp(52,i64) = tmp(49,i64) imm(0,i64)
- tmp(53,i64) = tmp(49,i64) imm(0,i64)
* tmp(54,i64) = tmp(53,i64) tmp(3,i64)
+ tmp(55,i64) = tmp(54,i64) tmp(52,i64)
* tmp(56,i64) = tmp(55,i64) imm(8,i64)
+ tmp(57,ptr to f64) = tmp(10,ptr to f64) tmp(56,i64)
lde tmp(58,f64) = tmp(57,ptr to f64)
- tmp(59,i64) = tmp(49,i64) imm(0,i64)
- tmp(60,i64) = tmp(49,i64) imm(0,i64)
* tmp(61,i64) = tmp(60,i64) tmp(3,i64)
+ tmp(62,i64) = tmp(61,i64) tmp(59,i64)
* tmp(63,i64) = tmp(62,i64) imm(8,i64)
+ tmp(64,ptr to f64) = tmp(10,ptr to f64) tmp(63,i64)
lde tmp(65,f64) = tmp(64,ptr to f64)
* tmp(66,f64) = tmp(58,f64) tmp(65,f64)
+ tmp(67,i64) = tmp(49,i64) imm(1,i64)
- tmp(68,i64) = imm(16,i64) imm(1,i64)
+ tmp(69,i64) = tmp(68,i64) imm(1,i64)
jmp label(16)
}
block { ; succ: label(11) ; pred: label(58)
label: label(14)
+ tmp(50,i64) = tmp(49,i64) imm(1,i64)
jmp label(11)
}
block { ; succ: label(17), label(20) ; pred: label(13), label(19)
label: label(16)
phi tmp(70,i64) = tmp(67,i64) label(13) tmp(71,i64) label(19)
phi tmp(72,i64) = tmp(49,i64) label(13) tmp(73,i64) label(19)
phi tmp(74,f64) = tmp(66,f64) label(13) tmp(75,f64) label(19)
!= tmp(76,i1) = tmp(70,i64) tmp(69,i64)
cmp tmp(76,i1) label(17) label(20)
}
block { ; succ: label(18) ; pred: label(16)
label: label(17)
jmp label(18)
}
block { ; succ: label(21), label(22) ; pred: label(17)
label: label(18)
- tmp(77,i64) = tmp(49,i64) imm(0,i64)
- tmp(78,i64) = tmp(70,i64) imm(0,i64)
* tmp(79,i64) = tmp(78,i64) tmp(3,i64)
+ tmp(80,i64) = tmp(79,i64) tmp(77,i64)
* tmp(81,i64) = tmp(80,i64) imm(8,i64)
+ tmp(82,ptr to f64) = tmp(10,ptr to f64) tmp(81,i64)
lde tmp(83,f64) = tmp(82,ptr to f64)
- tmp(84,i64) = tmp(49,i64) imm(0,i64)
- tmp(85,i64) = tmp(70,i64) imm(0,i64)
* tmp(86,i64) = tmp(85,i64) tmp(3,i64)
+ tmp(87,i64) = tmp(86,i64) tmp(84,i64)
* tmp(88,i64) = tmp(87,i64) imm(8,i64)
+ tmp(89,ptr to f64) = tmp(10,ptr to f64) tmp(88,i64)
lde tmp(90,f64) = tmp(89,ptr to f64)
* tmp(91,f64) = tmp(83,f64) tmp(90,f64)
> tmp(92,i1) = tmp(91,f64) tmp(74,f64)
cmp tmp(92,i1) label(21) label(22)
}
block { ; succ: label(16) ; pred: label(23)
label: label(19)
+ tmp(71,i64) = tmp(70,i64) imm(1,i64)
jmp label(16)
}
block { ; succ: label(23) ; pred: label(18)
label: label(21)
jmp label(23)
}
block { ; succ: label(23) ; pred: label(18)
label: label(22)
jmp label(23)
}
block { ; succ: label(19) ; pred: label(21), label(22)
label: label(23)
phi tmp(73,i64) = tmp(70,i64) label(21) tmp(72,i64) label(22)
phi tmp(75,f64) = tmp(91,f64) label(21) tmp(74,f64) label(22)
jmp label(19)
}
block { ; succ: label(24), label(25) ; pred: label(16)
label: label(20)
!= tmp(93,i1) = tmp(72,i64) tmp(49,i64)
cmp tmp(93,i1) label(24) label(25)
}
block { ; succ: label(27) ; pred: label(20)
label: label(24)
- tmp(94,i64) = imm(16,i64) imm(1,i64)
+ tmp(95,i64) = tmp(94,i64) imm(1,i64)
jmp label(27)
}
block { ; succ: label(26) ; pred: label(20)
label: label(25)
jmp label(26)
}
block { ; succ: label(28), label(31) ; pred: label(24), label(30)
label: label(27)
phi tmp(96,i64) = tmp(49,i64) label(24) tmp(97,i64) label(30)
!= tmp(98,i1) = tmp(96,i64) tmp(95,i64)
cmp tmp(98,i1) label(28) label(31)
}
block { ; succ: label(29) ; pred: label(27)
label: label(28)
jmp label(29)
}
block { ; succ: label(30) ; pred: label(28)
label: label(29)
- tmp(99,i64) = tmp(96,i64) imm(0,i64)
- tmp(100,i64) = tmp(49,i64) imm(0,i64)
* tmp(101,i64) = tmp(100,i64) tmp(3,i64)
+ tmp(102,i64) = tmp(101,i64) tmp(99,i64)
* tmp(103,i64) = tmp(102,i64) imm(8,i64)
+ tmp(104,ptr to f64) = tmp(10,ptr to f64) tmp(103,i64)
lde tmp(105,f64) = tmp(104,ptr to f64)
- tmp(106,i64) = tmp(96,i64) imm(0,i64)
- tmp(107,i64) = tmp(49,i64) imm(0,i64)
* tmp(108,i64) = tmp(107,i64) tmp(3,i64)
+ tmp(109,i64) = tmp(108,i64) tmp(106,i64)
* tmp(110,i64) = tmp(109,i64) imm(8,i64)
+ tmp(111,ptr to f64) = tmp(10,ptr to f64) tmp(110,i64)
- tmp(112,i64) = tmp(96,i64) imm(0,i64)
- tmp(113,i64) = tmp(72,i64) imm(0,i64)
* tmp(114,i64) = tmp(113,i64) tmp(3,i64)
+ tmp(115,i64) = tmp(114,i64) tmp(112,i64)
* tmp(116,i64) = tmp(115,i64) imm(8,i64)
+ tmp(117,ptr to f64) = tmp(10,ptr to f64) tmp(116,i64)
lde tmp(118,f64) = tmp(117,ptr to f64)
ste tmp(111,ptr to f64) tmp(118,f64)
- tmp(119,i64) = tmp(96,i64) imm(0,i64)
- tmp(120,i64) = tmp(72,i64) imm(0,i64)
* tmp(121,i64) = tmp(120,i64) tmp(3,i64)
+ tmp(122,i64) = tmp(121,i64) tmp(119,i64)
* tmp(123,i64) = tmp(122,i64) imm(8,i64)
+ tmp(124,ptr to f64) = tmp(10,ptr to f64) tmp(123,i64)
ste tmp(124,ptr to f64) tmp(105,f64)
jmp label(30)
}
block { ; succ: label(27) ; pred: label(29)
label: label(30)
+ tmp(97,i64) = tmp(96,i64) imm(1,i64)
jmp label(27)
}
block { ; succ: label(26) ; pred: label(27)
label: label(31)
- tmp(125,i64) = tmp(49,i64) imm(0,i64)
- tmp(126,i64) = imm(0,i64) imm(0,i64)
* tmp(127,i64) = tmp(126,i64) tmp(14,i64)
+ tmp(128,i64) = tmp(127,i64) tmp(125,i64)
* tmp(129,i64) = tmp(128,i64) imm(8,i64)
+ tmp(130,ptr to f64) = tmp(20,ptr to f64) tmp(129,i64)
lde tmp(131,f64) = tmp(130,ptr to f64)
- tmp(132,i64) = tmp(49,i64) imm(0,i64)
- tmp(133,i64) = imm(0,i64) imm(0,i64)
* tmp(134,i64) = tmp(133,i64) tmp(14,i64)
+ tmp(135,i64) = tmp(134,i64) tmp(132,i64)
* tmp(136,i64) = tmp(135,i64) imm(8,i64)
+ tmp(137,ptr to f64) = tmp(20,ptr to f64) tmp(136,i64)
- tmp(138,i64) = tmp(72,i64) imm(0,i64)
- tmp(139,i64) = imm(0,i64) imm(0,i64)
* tmp(140,i64) = tmp(139,i64) tmp(14,i64)
+ tmp(141,i64) = tmp(140,i64) tmp(138,i64)
* tmp(142,i64) = tmp(141,i64) imm(8,i64)
+ tmp(143,ptr to f64) = tmp(20,ptr to f64) tmp(142,i64)
lde tmp(144,f64) = tmp(143,ptr to f64)
ste tmp(137,ptr to f64) tmp(144,f64)
- tmp(145,i64) = tmp(72,i64) imm(0,i64)
- tmp(146,i64) = imm(0,i64) imm(0,i64)
* tmp(147,i64) = tmp(146,i64) tmp(14,i64)
+ tmp(148,i64) = tmp(147,i64) tmp(145,i64)
* tmp(149,i64) = tmp(148,i64) imm(8,i64)
+ tmp(150,ptr to f64) = tmp(20,ptr to f64) tmp(149,i64)
ste tmp(150,ptr to f64) tmp(131,f64)
jmp label(26)
}
block { ; succ: label(32) ; pred: label(25), label(31)
label: label(26)
- tmp(151,i64) = tmp(49,i64) imm(0,i64)
- tmp(152,i64) = tmp(49,i64) imm(0,i64)
* tmp(153,i64) = tmp(152,i64) tmp(3,i64)
+ tmp(154,i64) = tmp(153,i64) tmp(151,i64)
* tmp(155,i64) = tmp(154,i64) imm(8,i64)
+ tmp(156,ptr to f64) = tmp(10,ptr to f64) tmp(155,i64)
lde tmp(157,f64) = tmp(156,ptr to f64)
- tmp(158,i64) = imm(16,i64) imm(1,i64)
+ tmp(159,i64) = tmp(158,i64) imm(1,i64)
jmp label(32)
}
block { ; succ: label(33), label(36) ; pred: label(26), label(35)
label: label(32)
phi tmp(160,i64) = tmp(49,i64) label(26) tmp(161,i64) label(35)
phi tmp(162,f64) = imm(0,f64) label(26) tmp(163,f64) label(35)
!= tmp(164,i1) = tmp(160,i64) tmp(159,i64)
cmp tmp(164,i1) label(33) label(36)
}
block { ; succ: label(34) ; pred: label(32)
label: label(33)
jmp label(34)
}
block { ; succ: label(37), label(38) ; pred: label(33)
label: label(34)
- tmp(165,i64) = tmp(160,i64) imm(0,i64)
- tmp(166,i64) = tmp(49,i64) imm(0,i64)
* tmp(167,i64) = tmp(166,i64) tmp(3,i64)
+ tmp(168,i64) = tmp(167,i64) tmp(165,i64)
* tmp(169,i64) = tmp(168,i64) imm(8,i64)
+ tmp(170,ptr to f64) = tmp(10,ptr to f64) tmp(169,i64)
lde tmp(171,f64) = tmp(170,ptr to f64)
< tmp(172,i1) = tmp(171,f64) imm(0,f64)
cmp tmp(172,i1) label(37) label(38)
}
block { ; succ: label(32) ; pred: label(42)
label: label(35)
+ tmp(161,i64) = tmp(160,i64) imm(1,i64)
jmp label(32)
}
block { ; succ: label(39) ; pred: label(34)
label: label(37)
neg tmp(173,f64) = tmp(171,f64)
jmp label(39)
}
block { ; succ: label(39) ; pred: label(34)
label: label(38)
jmp label(39)
}
block { ; succ: label(40), label(41) ; pred: label(37), label(38)
label: label(39)
phi tmp(174,f64) = tmp(173,f64) label(37) tmp(171,f64) label(38)
> tmp(175,i1) = tmp(174,f64) tmp(162,f64)
cmp tmp(175,i1) label(40) label(41)
}
block { ; succ: label(42) ; pred: label(39)
label: label(40)
jmp label(42)
}
block { ; succ: label(42) ; pred: label(39)
label: label(41)
jmp label(42)
}
block { ; succ: label(35) ; pred: label(40), label(41)
label: label(42)
phi tmp(163,f64) = tmp(174,f64) label(40) tmp(162,f64) label(41)
jmp label(35)
}
block { ; succ: label(43), label(44) ; pred: label(32)
label: label(36)
* tmp(176,f64) = imm(-4749153094799322729,f64) tmp(162,f64)
< tmp(177,i1) = tmp(157,f64) imm(0,f64)
cmp tmp(177,i1) label(43) label(44)
}
block { ; succ: label(45) ; pred: label(36)
label: label(43)
neg tmp(178,f64) = tmp(157,f64)
jmp label(45)
}
block { ; succ: label(45) ; pred: label(36)
label: label(44)
jmp label(45)
}
block { ; succ: label(46), label(47) ; pred: label(43), label(44)
label: label(45)
phi tmp(179,f64) = tmp(178,f64) label(43) tmp(157,f64) label(44)
<= tmp(180,i1) = tmp(179,f64) tmp(176,f64)
cmp tmp(180,i1) label(46) label(47)
}
block { ; succ: label(48) ; pred: label(45)
label: label(46)
jmp label(48)
}
block { ; succ: label(48) ; pred: label(45)
label: label(47)
jmp label(48)
}
block { ; succ: label(49) ; pred: label(46), label(47)
label: label(48)
jmp label(15)
- tmp(181,i64) = imm(16,i64) imm(1,i64)
+ tmp(182,i64) = tmp(181,i64) imm(1,i64)
jmp label(49)
}
block { ; succ: label(50), label(53) ; pred: label(48), label(52)
label: label(49)
phi tmp(183,i64) = tmp(49,i64) label(48) tmp(184,i64) label(52)
!= tmp(185,i1) = tmp(183,i64) tmp(182,i64)
cmp tmp(185,i1) label(50) label(53)
}
block { ; succ: label(51) ; pred: label(49)
label: label(50)
jmp label(51)
}
block { ; succ: label(52) ; pred: label(50)
label: label(51)
- tmp(186,i64) = tmp(183,i64) imm(0,i64)
- tmp(187,i64) = tmp(49,i64) imm(0,i64)
* tmp(188,i64) = tmp(187,i64) tmp(3,i64)
+ tmp(189,i64) = tmp(188,i64) tmp(186,i64)
* tmp(190,i64) = tmp(189,i64) imm(8,i64)
+ tmp(191,ptr to f64) = tmp(10,ptr to f64) tmp(190,i64)
- tmp(192,i64) = tmp(183,i64) imm(0,i64)
- tmp(193,i64) = tmp(49,i64) imm(0,i64)
* tmp(194,i64) = tmp(193,i64) tmp(3,i64)
+ tmp(195,i64) = tmp(194,i64) tmp(192,i64)
* tmp(196,i64) = tmp(195,i64) imm(8,i64)
+ tmp(197,ptr to f64) = tmp(10,ptr to f64) tmp(196,i64)
lde tmp(198,f64) = tmp(197,ptr to f64)
/ tmp(199,f64) = tmp(198,f64) tmp(157,f64)
ste tmp(191,ptr to f64) tmp(199,f64)
jmp label(52)
}
block { ; succ: label(49) ; pred: label(51)
label: label(52)
+ tmp(184,i64) = tmp(183,i64) imm(1,i64)
jmp label(49)
}
block { ; succ: label(54) ; pred: label(49)
label: label(53)
- tmp(200,i64) = tmp(49,i64) imm(0,i64)
- tmp(201,i64) = imm(0,i64) imm(0,i64)
* tmp(202,i64) = tmp(201,i64) tmp(14,i64)
+ tmp(203,i64) = tmp(202,i64) tmp(200,i64)
* tmp(204,i64) = tmp(203,i64) imm(8,i64)
+ tmp(205,ptr to f64) = tmp(20,ptr to f64) tmp(204,i64)
- tmp(206,i64) = tmp(49,i64) imm(0,i64)
- tmp(207,i64) = imm(0,i64) imm(0,i64)
* tmp(208,i64) = tmp(207,i64) tmp(14,i64)
+ tmp(209,i64) = tmp(208,i64) tmp(206,i64)
* tmp(210,i64) = tmp(209,i64) imm(8,i64)
+ tmp(211,ptr to f64) = tmp(20,ptr to f64) tmp(210,i64)
lde tmp(212,f64) = tmp(211,ptr to f64)
/ tmp(213,f64) = tmp(212,f64) tmp(157,f64)
ste tmp(205,ptr to f64) tmp(213,f64)
+ tmp(214,i64) = tmp(49,i64) imm(1,i64)
- tmp(215,i64) = imm(16,i64) imm(1,i64)
+ tmp(216,i64) = tmp(215,i64) imm(1,i64)
jmp label(54)
}
block { ; succ: label(55), label(58) ; pred: label(53), label(57)
label: label(54)
phi tmp(217,i64) = tmp(214,i64) label(53) tmp(218,i64) label(57)
!= tmp(219,i1) = tmp(217,i64) tmp(216,i64)
cmp tmp(219,i1) label(55) label(58)
}
block { ; succ: label(56) ; pred: label(54)
label: label(55)
jmp label(56)
}
block { ; succ: label(59), label(60) ; pred: label(55)
label: label(56)
- tmp(220,i64) = tmp(49,i64) imm(0,i64)
- tmp(221,i64) = tmp(217,i64) imm(0,i64)
* tmp(222,i64) = tmp(221,i64) tmp(3,i64)
+ tmp(223,i64) = tmp(222,i64) tmp(220,i64)
* tmp(224,i64) = tmp(223,i64) imm(8,i64)
+ tmp(225,ptr to f64) = tmp(10,ptr to f64) tmp(224,i64)
lde tmp(226,f64) = tmp(225,ptr to f64)
!= tmp(227,i1) = tmp(226,f64) imm(0,f64)
cmp tmp(227,i1) label(59) label(60)
}
block { ; succ: label(54) ; pred: label(61)
label: label(57)
+ tmp(218,i64) = tmp(217,i64) imm(1,i64)
jmp label(54)
}
block { ; succ: label(62) ; pred: label(56)
label: label(59)
- tmp(228,i64) = imm(16,i64) imm(1,i64)
+ tmp(229,i64) = tmp(228,i64) imm(1,i64)
jmp label(62)
}
block { ; succ: label(61) ; pred: label(56)
label: label(60)
jmp label(61)
}
block { ; succ: label(63), label(66) ; pred: label(59), label(65)
label: label(62)
phi tmp(230,i64) = tmp(49,i64) label(59) tmp(231,i64) label(65)
!= tmp(232,i1) = tmp(230,i64) tmp(229,i64)
cmp tmp(232,i1) label(63) label(66)
}
block { ; succ: label(64) ; pred: label(62)
label: label(63)
jmp label(64)
}
block { ; succ: label(65) ; pred: label(63)
label: label(64)
- tmp(233,i64) = tmp(230,i64) imm(0,i64)
- tmp(234,i64) = tmp(217,i64) imm(0,i64)
* tmp(235,i64) = tmp(234,i64) tmp(3,i64)
+ tmp(236,i64) = tmp(235,i64) tmp(233,i64)
* tmp(237,i64) = tmp(236,i64) imm(8,i64)
+ tmp(238,ptr to f64) = tmp(10,ptr to f64) tmp(237,i64)
- tmp(239,i64) = tmp(230,i64) imm(0,i64)
- tmp(240,i64) = tmp(217,i64) imm(0,i64)
* tmp(241,i64) = tmp(240,i64) tmp(3,i64)
+ tmp(242,i64) = tmp(241,i64) tmp(239,i64)
* tmp(243,i64) = tmp(242,i64) imm(8,i64)
+ tmp(244,ptr to f64) = tmp(10,ptr to f64) tmp(243,i64)
lde tmp(245,f64) = tmp(244,ptr to f64)
- tmp(246,i64) = tmp(230,i64) imm(0,i64)
- tmp(247,i64) = tmp(49,i64) imm(0,i64)
* tmp(248,i64) = tmp(247,i64) tmp(3,i64)
+ tmp(249,i64) = tmp(248,i64) tmp(246,i64)
* tmp(250,i64) = tmp(249,i64) imm(8,i64)
+ tmp(251,ptr to f64) = tmp(10,ptr to f64) tmp(250,i64)
lde tmp(252,f64) = tmp(251,ptr to f64)
* tmp(253,f64) = tmp(252,f64) tmp(226,f64)
- tmp(254,f64) = tmp(245,f64) tmp(253,f64)
ste tmp(238,ptr to f64) tmp(254,f64)
jmp label(65)
}
block { ; succ: label(62) ; pred: label(64)
label: label(65)
+ tmp(231,i64) = tmp(230,i64) imm(1,i64)
jmp label(62)
}
block { ; succ: label(61) ; pred: label(62)
label: label(66)
- tmp(255,i64) = tmp(217,i64) imm(0,i64)
- tmp(256,i64) = imm(0,i64) imm(0,i64)
* tmp(257,i64) = tmp(256,i64) tmp(14,i64)
+ tmp(258,i64) = tmp(257,i64) tmp(255,i64)
* tmp(259,i64) = tmp(258,i64) imm(8,i64)
+ tmp(260,ptr to f64) = tmp(20,ptr to f64) tmp(259,i64)
- tmp(261,i64) = tmp(217,i64) imm(0,i64)
- tmp(262,i64) = imm(0,i64) imm(0,i64)
* tmp(263,i64) = tmp(262,i64) tmp(14,i64)
+ tmp(264,i64) = tmp(263,i64) tmp(261,i64)
* tmp(265,i64) = tmp(264,i64) imm(8,i64)
+ tmp(266,ptr to f64) = tmp(20,ptr to f64) tmp(265,i64)
lde tmp(267,f64) = tmp(266,ptr to f64)
- tmp(268,i64) = tmp(49,i64) imm(0,i64)
- tmp(269,i64) = imm(0,i64) imm(0,i64)
* tmp(270,i64) = tmp(269,i64) tmp(14,i64)
+ tmp(271,i64) = tmp(270,i64) tmp(268,i64)
* tmp(272,i64) = tmp(271,i64) imm(8,i64)
+ tmp(273,ptr to f64) = tmp(20,ptr to f64) tmp(272,i64)
lde tmp(274,f64) = tmp(273,ptr to f64)
* tmp(275,f64) = tmp(274,f64) tmp(226,f64)
- tmp(276,f64) = tmp(267,f64) tmp(275,f64)
ste tmp(260,ptr to f64) tmp(276,f64)
jmp label(61)
}
block { ; succ: label(57) ; pred: label(60), label(66)
label: label(61)
jmp label(57)
}
block { ; succ: label(14) ; pred: label(54)
label: label(58)
jmp label(14)
}
block { ; succ: label(67) ; pred: label(11)
label: label(15)
- tmp(277,i64) = imm(16,i64) imm(1,i64)
+ tmp(278,i64) = tmp(277,i64) imm(1,i64)
jmp label(67)
}
block { ; succ: label(68), label(71) ; pred: label(15), label(70)
label: label(67)
phi tmp(279,i64) = imm(0,i64) label(15) tmp(280,i64) label(70)
!= tmp(281,i1) = tmp(279,i64) tmp(278,i64)
cmp tmp(281,i1) label(68) label(71)
}
block { ; succ: label(69) ; pred: label(67)
label: label(68)
jmp label(69)
}
block { ; succ: label(72) ; pred: label(68)
label: label(69)
- tmp(282,i64) = imm(16,i64) imm(1,i64)
- tmp(283,i64) = tmp(282,i64) tmp(279,i64)
- tmp(284,i64) = tmp(283,i64) imm(0,i64)
- tmp(285,i64) = imm(0,i64) imm(0,i64)
* tmp(286,i64) = tmp(285,i64) tmp(14,i64)
+ tmp(287,i64) = tmp(286,i64) tmp(284,i64)
* tmp(288,i64) = tmp(287,i64) imm(8,i64)
+ tmp(289,ptr to f64) = tmp(20,ptr to f64) tmp(288,i64)
lde tmp(290,f64) = tmp(289,ptr to f64)
+ tmp(291,i64) = tmp(283,i64) imm(1,i64)
- tmp(292,i64) = imm(16,i64) imm(1,i64)
+ tmp(293,i64) = tmp(292,i64) imm(1,i64)
jmp label(72)
}
block { ; succ: label(67) ; pred: label(79)
label: label(70)
+ tmp(280,i64) = tmp(279,i64) imm(1,i64)
jmp label(67)
}
block { ; succ: label(73), label(76) ; pred: label(69), label(75)
label: label(72)
phi tmp(294,i64) = tmp(291,i64) label(69) tmp(295,i64) label(75)
phi tmp(296,f64) = tmp(290,f64) label(69) tmp(297,f64) label(75)
!= tmp(298,i1) = tmp(294,i64) tmp(293,i64)
cmp tmp(298,i1) label(73) label(76)
}
block { ; succ: label(74) ; pred: label(72)
label: label(73)
jmp label(74)
}
block { ; succ: label(75) ; pred: label(73)
label: label(74)
- tmp(299,i64) = tmp(294,i64) imm(0,i64)
- tmp(300,i64) = tmp(283,i64) imm(0,i64)
* tmp(301,i64) = tmp(300,i64) tmp(3,i64)
+ tmp(302,i64) = tmp(301,i64) tmp(299,i64)
* tmp(303,i64) = tmp(302,i64) imm(8,i64)
+ tmp(304,ptr to f64) = tmp(10,ptr to f64) tmp(303,i64)
lde tmp(305,f64) = tmp(304,ptr to f64)
- tmp(306,i64) = tmp(294,i64) imm(0,i64)
- tmp(307,i64) = imm(0,i64) imm(0,i64)
* tmp(308,i64) = tmp(307,i64) tmp(14,i64)
+ tmp(309,i64) = tmp(308,i64) tmp(306,i64)
* tmp(310,i64) = tmp(309,i64) imm(8,i64)
+ tmp(311,ptr to f64) = tmp(20,ptr to f64) tmp(310,i64)
lde tmp(312,f64) = tmp(311,ptr to f64)
* tmp(313,f64) = tmp(305,f64) tmp(312,f64)
- tmp(297,f64) = tmp(296,f64) tmp(313,f64)
jmp label(75)
}
block { ; succ: label(72) ; pred: label(74)
label: label(75)
+ tmp(295,i64) = tmp(294,i64) imm(1,i64)
jmp label(72)
}
block { ; succ: label(77), label(78) ; pred: label(72)
label: label(76)
- tmp(314,i64) = tmp(283,i64) imm(0,i64)
- tmp(315,i64) = tmp(283,i64) imm(0,i64)
* tmp(316,i64) = tmp(315,i64) tmp(3,i64)
+ tmp(317,i64) = tmp(316,i64) tmp(314,i64)
* tmp(318,i64) = tmp(317,i64) imm(8,i64)
+ tmp(319,ptr to f64) = tmp(10,ptr to f64) tmp(318,i64)
lde tmp(320,f64) = tmp(319,ptr to f64)
!= tmp(321,i1) = tmp(320,f64) imm(0,f64)
cmp tmp(321,i1) label(77) label(78)
}
block { ; succ: label(79) ; pred: label(76)
label: label(77)
- tmp(322,i64) = tmp(283,i64) imm(0,i64)
- tmp(323,i64) = imm(0,i64) imm(0,i64)
* tmp(324,i64) = tmp(323,i64) tmp(14,i64)
+ tmp(325,i64) = tmp(324,i64) tmp(322,i64)
* tmp(326,i64) = tmp(325,i64) imm(8,i64)
+ tmp(327,ptr to f64) = tmp(20,ptr to f64) tmp(326,i64)
- tmp(328,i64) = tmp(283,i64) imm(0,i64)
- tmp(329,i64) = tmp(283,i64) imm(0,i64)
* tmp(330,i64) = tmp(329,i64) tmp(3,i64)
+ tmp(331,i64) = tmp(330,i64) tmp(328,i64)
* tmp(332,i64) = tmp(331,i64) imm(8,i64)
+ tmp(333,ptr to f64) = tmp(10,ptr to f64) tmp(332,i64)
lde tmp(334,f64) = tmp(333,ptr to f64)
/ tmp(335,f64) = tmp(296,f64) tmp(334,f64)
ste tmp(327,ptr to f64) tmp(335,f64)
jmp label(79)
}
block { ; succ: label(79) ; pred: label(76)
label: label(78)
- tmp(336,i64) = tmp(283,i64) imm(0,i64)
- tmp(337,i64) = imm(0,i64) imm(0,i64)
* tmp(338,i64) = tmp(337,i64) tmp(14,i64)
+ tmp(339,i64) = tmp(338,i64) tmp(336,i64)
* tmp(340,i64) = tmp(339,i64) imm(8,i64)
+ tmp(341,ptr to f64) = tmp(20,ptr to f64) tmp(340,i64)
ste tmp(341,ptr to f64) imm(0,f64)
jmp label(79)
}
block { ; succ: label(70) ; pred: label(77), label(78)
label: label(79)
jmp label(70)
}
block { ; succ: label(80) ; pred: label(67)
label: label(71)
- tmp(342,i64) = imm(16,i64) imm(1,i64)
+ tmp(343,i64) = tmp(342,i64) imm(1,i64)
jmp label(80)
}
block { ; succ: label(81), label(84) ; pred: label(71), label(83)
label: label(80)
phi tmp(344,i64) = imm(0,i64) label(71) tmp(345,i64) label(83)
phi tmp(346,f64) = imm(0,f64) label(71) tmp(347,f64) label(83)
phi tmp(348,f64) = imm(0,f64) label(71) tmp(349,f64) label(83)
!= tmp(350,i1) = tmp(344,i64) tmp(343,i64)
cmp tmp(350,i1) label(81) label(84)
}
block { ; succ: label(82) ; pred: label(80)
label: label(81)
jmp label(82)
}
block { ; succ: label(85) ; pred: label(81)
label: label(82)
- tmp(351,i64) = imm(16,i64) imm(1,i64)
+ tmp(352,i64) = tmp(351,i64) imm(1,i64)
jmp label(85)
}
block { ; succ: label(80) ; pred: label(95)
label: label(83)
+ tmp(345,i64) = tmp(344,i64) imm(1,i64)
jmp label(80)
}
block { ; succ: label(86), label(89) ; pred: label(82), label(88)
label: label(85)
phi tmp(353,i64) = imm(0,i64) label(82) tmp(354,i64) label(88)
phi tmp(355,f64) = imm(0,f64) label(82) tmp(356,f64) label(88)
!= tmp(357,i1) = tmp(353,i64) tmp(352,i64)
cmp tmp(357,i1) label(86) label(89)
}
block { ; succ: label(87) ; pred: label(85)
label: label(86)
jmp label(87)
}
block { ; succ: label(88) ; pred: label(86)
label: label(87)
+ tmp(358,i64) = tmp(344,i64) tmp(353,i64)
i2f tmp(359,f64) = tmp(358,i64)
+ tmp(360,f64) = tmp(359,f64) imm(4607182418800017408,f64)
/ tmp(361,f64) = imm(4607182418800017408,f64) tmp(360,f64)
- tmp(362,i64) = tmp(353,i64) imm(0,i64)
- tmp(363,i64) = imm(0,i64) imm(0,i64)
* tmp(364,i64) = tmp(363,i64) tmp(14,i64)
+ tmp(365,i64) = tmp(364,i64) tmp(362,i64)
* tmp(366,i64) = tmp(365,i64) imm(8,i64)
+ tmp(367,ptr to f64) = tmp(20,ptr to f64) tmp(366,i64)
lde tmp(368,f64) = tmp(367,ptr to f64)
* tmp(369,f64) = tmp(361,f64) tmp(368,f64)
+ tmp(356,f64) = tmp(355,f64) tmp(369,f64)
jmp label(88)
}
block { ; succ: label(85) ; pred: label(87)
label: label(88)
+ tmp(354,i64) = tmp(353,i64) imm(1,i64)
jmp label(85)
}
block { ; succ: label(90), label(91) ; pred: label(85)
label: label(89)
- tmp(370,f64) = tmp(355,f64) imm(4607182418800017408,f64)
< tmp(371,i1) = tmp(370,f64) imm(0,f64)
cmp tmp(371,i1) label(90) label(91)
}
block { ; succ: label(92) ; pred: label(89)
label: label(90)
neg tmp(372,f64) = tmp(370,f64)
jmp label(92)
}
block { ; succ: label(92) ; pred: label(89)
label: label(91)
jmp label(92)
}
block { ; succ: label(93), label(94) ; pred: label(90), label(91)
label: label(92)
phi tmp(373,f64) = tmp(372,f64) label(90) tmp(370,f64) label(91)
* tmp(374,f64) = tmp(370,f64) tmp(370,f64)
+ tmp(347,f64) = tmp(346,f64) tmp(374,f64)
> tmp(375,i1) = tmp(373,f64) tmp(348,f64)
cmp tmp(375,i1) label(93) label(94)
}
block { ; succ: label(95) ; pred: label(92)
label: label(93)
jmp label(95)
}
block { ; succ: label(95) ; pred: label(92)
label: label(94)
jmp label(95)
}
block { ; succ: label(83) ; pred: label(93), label(94)
label: label(95)
phi tmp(349,f64) = tmp(373,f64) label(93) tmp(348,f64) label(94)
jmp label(83)
}
block { ; pred: label(80)
label: label(84)
arg tmp(346,f64)
call tmp(376,f64) = sqrt
arg imm(0,ptr to i8)
call tmp(377,ptr to i8) = str_from_lit
arg tmp(377,ptr to i8)
call output_string
arg tmp(377,ptr to i8)
call str_release
arg tmp(346,f64)
call output_double
arg imm(1,ptr to i8)
call tmp(378,ptr to i8) = str_from_lit
arg tmp(378,ptr to i8)
call output_string
arg tmp(378,ptr to i8)
call str_release
arg imm(2,ptr to i8)
call tmp(379,ptr to i8) = str_from_lit
arg tmp(379,ptr to i8)
call output_string
arg tmp(379,ptr to i8)
call str_release
arg tmp(376,f64)
call output_double
arg imm(1,ptr to i8)
call tmp(380,ptr to i8) = str_from_lit
arg tmp(380,ptr to i8)
call output_string
arg tmp(380,ptr to i8)
call str_release
arg imm(3,ptr to i8)
call tmp(381,ptr to i8) = str_from_lit
arg tmp(381,ptr to i8)
call output_string
arg tmp(381,ptr to i8)
call str_release
arg tmp(348,f64)
call output_double
arg imm(1,ptr to i8)
call tmp(382,ptr to i8) = str_from_lit
arg tmp(382,ptr to i8)
call output_string
arg tmp(382,ptr to i8)
call str_release
arg tmp(20,ptr to f64)
call array_destroy
arg tmp(10,ptr to f64)
call array_destroy
ret
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment