addrspacecast.ll 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. ; RUN: llc < %s -march=nvptx -mcpu=sm_20 -disable-nvptx-favor-non-generic | FileCheck %s -check-prefix=PTX32
  2. ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -disable-nvptx-favor-non-generic | FileCheck %s -check-prefix=PTX64
  3. define i32 @conv1(i32 addrspace(1)* %ptr) {
  4. ; PTX32: conv1
  5. ; PTX32: cvta.global.u32
  6. ; PTX32: ld.u32
  7. ; PTX64: conv1
  8. ; PTX64: cvta.global.u64
  9. ; PTX64: ld.u32
  10. %genptr = addrspacecast i32 addrspace(1)* %ptr to i32*
  11. %val = load i32, i32* %genptr
  12. ret i32 %val
  13. }
  14. define i32 @conv2(i32 addrspace(3)* %ptr) {
  15. ; PTX32: conv2
  16. ; PTX32: cvta.shared.u32
  17. ; PTX32: ld.u32
  18. ; PTX64: conv2
  19. ; PTX64: cvta.shared.u64
  20. ; PTX64: ld.u32
  21. %genptr = addrspacecast i32 addrspace(3)* %ptr to i32*
  22. %val = load i32, i32* %genptr
  23. ret i32 %val
  24. }
  25. define i32 @conv3(i32 addrspace(4)* %ptr) {
  26. ; PTX32: conv3
  27. ; PTX32: cvta.const.u32
  28. ; PTX32: ld.u32
  29. ; PTX64: conv3
  30. ; PTX64: cvta.const.u64
  31. ; PTX64: ld.u32
  32. %genptr = addrspacecast i32 addrspace(4)* %ptr to i32*
  33. %val = load i32, i32* %genptr
  34. ret i32 %val
  35. }
  36. define i32 @conv4(i32 addrspace(5)* %ptr) {
  37. ; PTX32: conv4
  38. ; PTX32: cvta.local.u32
  39. ; PTX32: ld.u32
  40. ; PTX64: conv4
  41. ; PTX64: cvta.local.u64
  42. ; PTX64: ld.u32
  43. %genptr = addrspacecast i32 addrspace(5)* %ptr to i32*
  44. %val = load i32, i32* %genptr
  45. ret i32 %val
  46. }
  47. define i32 @conv5(i32* %ptr) {
  48. ; PTX32: conv5
  49. ; PTX32: cvta.to.global.u32
  50. ; PTX32: ld.global.u32
  51. ; PTX64: conv5
  52. ; PTX64: cvta.to.global.u64
  53. ; PTX64: ld.global.u32
  54. %specptr = addrspacecast i32* %ptr to i32 addrspace(1)*
  55. %val = load i32, i32 addrspace(1)* %specptr
  56. ret i32 %val
  57. }
  58. define i32 @conv6(i32* %ptr) {
  59. ; PTX32: conv6
  60. ; PTX32: cvta.to.shared.u32
  61. ; PTX32: ld.shared.u32
  62. ; PTX64: conv6
  63. ; PTX64: cvta.to.shared.u64
  64. ; PTX64: ld.shared.u32
  65. %specptr = addrspacecast i32* %ptr to i32 addrspace(3)*
  66. %val = load i32, i32 addrspace(3)* %specptr
  67. ret i32 %val
  68. }
  69. define i32 @conv7(i32* %ptr) {
  70. ; PTX32: conv7
  71. ; PTX32: cvta.to.const.u32
  72. ; PTX32: ld.const.u32
  73. ; PTX64: conv7
  74. ; PTX64: cvta.to.const.u64
  75. ; PTX64: ld.const.u32
  76. %specptr = addrspacecast i32* %ptr to i32 addrspace(4)*
  77. %val = load i32, i32 addrspace(4)* %specptr
  78. ret i32 %val
  79. }
  80. define i32 @conv8(i32* %ptr) {
  81. ; PTX32: conv8
  82. ; PTX32: cvta.to.local.u32
  83. ; PTX32: ld.local.u32
  84. ; PTX64: conv8
  85. ; PTX64: cvta.to.local.u64
  86. ; PTX64: ld.local.u32
  87. %specptr = addrspacecast i32* %ptr to i32 addrspace(5)*
  88. %val = load i32, i32 addrspace(5)* %specptr
  89. ret i32 %val
  90. }