divrem.ll 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. ; RUN: opt < %s -cost-model -analyze -mtriple=thumbv7-apple-ios6.0.0 -mcpu=cortex-a9 | FileCheck %s
  2. define <2 x i8> @sdiv_v2_i8(<2 x i8> %a, <2 x i8> %b) {
  3. ; CHECK: sdiv_v2_i8
  4. ; CHECK: cost of 40 {{.*}} sdiv
  5. %1 = sdiv <2 x i8> %a, %b
  6. ret <2 x i8> %1
  7. }
  8. define <2 x i16> @sdiv_v2_i16(<2 x i16> %a, <2 x i16> %b) {
  9. ; CHECK: sdiv_v2_i16
  10. ; CHECK: cost of 40 {{.*}} sdiv
  11. %1 = sdiv <2 x i16> %a, %b
  12. ret <2 x i16> %1
  13. }
  14. define <2 x i32> @sdiv_v2_i32(<2 x i32> %a, <2 x i32> %b) {
  15. ; CHECK: sdiv_v2_i32
  16. ; CHECK: cost of 40 {{.*}} sdiv
  17. %1 = sdiv <2 x i32> %a, %b
  18. ret <2 x i32> %1
  19. }
  20. define <2 x i64> @sdiv_v2_i64(<2 x i64> %a, <2 x i64> %b) {
  21. ; CHECK: sdiv_v2_i64
  22. ; CHECK: cost of 40 {{.*}} sdiv
  23. %1 = sdiv <2 x i64> %a, %b
  24. ret <2 x i64> %1
  25. }
  26. define <4 x i8> @sdiv_v4_i8(<4 x i8> %a, <4 x i8> %b) {
  27. ; CHECK: sdiv_v4_i8
  28. ; CHECK: cost of 10 {{.*}} sdiv
  29. %1 = sdiv <4 x i8> %a, %b
  30. ret <4 x i8> %1
  31. }
  32. define <4 x i16> @sdiv_v4_i16(<4 x i16> %a, <4 x i16> %b) {
  33. ; CHECK: sdiv_v4_i16
  34. ; CHECK: cost of 10 {{.*}} sdiv
  35. %1 = sdiv <4 x i16> %a, %b
  36. ret <4 x i16> %1
  37. }
  38. define <4 x i32> @sdiv_v4_i32(<4 x i32> %a, <4 x i32> %b) {
  39. ; CHECK: sdiv_v4_i32
  40. ; CHECK: cost of 80 {{.*}} sdiv
  41. %1 = sdiv <4 x i32> %a, %b
  42. ret <4 x i32> %1
  43. }
  44. define <4 x i64> @sdiv_v4_i64(<4 x i64> %a, <4 x i64> %b) {
  45. ; CHECK: sdiv_v4_i64
  46. ; CHECK: cost of 80 {{.*}} sdiv
  47. %1 = sdiv <4 x i64> %a, %b
  48. ret <4 x i64> %1
  49. }
  50. define <8 x i8> @sdiv_v8_i8(<8 x i8> %a, <8 x i8> %b) {
  51. ; CHECK: sdiv_v8_i8
  52. ; CHECK: cost of 10 {{.*}} sdiv
  53. %1 = sdiv <8 x i8> %a, %b
  54. ret <8 x i8> %1
  55. }
  56. define <8 x i16> @sdiv_v8_i16(<8 x i16> %a, <8 x i16> %b) {
  57. ; CHECK: sdiv_v8_i16
  58. ; CHECK: cost of 160 {{.*}} sdiv
  59. %1 = sdiv <8 x i16> %a, %b
  60. ret <8 x i16> %1
  61. }
  62. define <8 x i32> @sdiv_v8_i32(<8 x i32> %a, <8 x i32> %b) {
  63. ; CHECK: sdiv_v8_i32
  64. ; CHECK: cost of 160 {{.*}} sdiv
  65. %1 = sdiv <8 x i32> %a, %b
  66. ret <8 x i32> %1
  67. }
  68. define <8 x i64> @sdiv_v8_i64(<8 x i64> %a, <8 x i64> %b) {
  69. ; CHECK: sdiv_v8_i64
  70. ; CHECK: cost of 160 {{.*}} sdiv
  71. %1 = sdiv <8 x i64> %a, %b
  72. ret <8 x i64> %1
  73. }
  74. define <16 x i8> @sdiv_v16_i8(<16 x i8> %a, <16 x i8> %b) {
  75. ; CHECK: sdiv_v16_i8
  76. ; CHECK: cost of 320 {{.*}} sdiv
  77. %1 = sdiv <16 x i8> %a, %b
  78. ret <16 x i8> %1
  79. }
  80. define <16 x i16> @sdiv_v16_i16(<16 x i16> %a, <16 x i16> %b) {
  81. ; CHECK: sdiv_v16_i16
  82. ; CHECK: cost of 320 {{.*}} sdiv
  83. %1 = sdiv <16 x i16> %a, %b
  84. ret <16 x i16> %1
  85. }
  86. define <16 x i32> @sdiv_v16_i32(<16 x i32> %a, <16 x i32> %b) {
  87. ; CHECK: sdiv_v16_i32
  88. ; CHECK: cost of 320 {{.*}} sdiv
  89. %1 = sdiv <16 x i32> %a, %b
  90. ret <16 x i32> %1
  91. }
  92. define <16 x i64> @sdiv_v16_i64(<16 x i64> %a, <16 x i64> %b) {
  93. ; CHECK: sdiv_v16_i64
  94. ; CHECK: cost of 320 {{.*}} sdiv
  95. %1 = sdiv <16 x i64> %a, %b
  96. ret <16 x i64> %1
  97. }
  98. define <2 x i8> @udiv_v2_i8(<2 x i8> %a, <2 x i8> %b) {
  99. ; CHECK: udiv_v2_i8
  100. ; CHECK: cost of 40 {{.*}} udiv
  101. %1 = udiv <2 x i8> %a, %b
  102. ret <2 x i8> %1
  103. }
  104. define <2 x i16> @udiv_v2_i16(<2 x i16> %a, <2 x i16> %b) {
  105. ; CHECK: udiv_v2_i16
  106. ; CHECK: cost of 40 {{.*}} udiv
  107. %1 = udiv <2 x i16> %a, %b
  108. ret <2 x i16> %1
  109. }
  110. define <2 x i32> @udiv_v2_i32(<2 x i32> %a, <2 x i32> %b) {
  111. ; CHECK: udiv_v2_i32
  112. ; CHECK: cost of 40 {{.*}} udiv
  113. %1 = udiv <2 x i32> %a, %b
  114. ret <2 x i32> %1
  115. }
  116. define <2 x i64> @udiv_v2_i64(<2 x i64> %a, <2 x i64> %b) {
  117. ; CHECK: udiv_v2_i64
  118. ; CHECK: cost of 40 {{.*}} udiv
  119. %1 = udiv <2 x i64> %a, %b
  120. ret <2 x i64> %1
  121. }
  122. define <4 x i8> @udiv_v4_i8(<4 x i8> %a, <4 x i8> %b) {
  123. ; CHECK: udiv_v4_i8
  124. ; CHECK: cost of 10 {{.*}} udiv
  125. %1 = udiv <4 x i8> %a, %b
  126. ret <4 x i8> %1
  127. }
  128. define <4 x i16> @udiv_v4_i16(<4 x i16> %a, <4 x i16> %b) {
  129. ; CHECK: udiv_v4_i16
  130. ; CHECK: cost of 10 {{.*}} udiv
  131. %1 = udiv <4 x i16> %a, %b
  132. ret <4 x i16> %1
  133. }
  134. define <4 x i32> @udiv_v4_i32(<4 x i32> %a, <4 x i32> %b) {
  135. ; CHECK: udiv_v4_i32
  136. ; CHECK: cost of 80 {{.*}} udiv
  137. %1 = udiv <4 x i32> %a, %b
  138. ret <4 x i32> %1
  139. }
  140. define <4 x i64> @udiv_v4_i64(<4 x i64> %a, <4 x i64> %b) {
  141. ; CHECK: udiv_v4_i64
  142. ; CHECK: cost of 80 {{.*}} udiv
  143. %1 = udiv <4 x i64> %a, %b
  144. ret <4 x i64> %1
  145. }
  146. define <8 x i8> @udiv_v8_i8(<8 x i8> %a, <8 x i8> %b) {
  147. ; CHECK: udiv_v8_i8
  148. ; CHECK: cost of 10 {{.*}} udiv
  149. %1 = udiv <8 x i8> %a, %b
  150. ret <8 x i8> %1
  151. }
  152. define <8 x i16> @udiv_v8_i16(<8 x i16> %a, <8 x i16> %b) {
  153. ; CHECK: udiv_v8_i16
  154. ; CHECK: cost of 160 {{.*}} udiv
  155. %1 = udiv <8 x i16> %a, %b
  156. ret <8 x i16> %1
  157. }
  158. define <8 x i32> @udiv_v8_i32(<8 x i32> %a, <8 x i32> %b) {
  159. ; CHECK: udiv_v8_i32
  160. ; CHECK: cost of 160 {{.*}} udiv
  161. %1 = udiv <8 x i32> %a, %b
  162. ret <8 x i32> %1
  163. }
  164. define <8 x i64> @udiv_v8_i64(<8 x i64> %a, <8 x i64> %b) {
  165. ; CHECK: udiv_v8_i64
  166. ; CHECK: cost of 160 {{.*}} udiv
  167. %1 = udiv <8 x i64> %a, %b
  168. ret <8 x i64> %1
  169. }
  170. define <16 x i8> @udiv_v16_i8(<16 x i8> %a, <16 x i8> %b) {
  171. ; CHECK: udiv_v16_i8
  172. ; CHECK: cost of 320 {{.*}} udiv
  173. %1 = udiv <16 x i8> %a, %b
  174. ret <16 x i8> %1
  175. }
  176. define <16 x i16> @udiv_v16_i16(<16 x i16> %a, <16 x i16> %b) {
  177. ; CHECK: udiv_v16_i16
  178. ; CHECK: cost of 320 {{.*}} udiv
  179. %1 = udiv <16 x i16> %a, %b
  180. ret <16 x i16> %1
  181. }
  182. define <16 x i32> @udiv_v16_i32(<16 x i32> %a, <16 x i32> %b) {
  183. ; CHECK: udiv_v16_i32
  184. ; CHECK: cost of 320 {{.*}} udiv
  185. %1 = udiv <16 x i32> %a, %b
  186. ret <16 x i32> %1
  187. }
  188. define <16 x i64> @udiv_v16_i64(<16 x i64> %a, <16 x i64> %b) {
  189. ; CHECK: udiv_v16_i64
  190. ; CHECK: cost of 320 {{.*}} udiv
  191. %1 = udiv <16 x i64> %a, %b
  192. ret <16 x i64> %1
  193. }
  194. define <2 x i8> @srem_v2_i8(<2 x i8> %a, <2 x i8> %b) {
  195. ; CHECK: srem_v2_i8
  196. ; CHECK: cost of 40 {{.*}} srem
  197. %1 = srem <2 x i8> %a, %b
  198. ret <2 x i8> %1
  199. }
  200. define <2 x i16> @srem_v2_i16(<2 x i16> %a, <2 x i16> %b) {
  201. ; CHECK: srem_v2_i16
  202. ; CHECK: cost of 40 {{.*}} srem
  203. %1 = srem <2 x i16> %a, %b
  204. ret <2 x i16> %1
  205. }
  206. define <2 x i32> @srem_v2_i32(<2 x i32> %a, <2 x i32> %b) {
  207. ; CHECK: srem_v2_i32
  208. ; CHECK: cost of 40 {{.*}} srem
  209. %1 = srem <2 x i32> %a, %b
  210. ret <2 x i32> %1
  211. }
  212. define <2 x i64> @srem_v2_i64(<2 x i64> %a, <2 x i64> %b) {
  213. ; CHECK: srem_v2_i64
  214. ; CHECK: cost of 40 {{.*}} srem
  215. %1 = srem <2 x i64> %a, %b
  216. ret <2 x i64> %1
  217. }
  218. define <4 x i8> @srem_v4_i8(<4 x i8> %a, <4 x i8> %b) {
  219. ; CHECK: srem_v4_i8
  220. ; CHECK: cost of 80 {{.*}} srem
  221. %1 = srem <4 x i8> %a, %b
  222. ret <4 x i8> %1
  223. }
  224. define <4 x i16> @srem_v4_i16(<4 x i16> %a, <4 x i16> %b) {
  225. ; CHECK: srem_v4_i16
  226. ; CHECK: cost of 80 {{.*}} srem
  227. %1 = srem <4 x i16> %a, %b
  228. ret <4 x i16> %1
  229. }
  230. define <4 x i32> @srem_v4_i32(<4 x i32> %a, <4 x i32> %b) {
  231. ; CHECK: srem_v4_i32
  232. ; CHECK: cost of 80 {{.*}} srem
  233. %1 = srem <4 x i32> %a, %b
  234. ret <4 x i32> %1
  235. }
  236. define <4 x i64> @srem_v4_i64(<4 x i64> %a, <4 x i64> %b) {
  237. ; CHECK: srem_v4_i64
  238. ; CHECK: cost of 80 {{.*}} srem
  239. %1 = srem <4 x i64> %a, %b
  240. ret <4 x i64> %1
  241. }
  242. define <8 x i8> @srem_v8_i8(<8 x i8> %a, <8 x i8> %b) {
  243. ; CHECK: srem_v8_i8
  244. ; CHECK: cost of 160 {{.*}} srem
  245. %1 = srem <8 x i8> %a, %b
  246. ret <8 x i8> %1
  247. }
  248. define <8 x i16> @srem_v8_i16(<8 x i16> %a, <8 x i16> %b) {
  249. ; CHECK: srem_v8_i16
  250. ; CHECK: cost of 160 {{.*}} srem
  251. %1 = srem <8 x i16> %a, %b
  252. ret <8 x i16> %1
  253. }
  254. define <8 x i32> @srem_v8_i32(<8 x i32> %a, <8 x i32> %b) {
  255. ; CHECK: srem_v8_i32
  256. ; CHECK: cost of 160 {{.*}} srem
  257. %1 = srem <8 x i32> %a, %b
  258. ret <8 x i32> %1
  259. }
  260. define <8 x i64> @srem_v8_i64(<8 x i64> %a, <8 x i64> %b) {
  261. ; CHECK: srem_v8_i64
  262. ; CHECK: cost of 160 {{.*}} srem
  263. %1 = srem <8 x i64> %a, %b
  264. ret <8 x i64> %1
  265. }
  266. define <16 x i8> @srem_v16_i8(<16 x i8> %a, <16 x i8> %b) {
  267. ; CHECK: srem_v16_i8
  268. ; CHECK: cost of 320 {{.*}} srem
  269. %1 = srem <16 x i8> %a, %b
  270. ret <16 x i8> %1
  271. }
  272. define <16 x i16> @srem_v16_i16(<16 x i16> %a, <16 x i16> %b) {
  273. ; CHECK: srem_v16_i16
  274. ; CHECK: cost of 320 {{.*}} srem
  275. %1 = srem <16 x i16> %a, %b
  276. ret <16 x i16> %1
  277. }
  278. define <16 x i32> @srem_v16_i32(<16 x i32> %a, <16 x i32> %b) {
  279. ; CHECK: srem_v16_i32
  280. ; CHECK: cost of 320 {{.*}} srem
  281. %1 = srem <16 x i32> %a, %b
  282. ret <16 x i32> %1
  283. }
  284. define <16 x i64> @srem_v16_i64(<16 x i64> %a, <16 x i64> %b) {
  285. ; CHECK: srem_v16_i64
  286. ; CHECK: cost of 320 {{.*}} srem
  287. %1 = srem <16 x i64> %a, %b
  288. ret <16 x i64> %1
  289. }
  290. define <2 x i8> @urem_v2_i8(<2 x i8> %a, <2 x i8> %b) {
  291. ; CHECK: urem_v2_i8
  292. ; CHECK: cost of 40 {{.*}} urem
  293. %1 = urem <2 x i8> %a, %b
  294. ret <2 x i8> %1
  295. }
  296. define <2 x i16> @urem_v2_i16(<2 x i16> %a, <2 x i16> %b) {
  297. ; CHECK: urem_v2_i16
  298. ; CHECK: cost of 40 {{.*}} urem
  299. %1 = urem <2 x i16> %a, %b
  300. ret <2 x i16> %1
  301. }
  302. define <2 x i32> @urem_v2_i32(<2 x i32> %a, <2 x i32> %b) {
  303. ; CHECK: urem_v2_i32
  304. ; CHECK: cost of 40 {{.*}} urem
  305. %1 = urem <2 x i32> %a, %b
  306. ret <2 x i32> %1
  307. }
  308. define <2 x i64> @urem_v2_i64(<2 x i64> %a, <2 x i64> %b) {
  309. ; CHECK: urem_v2_i64
  310. ; CHECK: cost of 40 {{.*}} urem
  311. %1 = urem <2 x i64> %a, %b
  312. ret <2 x i64> %1
  313. }
  314. define <4 x i8> @urem_v4_i8(<4 x i8> %a, <4 x i8> %b) {
  315. ; CHECK: urem_v4_i8
  316. ; CHECK: cost of 80 {{.*}} urem
  317. %1 = urem <4 x i8> %a, %b
  318. ret <4 x i8> %1
  319. }
  320. define <4 x i16> @urem_v4_i16(<4 x i16> %a, <4 x i16> %b) {
  321. ; CHECK: urem_v4_i16
  322. ; CHECK: cost of 80 {{.*}} urem
  323. %1 = urem <4 x i16> %a, %b
  324. ret <4 x i16> %1
  325. }
  326. define <4 x i32> @urem_v4_i32(<4 x i32> %a, <4 x i32> %b) {
  327. ; CHECK: urem_v4_i32
  328. ; CHECK: cost of 80 {{.*}} urem
  329. %1 = urem <4 x i32> %a, %b
  330. ret <4 x i32> %1
  331. }
  332. define <4 x i64> @urem_v4_i64(<4 x i64> %a, <4 x i64> %b) {
  333. ; CHECK: urem_v4_i64
  334. ; CHECK: cost of 80 {{.*}} urem
  335. %1 = urem <4 x i64> %a, %b
  336. ret <4 x i64> %1
  337. }
  338. define <8 x i8> @urem_v8_i8(<8 x i8> %a, <8 x i8> %b) {
  339. ; CHECK: urem_v8_i8
  340. ; CHECK: cost of 160 {{.*}} urem
  341. %1 = urem <8 x i8> %a, %b
  342. ret <8 x i8> %1
  343. }
  344. define <8 x i16> @urem_v8_i16(<8 x i16> %a, <8 x i16> %b) {
  345. ; CHECK: urem_v8_i16
  346. ; CHECK: cost of 160 {{.*}} urem
  347. %1 = urem <8 x i16> %a, %b
  348. ret <8 x i16> %1
  349. }
  350. define <8 x i32> @urem_v8_i32(<8 x i32> %a, <8 x i32> %b) {
  351. ; CHECK: urem_v8_i32
  352. ; CHECK: cost of 160 {{.*}} urem
  353. %1 = urem <8 x i32> %a, %b
  354. ret <8 x i32> %1
  355. }
  356. define <8 x i64> @urem_v8_i64(<8 x i64> %a, <8 x i64> %b) {
  357. ; CHECK: urem_v8_i64
  358. ; CHECK: cost of 160 {{.*}} urem
  359. %1 = urem <8 x i64> %a, %b
  360. ret <8 x i64> %1
  361. }
  362. define <16 x i8> @urem_v16_i8(<16 x i8> %a, <16 x i8> %b) {
  363. ; CHECK: urem_v16_i8
  364. ; CHECK: cost of 320 {{.*}} urem
  365. %1 = urem <16 x i8> %a, %b
  366. ret <16 x i8> %1
  367. }
  368. define <16 x i16> @urem_v16_i16(<16 x i16> %a, <16 x i16> %b) {
  369. ; CHECK: urem_v16_i16
  370. ; CHECK: cost of 320 {{.*}} urem
  371. %1 = urem <16 x i16> %a, %b
  372. ret <16 x i16> %1
  373. }
  374. define <16 x i32> @urem_v16_i32(<16 x i32> %a, <16 x i32> %b) {
  375. ; CHECK: urem_v16_i32
  376. ; CHECK: cost of 320 {{.*}} urem
  377. %1 = urem <16 x i32> %a, %b
  378. ret <16 x i32> %1
  379. }
  380. define <16 x i64> @urem_v16_i64(<16 x i64> %a, <16 x i64> %b) {
  381. ; CHECK: urem_v16_i64
  382. ; CHECK: cost of 320 {{.*}} urem
  383. %1 = urem <16 x i64> %a, %b
  384. ret <16 x i64> %1
  385. }