2
0

fast-math-flags.ll 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. ; RUN: llvm-as < %s | llvm-dis | FileCheck %s
  2. ; RUN: opt -S < %s | FileCheck %s
  3. ; RUN: verify-uselistorder %s
  4. @addr = external global i64
  5. @select = external global i1
  6. @vec = external global <3 x float>
  7. @arr = external global [3 x float]
  8. define float @none(float %x, float %y) {
  9. entry:
  10. ; CHECK: %vec = load <3 x float>, <3 x float>* @vec
  11. %vec = load <3 x float>, <3 x float>* @vec
  12. ; CHECK: %select = load i1, i1* @select
  13. %select = load i1, i1* @select
  14. ; CHECK: %arr = load [3 x float], [3 x float]* @arr
  15. %arr = load [3 x float], [3 x float]* @arr
  16. ; CHECK: %a = fadd float %x, %y
  17. %a = fadd float %x, %y
  18. ; CHECK: %a_vec = fadd <3 x float> %vec, %vec
  19. %a_vec = fadd <3 x float> %vec, %vec
  20. ; CHECK: %b = fsub float %x, %y
  21. %b = fsub float %x, %y
  22. ; CHECK: %b_vec = fsub <3 x float> %vec, %vec
  23. %b_vec = fsub <3 x float> %vec, %vec
  24. ; CHECK: %c = fmul float %x, %y
  25. %c = fmul float %x, %y
  26. ; CHECK: %c_vec = fmul <3 x float> %vec, %vec
  27. %c_vec = fmul <3 x float> %vec, %vec
  28. ; CHECK: %d = fdiv float %x, %y
  29. %d = fdiv float %x, %y
  30. ; CHECK: %d_vec = fdiv <3 x float> %vec, %vec
  31. %d_vec = fdiv <3 x float> %vec, %vec
  32. ; CHECK: %e = frem float %x, %y
  33. %e = frem float %x, %y
  34. ; CHECK: %e_vec = frem <3 x float> %vec, %vec
  35. %e_vec = frem <3 x float> %vec, %vec
  36. ; CHECK: ret float %e
  37. ret float %e
  38. }
  39. ; CHECK: no_nan
  40. define float @no_nan(float %x, float %y) {
  41. entry:
  42. ; CHECK: %vec = load <3 x float>, <3 x float>* @vec
  43. %vec = load <3 x float>, <3 x float>* @vec
  44. ; CHECK: %select = load i1, i1* @select
  45. %select = load i1, i1* @select
  46. ; CHECK: %arr = load [3 x float], [3 x float]* @arr
  47. %arr = load [3 x float], [3 x float]* @arr
  48. ; CHECK: %a = fadd nnan float %x, %y
  49. %a = fadd nnan float %x, %y
  50. ; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec
  51. %a_vec = fadd nnan <3 x float> %vec, %vec
  52. ; CHECK: %b = fsub nnan float %x, %y
  53. %b = fsub nnan float %x, %y
  54. ; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec
  55. %b_vec = fsub nnan <3 x float> %vec, %vec
  56. ; CHECK: %c = fmul nnan float %x, %y
  57. %c = fmul nnan float %x, %y
  58. ; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec
  59. %c_vec = fmul nnan <3 x float> %vec, %vec
  60. ; CHECK: %d = fdiv nnan float %x, %y
  61. %d = fdiv nnan float %x, %y
  62. ; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec
  63. %d_vec = fdiv nnan <3 x float> %vec, %vec
  64. ; CHECK: %e = frem nnan float %x, %y
  65. %e = frem nnan float %x, %y
  66. ; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec
  67. %e_vec = frem nnan <3 x float> %vec, %vec
  68. ; CHECK: ret float %e
  69. ret float %e
  70. }
  71. ; CHECK: no_nan_inf
  72. define float @no_nan_inf(float %x, float %y) {
  73. entry:
  74. ; CHECK: %vec = load <3 x float>, <3 x float>* @vec
  75. %vec = load <3 x float>, <3 x float>* @vec
  76. ; CHECK: %select = load i1, i1* @select
  77. %select = load i1, i1* @select
  78. ; CHECK: %arr = load [3 x float], [3 x float]* @arr
  79. %arr = load [3 x float], [3 x float]* @arr
  80. ; CHECK: %a = fadd nnan ninf float %x, %y
  81. %a = fadd ninf nnan float %x, %y
  82. ; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec
  83. %a_vec = fadd nnan <3 x float> %vec, %vec
  84. ; CHECK: %b = fsub nnan float %x, %y
  85. %b = fsub nnan float %x, %y
  86. ; CHECK: %b_vec = fsub nnan ninf <3 x float> %vec, %vec
  87. %b_vec = fsub ninf nnan <3 x float> %vec, %vec
  88. ; CHECK: %c = fmul nnan float %x, %y
  89. %c = fmul nnan float %x, %y
  90. ; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec
  91. %c_vec = fmul nnan <3 x float> %vec, %vec
  92. ; CHECK: %d = fdiv nnan ninf float %x, %y
  93. %d = fdiv ninf nnan float %x, %y
  94. ; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec
  95. %d_vec = fdiv nnan <3 x float> %vec, %vec
  96. ; CHECK: %e = frem nnan float %x, %y
  97. %e = frem nnan float %x, %y
  98. ; CHECK: %e_vec = frem nnan ninf <3 x float> %vec, %vec
  99. %e_vec = frem ninf nnan <3 x float> %vec, %vec
  100. ; CHECK: ret float %e
  101. ret float %e
  102. }
  103. ; CHECK: mixed_flags
  104. define float @mixed_flags(float %x, float %y) {
  105. entry:
  106. ; CHECK: %vec = load <3 x float>, <3 x float>* @vec
  107. %vec = load <3 x float>, <3 x float>* @vec
  108. ; CHECK: %select = load i1, i1* @select
  109. %select = load i1, i1* @select
  110. ; CHECK: %arr = load [3 x float], [3 x float]* @arr
  111. %arr = load [3 x float], [3 x float]* @arr
  112. ; CHECK: %a = fadd nnan ninf float %x, %y
  113. %a = fadd ninf nnan float %x, %y
  114. ; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec
  115. %a_vec = fadd nnan <3 x float> %vec, %vec
  116. ; CHECK: %b = fsub fast float %x, %y
  117. %b = fsub nnan nsz fast float %x, %y
  118. ; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec
  119. %b_vec = fsub nnan <3 x float> %vec, %vec
  120. ; CHECK: %c = fmul fast float %x, %y
  121. %c = fmul nsz fast arcp float %x, %y
  122. ; CHECK: %c_vec = fmul nsz <3 x float> %vec, %vec
  123. %c_vec = fmul nsz <3 x float> %vec, %vec
  124. ; CHECK: %d = fdiv nnan ninf arcp float %x, %y
  125. %d = fdiv arcp ninf nnan float %x, %y
  126. ; CHECK: %d_vec = fdiv fast <3 x float> %vec, %vec
  127. %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec
  128. ; CHECK: %e = frem nnan nsz float %x, %y
  129. %e = frem nnan nsz float %x, %y
  130. ; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec
  131. %e_vec = frem nnan <3 x float> %vec, %vec
  132. ; CHECK: ret float %e
  133. ret float %e
  134. }