2
0

arithmetic-int.ll 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. ; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
  2. ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s
  3. ;; These tests should run for all targets
  4. ;;===-- Basic instruction selection tests ---------------------------------===;;
  5. ;;; i64
  6. define i64 @add_i64(i64 %a, i64 %b) {
  7. ; CHECK: add.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  8. ; CHECK: ret
  9. %ret = add i64 %a, %b
  10. ret i64 %ret
  11. }
  12. define i64 @sub_i64(i64 %a, i64 %b) {
  13. ; CHECK: sub.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  14. ; CHECK: ret
  15. %ret = sub i64 %a, %b
  16. ret i64 %ret
  17. }
  18. define i64 @mul_i64(i64 %a, i64 %b) {
  19. ; CHECK: mul.lo.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  20. ; CHECK: ret
  21. %ret = mul i64 %a, %b
  22. ret i64 %ret
  23. }
  24. define i64 @sdiv_i64(i64 %a, i64 %b) {
  25. ; CHECK: div.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  26. ; CHECK: ret
  27. %ret = sdiv i64 %a, %b
  28. ret i64 %ret
  29. }
  30. define i64 @udiv_i64(i64 %a, i64 %b) {
  31. ; CHECK: div.u64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  32. ; CHECK: ret
  33. %ret = udiv i64 %a, %b
  34. ret i64 %ret
  35. }
  36. define i64 @srem_i64(i64 %a, i64 %b) {
  37. ; CHECK: rem.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  38. ; CHECK: ret
  39. %ret = srem i64 %a, %b
  40. ret i64 %ret
  41. }
  42. define i64 @urem_i64(i64 %a, i64 %b) {
  43. ; CHECK: rem.u64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  44. ; CHECK: ret
  45. %ret = urem i64 %a, %b
  46. ret i64 %ret
  47. }
  48. define i64 @and_i64(i64 %a, i64 %b) {
  49. ; CHECK: and.b64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  50. ; CHECK: ret
  51. %ret = and i64 %a, %b
  52. ret i64 %ret
  53. }
  54. define i64 @or_i64(i64 %a, i64 %b) {
  55. ; CHECK: or.b64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  56. ; CHECK: ret
  57. %ret = or i64 %a, %b
  58. ret i64 %ret
  59. }
  60. define i64 @xor_i64(i64 %a, i64 %b) {
  61. ; CHECK: xor.b64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %rd{{[0-9]+}}
  62. ; CHECK: ret
  63. %ret = xor i64 %a, %b
  64. ret i64 %ret
  65. }
  66. define i64 @shl_i64(i64 %a, i64 %b) {
  67. ; PTX requires 32-bit shift amount
  68. ; CHECK: shl.b64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %r{{[0-9]+}}
  69. ; CHECK: ret
  70. %ret = shl i64 %a, %b
  71. ret i64 %ret
  72. }
  73. define i64 @ashr_i64(i64 %a, i64 %b) {
  74. ; PTX requires 32-bit shift amount
  75. ; CHECK: shr.s64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %r{{[0-9]+}}
  76. ; CHECK: ret
  77. %ret = ashr i64 %a, %b
  78. ret i64 %ret
  79. }
  80. define i64 @lshr_i64(i64 %a, i64 %b) {
  81. ; PTX requires 32-bit shift amount
  82. ; CHECK: shr.u64 %rd{{[0-9]+}}, %rd{{[0-9]+}}, %r{{[0-9]+}}
  83. ; CHECK: ret
  84. %ret = lshr i64 %a, %b
  85. ret i64 %ret
  86. }
  87. ;;; i32
  88. define i32 @add_i32(i32 %a, i32 %b) {
  89. ; CHECK: add.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  90. ; CHECK: ret
  91. %ret = add i32 %a, %b
  92. ret i32 %ret
  93. }
  94. define i32 @sub_i32(i32 %a, i32 %b) {
  95. ; CHECK: sub.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  96. ; CHECK: ret
  97. %ret = sub i32 %a, %b
  98. ret i32 %ret
  99. }
  100. define i32 @mul_i32(i32 %a, i32 %b) {
  101. ; CHECK: mul.lo.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  102. ; CHECK: ret
  103. %ret = mul i32 %a, %b
  104. ret i32 %ret
  105. }
  106. define i32 @sdiv_i32(i32 %a, i32 %b) {
  107. ; CHECK: div.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  108. ; CHECK: ret
  109. %ret = sdiv i32 %a, %b
  110. ret i32 %ret
  111. }
  112. define i32 @udiv_i32(i32 %a, i32 %b) {
  113. ; CHECK: div.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  114. ; CHECK: ret
  115. %ret = udiv i32 %a, %b
  116. ret i32 %ret
  117. }
  118. define i32 @srem_i32(i32 %a, i32 %b) {
  119. ; CHECK: rem.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  120. ; CHECK: ret
  121. %ret = srem i32 %a, %b
  122. ret i32 %ret
  123. }
  124. define i32 @urem_i32(i32 %a, i32 %b) {
  125. ; CHECK: rem.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  126. ; CHECK: ret
  127. %ret = urem i32 %a, %b
  128. ret i32 %ret
  129. }
  130. define i32 @and_i32(i32 %a, i32 %b) {
  131. ; CHECK: and.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  132. ; CHECK: ret
  133. %ret = and i32 %a, %b
  134. ret i32 %ret
  135. }
  136. define i32 @or_i32(i32 %a, i32 %b) {
  137. ; CHECK: or.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  138. ; CHECK: ret
  139. %ret = or i32 %a, %b
  140. ret i32 %ret
  141. }
  142. define i32 @xor_i32(i32 %a, i32 %b) {
  143. ; CHECK: xor.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  144. ; CHECK: ret
  145. %ret = xor i32 %a, %b
  146. ret i32 %ret
  147. }
  148. define i32 @shl_i32(i32 %a, i32 %b) {
  149. ; CHECK: shl.b32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  150. ; CHECK: ret
  151. %ret = shl i32 %a, %b
  152. ret i32 %ret
  153. }
  154. define i32 @ashr_i32(i32 %a, i32 %b) {
  155. ; CHECK: shr.s32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  156. ; CHECK: ret
  157. %ret = ashr i32 %a, %b
  158. ret i32 %ret
  159. }
  160. define i32 @lshr_i32(i32 %a, i32 %b) {
  161. ; CHECK: shr.u32 %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
  162. ; CHECK: ret
  163. %ret = lshr i32 %a, %b
  164. ret i32 %ret
  165. }
  166. ;;; i16
  167. define i16 @add_i16(i16 %a, i16 %b) {
  168. ; CHECK: add.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  169. ; CHECK: ret
  170. %ret = add i16 %a, %b
  171. ret i16 %ret
  172. }
  173. define i16 @sub_i16(i16 %a, i16 %b) {
  174. ; CHECK: sub.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  175. ; CHECK: ret
  176. %ret = sub i16 %a, %b
  177. ret i16 %ret
  178. }
  179. define i16 @mul_i16(i16 %a, i16 %b) {
  180. ; CHECK: mul.lo.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  181. ; CHECK: ret
  182. %ret = mul i16 %a, %b
  183. ret i16 %ret
  184. }
  185. define i16 @sdiv_i16(i16 %a, i16 %b) {
  186. ; CHECK: div.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  187. ; CHECK: ret
  188. %ret = sdiv i16 %a, %b
  189. ret i16 %ret
  190. }
  191. define i16 @udiv_i16(i16 %a, i16 %b) {
  192. ; CHECK: div.u16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  193. ; CHECK: ret
  194. %ret = udiv i16 %a, %b
  195. ret i16 %ret
  196. }
  197. define i16 @srem_i16(i16 %a, i16 %b) {
  198. ; CHECK: rem.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  199. ; CHECK: ret
  200. %ret = srem i16 %a, %b
  201. ret i16 %ret
  202. }
  203. define i16 @urem_i16(i16 %a, i16 %b) {
  204. ; CHECK: rem.u16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  205. ; CHECK: ret
  206. %ret = urem i16 %a, %b
  207. ret i16 %ret
  208. }
  209. define i16 @and_i16(i16 %a, i16 %b) {
  210. ; CHECK: and.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  211. ; CHECK: ret
  212. %ret = and i16 %a, %b
  213. ret i16 %ret
  214. }
  215. define i16 @or_i16(i16 %a, i16 %b) {
  216. ; CHECK: or.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  217. ; CHECK: ret
  218. %ret = or i16 %a, %b
  219. ret i16 %ret
  220. }
  221. define i16 @xor_i16(i16 %a, i16 %b) {
  222. ; CHECK: xor.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %rs{{[0-9]+}}
  223. ; CHECK: ret
  224. %ret = xor i16 %a, %b
  225. ret i16 %ret
  226. }
  227. define i16 @shl_i16(i16 %a, i16 %b) {
  228. ; PTX requires 32-bit shift amount
  229. ; CHECK: shl.b16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %r{{[0-9]+}}
  230. ; CHECK: ret
  231. %ret = shl i16 %a, %b
  232. ret i16 %ret
  233. }
  234. define i16 @ashr_i16(i16 %a, i16 %b) {
  235. ; PTX requires 32-bit shift amount
  236. ; CHECK: shr.s16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %r{{[0-9]+}}
  237. ; CHECK: ret
  238. %ret = ashr i16 %a, %b
  239. ret i16 %ret
  240. }
  241. define i16 @lshr_i16(i16 %a, i16 %b) {
  242. ; PTX requires 32-bit shift amount
  243. ; CHECK: shr.u16 %rs{{[0-9]+}}, %rs{{[0-9]+}}, %r{{[0-9]+}}
  244. ; CHECK: ret
  245. %ret = lshr i16 %a, %b
  246. ret i16 %ret
  247. }