convert-fp.ll 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. ; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
  2. ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s
  3. define i16 @cvt_i16_f32(float %x) {
  4. ; CHECK: cvt.rzi.u16.f32 %rs{{[0-9]+}}, %f{{[0-9]+}};
  5. ; CHECK: ret;
  6. %a = fptoui float %x to i16
  7. ret i16 %a
  8. }
  9. define i16 @cvt_i16_f64(double %x) {
  10. ; CHECK: cvt.rzi.u16.f64 %rs{{[0-9]+}}, %fd{{[0-9]+}};
  11. ; CHECK: ret;
  12. %a = fptoui double %x to i16
  13. ret i16 %a
  14. }
  15. define i32 @cvt_i32_f32(float %x) {
  16. ; CHECK: cvt.rzi.u32.f32 %r{{[0-9]+}}, %f{{[0-9]+}};
  17. ; CHECK: ret;
  18. %a = fptoui float %x to i32
  19. ret i32 %a
  20. }
  21. define i32 @cvt_i32_f64(double %x) {
  22. ; CHECK: cvt.rzi.u32.f64 %r{{[0-9]+}}, %fd{{[0-9]+}};
  23. ; CHECK: ret;
  24. %a = fptoui double %x to i32
  25. ret i32 %a
  26. }
  27. define i64 @cvt_i64_f32(float %x) {
  28. ; CHECK: cvt.rzi.u64.f32 %rd{{[0-9]+}}, %f{{[0-9]+}};
  29. ; CHECK: ret;
  30. %a = fptoui float %x to i64
  31. ret i64 %a
  32. }
  33. define i64 @cvt_i64_f64(double %x) {
  34. ; CHECK: cvt.rzi.u64.f64 %rd{{[0-9]+}}, %fd{{[0-9]+}};
  35. ; CHECK: ret;
  36. %a = fptoui double %x to i64
  37. ret i64 %a
  38. }
  39. define float @cvt_f32_i16(i16 %x) {
  40. ; CHECK: cvt.rn.f32.u16 %f{{[0-9]+}}, %rs{{[0-9]+}};
  41. ; CHECK: ret;
  42. %a = uitofp i16 %x to float
  43. ret float %a
  44. }
  45. define float @cvt_f32_i32(i32 %x) {
  46. ; CHECK: cvt.rn.f32.u32 %f{{[0-9]+}}, %r{{[0-9]+}};
  47. ; CHECK: ret;
  48. %a = uitofp i32 %x to float
  49. ret float %a
  50. }
  51. define float @cvt_f32_i64(i64 %x) {
  52. ; CHECK: cvt.rn.f32.u64 %f{{[0-9]+}}, %rd{{[0-9]+}};
  53. ; CHECK: ret;
  54. %a = uitofp i64 %x to float
  55. ret float %a
  56. }
  57. define float @cvt_f32_f64(double %x) {
  58. ; CHECK: cvt.rn.f32.f64 %f{{[0-9]+}}, %fd{{[0-9]+}};
  59. ; CHECK: ret;
  60. %a = fptrunc double %x to float
  61. ret float %a
  62. }
  63. define float @cvt_f32_s16(i16 %x) {
  64. ; CHECK: cvt.rn.f32.s16 %f{{[0-9]+}}, %rs{{[0-9]+}}
  65. ; CHECK: ret
  66. %a = sitofp i16 %x to float
  67. ret float %a
  68. }
  69. define float @cvt_f32_s32(i32 %x) {
  70. ; CHECK: cvt.rn.f32.s32 %f{{[0-9]+}}, %r{{[0-9]+}}
  71. ; CHECK: ret
  72. %a = sitofp i32 %x to float
  73. ret float %a
  74. }
  75. define float @cvt_f32_s64(i64 %x) {
  76. ; CHECK: cvt.rn.f32.s64 %f{{[0-9]+}}, %rd{{[0-9]+}}
  77. ; CHECK: ret
  78. %a = sitofp i64 %x to float
  79. ret float %a
  80. }
  81. define double @cvt_f64_i16(i16 %x) {
  82. ; CHECK: cvt.rn.f64.u16 %fd{{[0-9]+}}, %rs{{[0-9]+}};
  83. ; CHECK: ret;
  84. %a = uitofp i16 %x to double
  85. ret double %a
  86. }
  87. define double @cvt_f64_i32(i32 %x) {
  88. ; CHECK: cvt.rn.f64.u32 %fd{{[0-9]+}}, %r{{[0-9]+}};
  89. ; CHECK: ret;
  90. %a = uitofp i32 %x to double
  91. ret double %a
  92. }
  93. define double @cvt_f64_i64(i64 %x) {
  94. ; CHECK: cvt.rn.f64.u64 %fd{{[0-9]+}}, %rd{{[0-9]+}};
  95. ; CHECK: ret;
  96. %a = uitofp i64 %x to double
  97. ret double %a
  98. }
  99. define double @cvt_f64_f32(float %x) {
  100. ; CHECK: cvt.f64.f32 %fd{{[0-9]+}}, %f{{[0-9]+}};
  101. ; CHECK: ret;
  102. %a = fpext float %x to double
  103. ret double %a
  104. }
  105. define double @cvt_f64_s16(i16 %x) {
  106. ; CHECK: cvt.rn.f64.s16 %fd{{[0-9]+}}, %rs{{[0-9]+}}
  107. ; CHECK: ret
  108. %a = sitofp i16 %x to double
  109. ret double %a
  110. }
  111. define double @cvt_f64_s32(i32 %x) {
  112. ; CHECK: cvt.rn.f64.s32 %fd{{[0-9]+}}, %r{{[0-9]+}}
  113. ; CHECK: ret
  114. %a = sitofp i32 %x to double
  115. ret double %a
  116. }
  117. define double @cvt_f64_s64(i64 %x) {
  118. ; CHECK: cvt.rn.f64.s64 %fd{{[0-9]+}}, %rd{{[0-9]+}}
  119. ; CHECK: ret
  120. %a = sitofp i64 %x to double
  121. ret double %a
  122. }