st-addrspace.ll 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. ; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s --check-prefix=PTX32
  2. ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s --check-prefix=PTX64
  3. ;; i8
  4. define void @st_global_i8(i8 addrspace(1)* %ptr, i8 %a) {
  5. ; PTX32: st.global.u8 [%r{{[0-9]+}}], %rs{{[0-9]+}}
  6. ; PTX32: ret
  7. ; PTX64: st.global.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
  8. ; PTX64: ret
  9. store i8 %a, i8 addrspace(1)* %ptr
  10. ret void
  11. }
  12. define void @st_shared_i8(i8 addrspace(3)* %ptr, i8 %a) {
  13. ; PTX32: st.shared.u8 [%r{{[0-9]+}}], %rs{{[0-9]+}}
  14. ; PTX32: ret
  15. ; PTX64: st.shared.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
  16. ; PTX64: ret
  17. store i8 %a, i8 addrspace(3)* %ptr
  18. ret void
  19. }
  20. define void @st_local_i8(i8 addrspace(5)* %ptr, i8 %a) {
  21. ; PTX32: st.local.u8 [%r{{[0-9]+}}], %rs{{[0-9]+}}
  22. ; PTX32: ret
  23. ; PTX64: st.local.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
  24. ; PTX64: ret
  25. store i8 %a, i8 addrspace(5)* %ptr
  26. ret void
  27. }
  28. ;; i16
  29. define void @st_global_i16(i16 addrspace(1)* %ptr, i16 %a) {
  30. ; PTX32: st.global.u16 [%r{{[0-9]+}}], %rs{{[0-9]+}}
  31. ; PTX32: ret
  32. ; PTX64: st.global.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
  33. ; PTX64: ret
  34. store i16 %a, i16 addrspace(1)* %ptr
  35. ret void
  36. }
  37. define void @st_shared_i16(i16 addrspace(3)* %ptr, i16 %a) {
  38. ; PTX32: st.shared.u16 [%r{{[0-9]+}}], %rs{{[0-9]+}}
  39. ; PTX32: ret
  40. ; PTX64: st.shared.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
  41. ; PTX64: ret
  42. store i16 %a, i16 addrspace(3)* %ptr
  43. ret void
  44. }
  45. define void @st_local_i16(i16 addrspace(5)* %ptr, i16 %a) {
  46. ; PTX32: st.local.u16 [%r{{[0-9]+}}], %rs{{[0-9]+}}
  47. ; PTX32: ret
  48. ; PTX64: st.local.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
  49. ; PTX64: ret
  50. store i16 %a, i16 addrspace(5)* %ptr
  51. ret void
  52. }
  53. ;; i32
  54. define void @st_global_i32(i32 addrspace(1)* %ptr, i32 %a) {
  55. ; PTX32: st.global.u32 [%r{{[0-9]+}}], %r{{[0-9]+}}
  56. ; PTX32: ret
  57. ; PTX64: st.global.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
  58. ; PTX64: ret
  59. store i32 %a, i32 addrspace(1)* %ptr
  60. ret void
  61. }
  62. define void @st_shared_i32(i32 addrspace(3)* %ptr, i32 %a) {
  63. ; PTX32: st.shared.u32 [%r{{[0-9]+}}], %r{{[0-9]+}}
  64. ; PTX32: ret
  65. ; PTX64: st.shared.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
  66. ; PTX64: ret
  67. store i32 %a, i32 addrspace(3)* %ptr
  68. ret void
  69. }
  70. define void @st_local_i32(i32 addrspace(5)* %ptr, i32 %a) {
  71. ; PTX32: st.local.u32 [%r{{[0-9]+}}], %r{{[0-9]+}}
  72. ; PTX32: ret
  73. ; PTX64: st.local.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
  74. ; PTX64: ret
  75. store i32 %a, i32 addrspace(5)* %ptr
  76. ret void
  77. }
  78. ;; i64
  79. define void @st_global_i64(i64 addrspace(1)* %ptr, i64 %a) {
  80. ; PTX32: st.global.u64 [%r{{[0-9]+}}], %rd{{[0-9]+}}
  81. ; PTX32: ret
  82. ; PTX64: st.global.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
  83. ; PTX64: ret
  84. store i64 %a, i64 addrspace(1)* %ptr
  85. ret void
  86. }
  87. define void @st_shared_i64(i64 addrspace(3)* %ptr, i64 %a) {
  88. ; PTX32: st.shared.u64 [%r{{[0-9]+}}], %rd{{[0-9]+}}
  89. ; PTX32: ret
  90. ; PTX64: st.shared.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
  91. ; PTX64: ret
  92. store i64 %a, i64 addrspace(3)* %ptr
  93. ret void
  94. }
  95. define void @st_local_i64(i64 addrspace(5)* %ptr, i64 %a) {
  96. ; PTX32: st.local.u64 [%r{{[0-9]+}}], %rd{{[0-9]+}}
  97. ; PTX32: ret
  98. ; PTX64: st.local.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
  99. ; PTX64: ret
  100. store i64 %a, i64 addrspace(5)* %ptr
  101. ret void
  102. }
  103. ;; f32
  104. define void @st_global_f32(float addrspace(1)* %ptr, float %a) {
  105. ; PTX32: st.global.f32 [%r{{[0-9]+}}], %f{{[0-9]+}}
  106. ; PTX32: ret
  107. ; PTX64: st.global.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
  108. ; PTX64: ret
  109. store float %a, float addrspace(1)* %ptr
  110. ret void
  111. }
  112. define void @st_shared_f32(float addrspace(3)* %ptr, float %a) {
  113. ; PTX32: st.shared.f32 [%r{{[0-9]+}}], %f{{[0-9]+}}
  114. ; PTX32: ret
  115. ; PTX64: st.shared.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
  116. ; PTX64: ret
  117. store float %a, float addrspace(3)* %ptr
  118. ret void
  119. }
  120. define void @st_local_f32(float addrspace(5)* %ptr, float %a) {
  121. ; PTX32: st.local.f32 [%r{{[0-9]+}}], %f{{[0-9]+}}
  122. ; PTX32: ret
  123. ; PTX64: st.local.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
  124. ; PTX64: ret
  125. store float %a, float addrspace(5)* %ptr
  126. ret void
  127. }
  128. ;; f64
  129. define void @st_global_f64(double addrspace(1)* %ptr, double %a) {
  130. ; PTX32: st.global.f64 [%r{{[0-9]+}}], %fd{{[0-9]+}}
  131. ; PTX32: ret
  132. ; PTX64: st.global.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
  133. ; PTX64: ret
  134. store double %a, double addrspace(1)* %ptr
  135. ret void
  136. }
  137. define void @st_shared_f64(double addrspace(3)* %ptr, double %a) {
  138. ; PTX32: st.shared.f64 [%r{{[0-9]+}}], %fd{{[0-9]+}}
  139. ; PTX32: ret
  140. ; PTX64: st.shared.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
  141. ; PTX64: ret
  142. store double %a, double addrspace(3)* %ptr
  143. ret void
  144. }
  145. define void @st_local_f64(double addrspace(5)* %ptr, double %a) {
  146. ; PTX32: st.local.f64 [%r{{[0-9]+}}], %fd{{[0-9]+}}
  147. ; PTX32: ret
  148. ; PTX64: st.local.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
  149. ; PTX64: ret
  150. store double %a, double addrspace(5)* %ptr
  151. ret void
  152. }