ir.ll 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. ; target triple = "x86_64-unknown-linux-gnu"
  2. target datalayout = ""
  3. define void @"main"()
  4. {
  5. entry:
  6. %".2" = bitcast [8 x i8]* @"fstr" to i8*
  7. %".3" = fmul double 0x4000000000000000, 0x4008000000000000
  8. %".4" = fdiv double %".3", 0x4010000000000000
  9. %".5" = fadd double 0x3ff0000000000000, %".4"
  10. %".6" = call i64 (i8*, ...) @"printf"(i8* %".2", double %".5")
  11. %".7" = sitofp i64 %".6" to double
  12. %".8" = call i64 (i8*, ...) @"printf"(i8* %".2", double %".7")
  13. %".9" = call double @"f_master"(i64 1, double 0x4024000000000000, double 0x0)
  14. %".10" = call i64 (i8*, ...) @"printf"(i8* %".2", double %".9")
  15. %".11" = call double @"f_master"(i64 2, double 0x3ff0000000000000, double 0x4000000000000000)
  16. %".12" = call i64 (i8*, ...) @"printf"(i8* %".2", double %".11")
  17. %".13" = call double @"fib_master"(i64 1, double 0x4034000000000000)
  18. %".14" = call i64 (i8*, ...) @"printf"(i8* %".2", double %".13")
  19. %".15" = call double @"square_master"(i64 1, double 0x4000000000000000)
  20. %".16" = call double @"exp_master"(i64 2, double 0x4000000000000000, double %".15")
  21. %".17" = call i64 (i8*, ...) @"printf"(i8* %".2", double %".16")
  22. %".18" = call double @"sqrt_master"(i64 1, double 0x4000000000000000, double 0x0, double 0x0, double 0x0)
  23. %".19" = call double @"sqrt_master"(i64 1, double 0x4000000000000000, double 0x0, double 0x0, double 0x0)
  24. %".20" = call double @"square_master"(i64 1, double %".19")
  25. %".21" = call i64 (i8*, ...) @"printf"(i8* %".2", double %".18", double %".20")
  26. ret void
  27. }
  28. declare i64 @"printf"(i8* %".1", ...)
  29. @"fstr" = internal constant [8 x i8] c"> %.8f\0a\00"
  30. @"cond_global_fmt" = internal constant [12 x i8] c"> cond: %d\0a\00"
  31. define double @"f_master"(i64 %".1", double %".2", double %".3")
  32. {
  33. entry:
  34. switch i64 %".1", label %"switch_default" [i64 1, label %"f_arg_1" i64 2, label %"f_arg_2"]
  35. exit:
  36. ret double 0xbff0000000000000
  37. switch_default:
  38. br label %"exit"
  39. f_arg_1:
  40. %".8" = bitcast [12 x i8]* @"cond_global_fmt" to i8*
  41. %"cmp_0" = fcmp ueq double %".2", 0x0
  42. %".9" = and i1 1, %"cmp_0"
  43. br i1 %".9", label %"f_arg_1.if", label %"f_arg_1.endif"
  44. f_arg_1.if:
  45. %".11" = call double @"f[CONST 0]"(double 0x0)
  46. ret double %".11"
  47. f_arg_1.endif:
  48. br i1 1, label %"f_arg_1.endif.if", label %"f_arg_1.endif.endif"
  49. f_arg_1.endif.if:
  50. %".14" = call double @"f[VAR x]"(double %".2")
  51. ret double %".14"
  52. f_arg_1.endif.endif:
  53. br label %"exit"
  54. f_arg_2:
  55. %".17" = bitcast [12 x i8]* @"cond_global_fmt" to i8*
  56. br i1 1, label %"f_arg_2.if", label %"f_arg_2.endif"
  57. f_arg_2.if:
  58. %".19" = call double @"f[VAR x, VAR y]"(double %".2", double %".3")
  59. ret double %".19"
  60. f_arg_2.endif:
  61. br label %"exit"
  62. }
  63. define double @"fib_master"(i64 %".1", double %".2")
  64. {
  65. entry:
  66. switch i64 %".1", label %"switch_default" [i64 1, label %"fib_arg_1"]
  67. exit:
  68. ret double 0xbff0000000000000
  69. switch_default:
  70. br label %"exit"
  71. fib_arg_1:
  72. %".7" = bitcast [12 x i8]* @"cond_global_fmt" to i8*
  73. %"cmp_1" = fcmp ueq double %".2", 0x3ff0000000000000
  74. %".8" = and i1 1, %"cmp_1"
  75. br i1 %".8", label %"fib_arg_1.if", label %"fib_arg_1.endif"
  76. fib_arg_1.if:
  77. %".10" = call double @"fib[CONST 1]"(double 0x3ff0000000000000)
  78. ret double %".10"
  79. fib_arg_1.endif:
  80. %"cmp_2" = fcmp ueq double %".2", 0x4000000000000000
  81. %".12" = and i1 1, %"cmp_2"
  82. br i1 %".12", label %"fib_arg_1.endif.if", label %"fib_arg_1.endif.endif"
  83. fib_arg_1.endif.if:
  84. %".14" = call double @"fib[CONST 2]"(double 0x4000000000000000)
  85. ret double %".14"
  86. fib_arg_1.endif.endif:
  87. br i1 1, label %"fib_arg_1.endif.endif.if", label %"fib_arg_1.endif.endif.endif"
  88. fib_arg_1.endif.endif.if:
  89. %".17" = call double @"fib[VAR x]"(double %".2")
  90. ret double %".17"
  91. fib_arg_1.endif.endif.endif:
  92. br label %"exit"
  93. }
  94. define double @"exp_master"(i64 %".1", double %".2", double %".3")
  95. {
  96. entry:
  97. switch i64 %".1", label %"switch_default" [i64 2, label %"exp_arg_2"]
  98. exit:
  99. ret double 0xbff0000000000000
  100. switch_default:
  101. br label %"exit"
  102. exp_arg_2:
  103. %".8" = bitcast [12 x i8]* @"cond_global_fmt" to i8*
  104. %"cmp_0" = fcmp ueq double %".3", 0x0
  105. %".9" = and i1 1, %"cmp_0"
  106. br i1 %".9", label %"exp_arg_2.if", label %"exp_arg_2.endif"
  107. exp_arg_2.if:
  108. %".11" = call double @"exp[VAR x, CONST 0]"(double %".2", double 0x0)
  109. ret double %".11"
  110. exp_arg_2.endif:
  111. br i1 1, label %"exp_arg_2.endif.if", label %"exp_arg_2.endif.endif"
  112. exp_arg_2.endif.if:
  113. %".14" = call double @"exp[VAR x, VAR y]"(double %".2", double %".3")
  114. ret double %".14"
  115. exp_arg_2.endif.endif:
  116. br label %"exit"
  117. }
  118. define double @"square_master"(i64 %".1", double %".2")
  119. {
  120. entry:
  121. switch i64 %".1", label %"switch_default" [i64 1, label %"square_arg_1"]
  122. exit:
  123. ret double 0xbff0000000000000
  124. switch_default:
  125. br label %"exit"
  126. square_arg_1:
  127. %".7" = bitcast [12 x i8]* @"cond_global_fmt" to i8*
  128. br i1 1, label %"square_arg_1.if", label %"square_arg_1.endif"
  129. square_arg_1.if:
  130. %".9" = call double @"square[VAR x]"(double %".2")
  131. ret double %".9"
  132. square_arg_1.endif:
  133. br label %"exit"
  134. }
  135. define double @"sqrt_master"(i64 %".1", double %".2", double %".3", double %".4", double %".5")
  136. {
  137. entry:
  138. switch i64 %".1", label %"switch_default" [i64 1, label %"sqrt_arg_1" i64 4, label %"sqrt_arg_4"]
  139. exit:
  140. ret double 0xbff0000000000000
  141. switch_default:
  142. br label %"exit"
  143. sqrt_arg_1:
  144. %".10" = bitcast [12 x i8]* @"cond_global_fmt" to i8*
  145. br i1 1, label %"sqrt_arg_1.if", label %"sqrt_arg_1.endif"
  146. sqrt_arg_1.if:
  147. %".12" = call double @"sqrt[VAR x]"(double %".2")
  148. ret double %".12"
  149. sqrt_arg_1.endif:
  150. br label %"exit"
  151. sqrt_arg_4:
  152. %".15" = bitcast [12 x i8]* @"cond_global_fmt" to i8*
  153. %"cmp_0" = fcmp ueq double %".5", 0x0
  154. %".16" = and i1 1, %"cmp_0"
  155. br i1 %".16", label %"sqrt_arg_4.if", label %"sqrt_arg_4.endif"
  156. sqrt_arg_4.if:
  157. %".18" = call double @"sqrt[VAR x, VAR s, VAR y, CONST 0]"(double %".2", double %".3", double %".4", double 0x0)
  158. ret double %".18"
  159. sqrt_arg_4.endif:
  160. br i1 1, label %"sqrt_arg_4.endif.if", label %"sqrt_arg_4.endif.endif"
  161. sqrt_arg_4.endif.if:
  162. %".21" = call double @"sqrt[VAR x, VAR s, VAR y, VAR n]"(double %".2", double %".3", double %".4", double %".5")
  163. ret double %".21"
  164. sqrt_arg_4.endif.endif:
  165. br label %"exit"
  166. }
  167. define double @"f[CONST 0]"(double %".1")
  168. {
  169. entry:
  170. ret double 0x0
  171. }
  172. define double @"f[VAR x]"(double %".1")
  173. {
  174. entry:
  175. %".3" = fsub double %".1", 0x3ff0000000000000
  176. %".4" = call double @"f_master"(i64 1, double %".3", double 0x0)
  177. %".5" = fadd double %".1", %".4"
  178. ret double %".5"
  179. }
  180. define double @"f[VAR x, VAR y]"(double %".1", double %".2")
  181. {
  182. entry:
  183. %".4" = fadd double %".1", %".2"
  184. ret double %".4"
  185. }
  186. define double @"fib[CONST 1]"(double %".1")
  187. {
  188. entry:
  189. ret double 0x3ff0000000000000
  190. }
  191. define double @"fib[CONST 2]"(double %".1")
  192. {
  193. entry:
  194. ret double 0x3ff0000000000000
  195. }
  196. define double @"fib[VAR x]"(double %".1")
  197. {
  198. entry:
  199. %".3" = fsub double %".1", 0x3ff0000000000000
  200. %".4" = call double @"fib_master"(i64 1, double %".3")
  201. %".5" = fsub double %".1", 0x4000000000000000
  202. %".6" = call double @"fib_master"(i64 1, double %".5")
  203. %".7" = fadd double %".4", %".6"
  204. ret double %".7"
  205. }
  206. define double @"exp[VAR x, CONST 0]"(double %".1", double %".2")
  207. {
  208. entry:
  209. ret double 0x3ff0000000000000
  210. }
  211. define double @"exp[VAR x, VAR y]"(double %".1", double %".2")
  212. {
  213. entry:
  214. %".4" = fsub double %".2", 0x3ff0000000000000
  215. %".5" = call double @"exp_master"(i64 2, double %".1", double %".4")
  216. %".6" = fmul double %".5", %".1"
  217. ret double %".6"
  218. }
  219. define double @"square[VAR x]"(double %".1")
  220. {
  221. entry:
  222. %".3" = fptosi double %".1" to i64
  223. %".4" = call double @"exp_master"(i64 %".3", double 0x4000000000000000, double 0x0)
  224. ret double %".4"
  225. }
  226. define double @"sqrt[VAR x]"(double %".1")
  227. {
  228. entry:
  229. %".3" = fdiv double %".1", 0x4000000000000000
  230. %".4" = call double @"sqrt_master"(i64 4, double %".1", double %".3", double 0x3ff0000000000000, double 0x4024000000000000)
  231. ret double %".4"
  232. }
  233. define double @"sqrt[VAR x, VAR s, VAR y, CONST 0]"(double %".1", double %".2", double %".3", double %".4")
  234. {
  235. entry:
  236. ret double %".2"
  237. }
  238. define double @"sqrt[VAR x, VAR s, VAR y, VAR n]"(double %".1", double %".2", double %".3", double %".4")
  239. {
  240. entry:
  241. %".6" = fadd double %".2", %".3"
  242. %".7" = fdiv double %".6", 0x4000000000000000
  243. %".8" = fadd double %".2", %".3"
  244. %".9" = fdiv double %".8", 0x4000000000000000
  245. %".10" = fdiv double %".1", %".9"
  246. %".11" = fsub double %".4", 0x3ff0000000000000
  247. %".12" = call double @"sqrt_master"(i64 4, double %".1", double %".7", double %".10", double %".11")
  248. ret double %".12"
  249. }