projectB.ll 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584
  1. ; ModuleID = 'data/projectB.c'
  2. source_filename = "data/projectB.c"
  3. target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
  4. target triple = "x86_64-pc-linux-gnu"
  5. @cache = internal global [100 x i32] zeroinitializer, align 16
  6. @__const.projectB_main.str = private unnamed_addr constant [14 x i8] c"Hello, World!\00", align 1
  7. @__const.projectB_main.arr = private unnamed_addr constant [8 x i32] [i32 10, i32 22, i32 9, i32 33, i32 21, i32 50, i32 41, i32 60], align 16
  8. @__const.projectB_main.matrix = private unnamed_addr constant <{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }> <{ <{ i32, i32, i32, [97 x i32] }> <{ i32 1, i32 2, i32 3, [97 x i32] zeroinitializer }>, <{ i32, i32, i32, [97 x i32] }> <{ i32 4, i32 5, i32 6, [97 x i32] zeroinitializer }>, <{ i32, i32, i32, [97 x i32] }> <{ i32 7, i32 8, i32 9, [97 x i32] zeroinitializer }>, [97 x <{ i32, i32, i32, [97 x i32] }>] zeroinitializer }>, align 16
  9. ; Function Attrs: noinline nounwind optnone uwtable
  10. define dso_local void @reverseString(i8* %0) #0 {
  11. %2 = alloca i8*, align 8
  12. %3 = alloca i32, align 4
  13. %4 = alloca i32, align 4
  14. %5 = alloca i8, align 1
  15. store i8* %0, i8** %2, align 8
  16. %6 = load i8*, i8** %2, align 8
  17. %7 = call i64 @strlen(i8* %6) #3
  18. %8 = trunc i64 %7 to i32
  19. store i32 %8, i32* %3, align 4
  20. store i32 0, i32* %4, align 4
  21. br label %9
  22. 9: ; preds = %40, %1
  23. %10 = load i32, i32* %4, align 4
  24. %11 = load i32, i32* %3, align 4
  25. %12 = sdiv i32 %11, 2
  26. %13 = icmp slt i32 %10, %12
  27. br i1 %13, label %14, label %43
  28. 14: ; preds = %9
  29. %15 = load i8*, i8** %2, align 8
  30. %16 = load i32, i32* %4, align 4
  31. %17 = sext i32 %16 to i64
  32. %18 = getelementptr inbounds i8, i8* %15, i64 %17
  33. %19 = load i8, i8* %18, align 1
  34. store i8 %19, i8* %5, align 1
  35. %20 = load i8*, i8** %2, align 8
  36. %21 = load i32, i32* %3, align 4
  37. %22 = sub nsw i32 %21, 1
  38. %23 = load i32, i32* %4, align 4
  39. %24 = sub nsw i32 %22, %23
  40. %25 = sext i32 %24 to i64
  41. %26 = getelementptr inbounds i8, i8* %20, i64 %25
  42. %27 = load i8, i8* %26, align 1
  43. %28 = load i8*, i8** %2, align 8
  44. %29 = load i32, i32* %4, align 4
  45. %30 = sext i32 %29 to i64
  46. %31 = getelementptr inbounds i8, i8* %28, i64 %30
  47. store i8 %27, i8* %31, align 1
  48. %32 = load i8, i8* %5, align 1
  49. %33 = load i8*, i8** %2, align 8
  50. %34 = load i32, i32* %3, align 4
  51. %35 = sub nsw i32 %34, 1
  52. %36 = load i32, i32* %4, align 4
  53. %37 = sub nsw i32 %35, %36
  54. %38 = sext i32 %37 to i64
  55. %39 = getelementptr inbounds i8, i8* %33, i64 %38
  56. store i8 %32, i8* %39, align 1
  57. br label %40
  58. 40: ; preds = %14
  59. %41 = load i32, i32* %4, align 4
  60. %42 = add nsw i32 %41, 1
  61. store i32 %42, i32* %4, align 4
  62. br label %9
  63. 43: ; preds = %9
  64. ret void
  65. }
  66. ; Function Attrs: nounwind readonly
  67. declare dso_local i64 @strlen(i8*) #1
  68. ; Function Attrs: noinline nounwind optnone uwtable
  69. define dso_local i32 @longestIncreasingSubsequence(i32* %0, i32 %1) #0 {
  70. %3 = alloca i32*, align 8
  71. %4 = alloca i32, align 4
  72. %5 = alloca [100 x i32], align 16
  73. %6 = alloca i32, align 4
  74. %7 = alloca i32, align 4
  75. %8 = alloca i32, align 4
  76. %9 = alloca i32, align 4
  77. %10 = alloca i32, align 4
  78. store i32* %0, i32** %3, align 8
  79. store i32 %1, i32* %4, align 4
  80. store i32 0, i32* %6, align 4
  81. br label %11
  82. 11: ; preds = %19, %2
  83. %12 = load i32, i32* %6, align 4
  84. %13 = load i32, i32* %4, align 4
  85. %14 = icmp slt i32 %12, %13
  86. br i1 %14, label %15, label %22
  87. 15: ; preds = %11
  88. %16 = load i32, i32* %6, align 4
  89. %17 = sext i32 %16 to i64
  90. %18 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %17
  91. store i32 1, i32* %18, align 4
  92. br label %19
  93. 19: ; preds = %15
  94. %20 = load i32, i32* %6, align 4
  95. %21 = add nsw i32 %20, 1
  96. store i32 %21, i32* %6, align 4
  97. br label %11
  98. 22: ; preds = %11
  99. store i32 1, i32* %7, align 4
  100. br label %23
  101. 23: ; preds = %69, %22
  102. %24 = load i32, i32* %7, align 4
  103. %25 = load i32, i32* %4, align 4
  104. %26 = icmp slt i32 %24, %25
  105. br i1 %26, label %27, label %72
  106. 27: ; preds = %23
  107. store i32 0, i32* %8, align 4
  108. br label %28
  109. 28: ; preds = %65, %27
  110. %29 = load i32, i32* %8, align 4
  111. %30 = load i32, i32* %7, align 4
  112. %31 = icmp slt i32 %29, %30
  113. br i1 %31, label %32, label %68
  114. 32: ; preds = %28
  115. %33 = load i32*, i32** %3, align 8
  116. %34 = load i32, i32* %7, align 4
  117. %35 = sext i32 %34 to i64
  118. %36 = getelementptr inbounds i32, i32* %33, i64 %35
  119. %37 = load i32, i32* %36, align 4
  120. %38 = load i32*, i32** %3, align 8
  121. %39 = load i32, i32* %8, align 4
  122. %40 = sext i32 %39 to i64
  123. %41 = getelementptr inbounds i32, i32* %38, i64 %40
  124. %42 = load i32, i32* %41, align 4
  125. %43 = icmp sgt i32 %37, %42
  126. br i1 %43, label %44, label %64
  127. 44: ; preds = %32
  128. %45 = load i32, i32* %7, align 4
  129. %46 = sext i32 %45 to i64
  130. %47 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %46
  131. %48 = load i32, i32* %47, align 4
  132. %49 = load i32, i32* %8, align 4
  133. %50 = sext i32 %49 to i64
  134. %51 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %50
  135. %52 = load i32, i32* %51, align 4
  136. %53 = add nsw i32 %52, 1
  137. %54 = icmp slt i32 %48, %53
  138. br i1 %54, label %55, label %64
  139. 55: ; preds = %44
  140. %56 = load i32, i32* %8, align 4
  141. %57 = sext i32 %56 to i64
  142. %58 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %57
  143. %59 = load i32, i32* %58, align 4
  144. %60 = add nsw i32 %59, 1
  145. %61 = load i32, i32* %7, align 4
  146. %62 = sext i32 %61 to i64
  147. %63 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %62
  148. store i32 %60, i32* %63, align 4
  149. br label %64
  150. 64: ; preds = %55, %44, %32
  151. br label %65
  152. 65: ; preds = %64
  153. %66 = load i32, i32* %8, align 4
  154. %67 = add nsw i32 %66, 1
  155. store i32 %67, i32* %8, align 4
  156. br label %28
  157. 68: ; preds = %28
  158. br label %69
  159. 69: ; preds = %68
  160. %70 = load i32, i32* %7, align 4
  161. %71 = add nsw i32 %70, 1
  162. store i32 %71, i32* %7, align 4
  163. br label %23
  164. 72: ; preds = %23
  165. store i32 0, i32* %9, align 4
  166. store i32 0, i32* %10, align 4
  167. br label %73
  168. 73: ; preds = %90, %72
  169. %74 = load i32, i32* %10, align 4
  170. %75 = load i32, i32* %4, align 4
  171. %76 = icmp slt i32 %74, %75
  172. br i1 %76, label %77, label %93
  173. 77: ; preds = %73
  174. %78 = load i32, i32* %9, align 4
  175. %79 = load i32, i32* %10, align 4
  176. %80 = sext i32 %79 to i64
  177. %81 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %80
  178. %82 = load i32, i32* %81, align 4
  179. %83 = icmp slt i32 %78, %82
  180. br i1 %83, label %84, label %89
  181. 84: ; preds = %77
  182. %85 = load i32, i32* %10, align 4
  183. %86 = sext i32 %85 to i64
  184. %87 = getelementptr inbounds [100 x i32], [100 x i32]* %5, i64 0, i64 %86
  185. %88 = load i32, i32* %87, align 4
  186. store i32 %88, i32* %9, align 4
  187. br label %89
  188. 89: ; preds = %84, %77
  189. br label %90
  190. 90: ; preds = %89
  191. %91 = load i32, i32* %10, align 4
  192. %92 = add nsw i32 %91, 1
  193. store i32 %92, i32* %10, align 4
  194. br label %73
  195. 93: ; preds = %73
  196. %94 = load i32, i32* %9, align 4
  197. ret i32 %94
  198. }
  199. ; Function Attrs: noinline nounwind optnone uwtable
  200. define dso_local i32 @testPoints(i32 %0) #0 {
  201. %2 = alloca i32, align 4
  202. %3 = alloca i32, align 4
  203. %4 = alloca i32, align 4
  204. %5 = alloca i32, align 4
  205. store i32 %0, i32* %3, align 4
  206. store i32 0, i32* %4, align 4
  207. store i32 1, i32* %5, align 4
  208. br label %6
  209. 6: ; preds = %16, %1
  210. %7 = load i32, i32* %5, align 4
  211. %8 = icmp slt i32 %7, 5
  212. br i1 %8, label %9, label %19
  213. 9: ; preds = %6
  214. %10 = load i32, i32* %4, align 4
  215. %11 = add nsw i32 %10, 1
  216. store i32 %11, i32* %4, align 4
  217. %12 = load i32, i32* %3, align 4
  218. %13 = icmp sgt i32 %12, 2
  219. br i1 %13, label %14, label %15
  220. 14: ; preds = %9
  221. store i32 23, i32* %2, align 4
  222. br label %21
  223. 15: ; preds = %9
  224. br label %16
  225. 16: ; preds = %15
  226. %17 = load i32, i32* %5, align 4
  227. %18 = add nsw i32 %17, 1
  228. store i32 %18, i32* %5, align 4
  229. br label %6
  230. 19: ; preds = %6
  231. %20 = load i32, i32* %4, align 4
  232. store i32 %20, i32* %2, align 4
  233. br label %21
  234. 21: ; preds = %19, %14
  235. %22 = load i32, i32* %2, align 4
  236. ret i32 %22
  237. }
  238. ; Function Attrs: noinline nounwind optnone uwtable
  239. define dso_local i32 @countSetBits(i32 %0) #0 {
  240. %2 = alloca i32, align 4
  241. %3 = alloca i32, align 4
  242. store i32 %0, i32* %2, align 4
  243. store i32 0, i32* %3, align 4
  244. br label %4
  245. 4: ; preds = %7, %1
  246. %5 = load i32, i32* %2, align 4
  247. %6 = icmp ne i32 %5, 0
  248. br i1 %6, label %7, label %14
  249. 7: ; preds = %4
  250. %8 = load i32, i32* %2, align 4
  251. %9 = and i32 %8, 1
  252. %10 = load i32, i32* %3, align 4
  253. %11 = add nsw i32 %10, %9
  254. store i32 %11, i32* %3, align 4
  255. %12 = load i32, i32* %2, align 4
  256. %13 = ashr i32 %12, 1
  257. store i32 %13, i32* %2, align 4
  258. br label %4
  259. 14: ; preds = %4
  260. %15 = load i32, i32* %3, align 4
  261. ret i32 %15
  262. }
  263. ; Function Attrs: noinline nounwind optnone uwtable
  264. define dso_local i32 @memoizedFib(i32 %0) #0 {
  265. %2 = alloca i32, align 4
  266. %3 = alloca i32, align 4
  267. store i32 %0, i32* %3, align 4
  268. %4 = load i32, i32* %3, align 4
  269. %5 = sext i32 %4 to i64
  270. %6 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %5
  271. %7 = load i32, i32* %6, align 4
  272. %8 = icmp ne i32 %7, -1
  273. br i1 %8, label %9, label %14
  274. 9: ; preds = %1
  275. %10 = load i32, i32* %3, align 4
  276. %11 = sext i32 %10 to i64
  277. %12 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %11
  278. %13 = load i32, i32* %12, align 4
  279. store i32 %13, i32* %2, align 4
  280. br label %34
  281. 14: ; preds = %1
  282. %15 = load i32, i32* %3, align 4
  283. %16 = icmp sle i32 %15, 1
  284. br i1 %16, label %17, label %19
  285. 17: ; preds = %14
  286. %18 = load i32, i32* %3, align 4
  287. store i32 %18, i32* %2, align 4
  288. br label %34
  289. 19: ; preds = %14
  290. %20 = load i32, i32* %3, align 4
  291. %21 = sub nsw i32 %20, 1
  292. %22 = call i32 @memoizedFib(i32 %21)
  293. %23 = load i32, i32* %3, align 4
  294. %24 = sub nsw i32 %23, 2
  295. %25 = call i32 @memoizedFib(i32 %24)
  296. %26 = add nsw i32 %22, %25
  297. %27 = load i32, i32* %3, align 4
  298. %28 = sext i32 %27 to i64
  299. %29 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %28
  300. store i32 %26, i32* %29, align 4
  301. %30 = load i32, i32* %3, align 4
  302. %31 = sext i32 %30 to i64
  303. %32 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %31
  304. %33 = load i32, i32* %32, align 4
  305. store i32 %33, i32* %2, align 4
  306. br label %34
  307. 34: ; preds = %19, %17, %9
  308. %35 = load i32, i32* %2, align 4
  309. ret i32 %35
  310. }
  311. ; Function Attrs: noinline nounwind optnone uwtable
  312. define dso_local i32 @processMatrix([100 x i32]* %0, i32 %1) #0 {
  313. %3 = alloca [100 x i32]*, align 8
  314. %4 = alloca i32, align 4
  315. %5 = alloca i32, align 4
  316. %6 = alloca i32, align 4
  317. %7 = alloca i32, align 4
  318. store [100 x i32]* %0, [100 x i32]** %3, align 8
  319. store i32 %1, i32* %4, align 4
  320. store i32 0, i32* %5, align 4
  321. store i32 0, i32* %6, align 4
  322. br label %8
  323. 8: ; preds = %77, %2
  324. %9 = load i32, i32* %6, align 4
  325. %10 = load i32, i32* %4, align 4
  326. %11 = icmp slt i32 %9, %10
  327. br i1 %11, label %12, label %80
  328. 12: ; preds = %8
  329. store i32 0, i32* %7, align 4
  330. br label %13
  331. 13: ; preds = %73, %12
  332. %14 = load i32, i32* %7, align 4
  333. %15 = load i32, i32* %4, align 4
  334. %16 = icmp slt i32 %14, %15
  335. br i1 %16, label %17, label %76
  336. 17: ; preds = %13
  337. %18 = load i32, i32* %6, align 4
  338. %19 = load i32, i32* %7, align 4
  339. %20 = icmp eq i32 %18, %19
  340. br i1 %20, label %21, label %55
  341. 21: ; preds = %17
  342. %22 = load [100 x i32]*, [100 x i32]** %3, align 8
  343. %23 = load i32, i32* %6, align 4
  344. %24 = sext i32 %23 to i64
  345. %25 = getelementptr inbounds [100 x i32], [100 x i32]* %22, i64 %24
  346. %26 = load i32, i32* %7, align 4
  347. %27 = sext i32 %26 to i64
  348. %28 = getelementptr inbounds [100 x i32], [100 x i32]* %25, i64 0, i64 %27
  349. %29 = load i32, i32* %28, align 4
  350. %30 = srem i32 %29, 2
  351. %31 = icmp eq i32 %30, 0
  352. br i1 %31, label %32, label %43
  353. 32: ; preds = %21
  354. %33 = load [100 x i32]*, [100 x i32]** %3, align 8
  355. %34 = load i32, i32* %6, align 4
  356. %35 = sext i32 %34 to i64
  357. %36 = getelementptr inbounds [100 x i32], [100 x i32]* %33, i64 %35
  358. %37 = load i32, i32* %7, align 4
  359. %38 = sext i32 %37 to i64
  360. %39 = getelementptr inbounds [100 x i32], [100 x i32]* %36, i64 0, i64 %38
  361. %40 = load i32, i32* %39, align 4
  362. %41 = load i32, i32* %5, align 4
  363. %42 = add nsw i32 %41, %40
  364. store i32 %42, i32* %5, align 4
  365. br label %54
  366. 43: ; preds = %21
  367. %44 = load [100 x i32]*, [100 x i32]** %3, align 8
  368. %45 = load i32, i32* %6, align 4
  369. %46 = sext i32 %45 to i64
  370. %47 = getelementptr inbounds [100 x i32], [100 x i32]* %44, i64 %46
  371. %48 = load i32, i32* %7, align 4
  372. %49 = sext i32 %48 to i64
  373. %50 = getelementptr inbounds [100 x i32], [100 x i32]* %47, i64 0, i64 %49
  374. %51 = load i32, i32* %50, align 4
  375. %52 = load i32, i32* %5, align 4
  376. %53 = sub nsw i32 %52, %51
  377. store i32 %53, i32* %5, align 4
  378. br label %54
  379. 54: ; preds = %43, %32
  380. br label %72
  381. 55: ; preds = %17
  382. %56 = load i32, i32* %6, align 4
  383. %57 = load i32, i32* %7, align 4
  384. %58 = icmp slt i32 %56, %57
  385. br i1 %58, label %59, label %71
  386. 59: ; preds = %55
  387. %60 = load [100 x i32]*, [100 x i32]** %3, align 8
  388. %61 = load i32, i32* %6, align 4
  389. %62 = sext i32 %61 to i64
  390. %63 = getelementptr inbounds [100 x i32], [100 x i32]* %60, i64 %62
  391. %64 = load i32, i32* %7, align 4
  392. %65 = sext i32 %64 to i64
  393. %66 = getelementptr inbounds [100 x i32], [100 x i32]* %63, i64 0, i64 %65
  394. %67 = load i32, i32* %66, align 4
  395. %68 = call i32 @countSetBits(i32 %67)
  396. %69 = load i32, i32* %5, align 4
  397. %70 = add nsw i32 %69, %68
  398. store i32 %70, i32* %5, align 4
  399. br label %71
  400. 71: ; preds = %59, %55
  401. br label %72
  402. 72: ; preds = %71, %54
  403. br label %73
  404. 73: ; preds = %72
  405. %74 = load i32, i32* %7, align 4
  406. %75 = add nsw i32 %74, 1
  407. store i32 %75, i32* %7, align 4
  408. br label %13
  409. 76: ; preds = %13
  410. br label %77
  411. 77: ; preds = %76
  412. %78 = load i32, i32* %6, align 4
  413. %79 = add nsw i32 %78, 1
  414. store i32 %79, i32* %6, align 4
  415. br label %8
  416. 80: ; preds = %8
  417. %81 = load i32, i32* %5, align 4
  418. ret i32 %81
  419. }
  420. ; Function Attrs: noinline nounwind optnone uwtable
  421. define dso_local i32 @projectB_main() #0 {
  422. %1 = alloca [14 x i8], align 1
  423. %2 = alloca [8 x i32], align 16
  424. %3 = alloca i32, align 4
  425. %4 = alloca i32, align 4
  426. %5 = alloca [100 x [100 x i32]], align 16
  427. %6 = alloca i32, align 4
  428. %7 = alloca i32, align 4
  429. %8 = alloca i32, align 4
  430. %9 = call i32 @testPoints(i32 5)
  431. call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([100 x i32]* @cache to i8*), i8 -1, i64 400, i1 false)
  432. %10 = bitcast [14 x i8]* %1 to i8*
  433. call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %10, i8* align 1 getelementptr inbounds ([14 x i8], [14 x i8]* @__const.projectB_main.str, i32 0, i32 0), i64 14, i1 false)
  434. %11 = getelementptr inbounds [14 x i8], [14 x i8]* %1, i64 0, i64 0
  435. call void @reverseString(i8* %11)
  436. %12 = bitcast [8 x i32]* %2 to i8*
  437. call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %12, i8* align 16 bitcast ([8 x i32]* @__const.projectB_main.arr to i8*), i64 32, i1 false)
  438. store i32 8, i32* %3, align 4
  439. %13 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 0
  440. %14 = load i32, i32* %3, align 4
  441. %15 = call i32 @longestIncreasingSubsequence(i32* %13, i32 %14)
  442. store i32 %15, i32* %4, align 4
  443. %16 = bitcast [100 x [100 x i32]]* %5 to i8*
  444. call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %16, i8* align 16 bitcast (<{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }>* @__const.projectB_main.matrix to i8*), i64 40000, i1 false)
  445. %17 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %5, i64 0, i64 0
  446. %18 = call i32 @processMatrix([100 x i32]* %17, i32 3)
  447. store i32 %18, i32* %6, align 4
  448. store i32 0, i32* %7, align 4
  449. br label %19
  450. 19: ; preds = %24, %0
  451. %20 = load i32, i32* %7, align 4
  452. %21 = call i32 @memoizedFib(i32 %20)
  453. %22 = load i32, i32* %7, align 4
  454. %23 = add nsw i32 %22, 1
  455. store i32 %23, i32* %7, align 4
  456. br label %24
  457. 24: ; preds = %19
  458. %25 = load i32, i32* %7, align 4
  459. %26 = icmp slt i32 %25, 10
  460. br i1 %26, label %19, label %27
  461. 27: ; preds = %24
  462. %28 = load i32, i32* %4, align 4
  463. %29 = icmp sgt i32 %28, 5
  464. br i1 %29, label %30, label %40
  465. 30: ; preds = %27
  466. %31 = load i32, i32* %6, align 4
  467. %32 = icmp sgt i32 %31, 0
  468. br i1 %32, label %33, label %36
  469. 33: ; preds = %30
  470. %34 = load i32, i32* %4, align 4
  471. %35 = call i32 @memoizedFib(i32 %34)
  472. store i32 %35, i32* %8, align 4
  473. br label %39
  474. 36: ; preds = %30
  475. %37 = load i32, i32* %6, align 4
  476. %38 = call i32 @countSetBits(i32 %37)
  477. store i32 %38, i32* %8, align 4
  478. br label %39
  479. 39: ; preds = %36, %33
  480. br label %47
  481. 40: ; preds = %27
  482. %41 = getelementptr inbounds [14 x i8], [14 x i8]* %1, i64 0, i64 0
  483. %42 = call i64 @strlen(i8* %41) #3
  484. %43 = load i32, i32* %6, align 4
  485. %44 = sext i32 %43 to i64
  486. %45 = add i64 %42, %44
  487. %46 = trunc i64 %45 to i32
  488. store i32 %46, i32* %8, align 4
  489. br label %47
  490. 47: ; preds = %40, %39
  491. %48 = load i32, i32* %8, align 4
  492. ret i32 %48
  493. }
  494. ; Function Attrs: argmemonly nounwind willreturn
  495. declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #2
  496. ; Function Attrs: argmemonly nounwind willreturn
  497. declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #2
  498. attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
  499. attributes #1 = { nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
  500. attributes #2 = { argmemonly nounwind willreturn }
  501. attributes #3 = { nounwind readonly }
  502. !llvm.module.flags = !{!0}
  503. !llvm.ident = !{!1}
  504. !0 = !{i32 1, !"wchar_size", i32 4}
  505. !1 = !{!"clang version 10.0.0-4ubuntu1 "}