fcmp-special.ll 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. ; RUN: opt < %s -instcombine -S | FileCheck %s
  2. ; Infinity
  3. ; CHECK: inf0
  4. ; CHECK: ret i1 false
  5. define i1 @inf0(double %arg) nounwind readnone {
  6. %tmp = fcmp ogt double %arg, 0x7FF0000000000000
  7. ret i1 %tmp
  8. }
  9. ; CHECK: inf1
  10. ; CHECK: ret i1 true
  11. define i1 @inf1(double %arg) nounwind readnone {
  12. %tmp = fcmp ule double %arg, 0x7FF0000000000000
  13. ret i1 %tmp
  14. }
  15. ; Negative infinity
  16. ; CHECK: ninf0
  17. ; CHECK: ret i1 false
  18. define i1 @ninf0(double %arg) nounwind readnone {
  19. %tmp = fcmp olt double %arg, 0xFFF0000000000000
  20. ret i1 %tmp
  21. }
  22. ; CHECK: ninf1
  23. ; CHECK: ret i1 true
  24. define i1 @ninf1(double %arg) nounwind readnone {
  25. %tmp = fcmp uge double %arg, 0xFFF0000000000000
  26. ret i1 %tmp
  27. }
  28. ; NaNs
  29. ; CHECK: nan0
  30. ; CHECK: ret i1 false
  31. define i1 @nan0(double %arg) nounwind readnone {
  32. %tmp = fcmp ord double %arg, 0x7FF00000FFFFFFFF
  33. ret i1 %tmp
  34. }
  35. ; CHECK: nan1
  36. ; CHECK: ret i1 false
  37. define i1 @nan1(double %arg) nounwind readnone {
  38. %tmp = fcmp oeq double %arg, 0x7FF00000FFFFFFFF
  39. ret i1 %tmp
  40. }
  41. ; CHECK: nan2
  42. ; CHECK: ret i1 false
  43. define i1 @nan2(double %arg) nounwind readnone {
  44. %tmp = fcmp olt double %arg, 0x7FF00000FFFFFFFF
  45. ret i1 %tmp
  46. }
  47. ; CHECK: nan3
  48. ; CHECK: ret i1 true
  49. define i1 @nan3(double %arg) nounwind readnone {
  50. %tmp = fcmp uno double %arg, 0x7FF00000FFFFFFFF
  51. ret i1 %tmp
  52. }
  53. ; CHECK: nan4
  54. ; CHECK: ret i1 true
  55. define i1 @nan4(double %arg) nounwind readnone {
  56. %tmp = fcmp une double %arg, 0x7FF00000FFFFFFFF
  57. ret i1 %tmp
  58. }
  59. ; CHECK: nan5
  60. ; CHECK: ret i1 true
  61. define i1 @nan5(double %arg) nounwind readnone {
  62. %tmp = fcmp ult double %arg, 0x7FF00000FFFFFFFF
  63. ret i1 %tmp
  64. }
  65. ; Negative NaN.
  66. ; CHECK: nnan0
  67. ; CHECK: ret i1 false
  68. define i1 @nnan0(double %arg) nounwind readnone {
  69. %tmp = fcmp ord double %arg, 0xFFF00000FFFFFFFF
  70. ret i1 %tmp
  71. }
  72. ; CHECK: nnan1
  73. ; CHECK: ret i1 false
  74. define i1 @nnan1(double %arg) nounwind readnone {
  75. %tmp = fcmp oeq double %arg, 0xFFF00000FFFFFFFF
  76. ret i1 %tmp
  77. }
  78. ; CHECK: nnan2
  79. ; CHECK: ret i1 false
  80. define i1 @nnan2(double %arg) nounwind readnone {
  81. %tmp = fcmp olt double %arg, 0xFFF00000FFFFFFFF
  82. ret i1 %tmp
  83. }
  84. ; CHECK: nnan3
  85. ; CHECK: ret i1 true
  86. define i1 @nnan3(double %arg) nounwind readnone {
  87. %tmp = fcmp uno double %arg, 0xFFF00000FFFFFFFF
  88. ret i1 %tmp
  89. }
  90. ; CHECK: nnan4
  91. ; CHECK: ret i1 true
  92. define i1 @nnan4(double %arg) nounwind readnone {
  93. %tmp = fcmp une double %arg, 0xFFF00000FFFFFFFF
  94. ret i1 %tmp
  95. }
  96. ; CHECK: nnan5
  97. ; CHECK: ret i1 true
  98. define i1 @nnan5(double %arg) nounwind readnone {
  99. %tmp = fcmp ult double %arg, 0xFFF00000FFFFFFFF
  100. ret i1 %tmp
  101. }
  102. ; Negative zero.
  103. ; CHECK: nzero0
  104. ; CHECK: ret i1 true
  105. define i1 @nzero0() {
  106. %tmp = fcmp oeq double 0.0, -0.0
  107. ret i1 %tmp
  108. }
  109. ; CHECK: nzero1
  110. ; CHECK: ret i1 false
  111. define i1 @nzero1() {
  112. %tmp = fcmp ogt double 0.0, -0.0
  113. ret i1 %tmp
  114. }
  115. ; Misc.
  116. ; CHECK: misc0
  117. ; CHECK: %tmp = fcmp ord double %arg, 0.000000e+00
  118. ; CHECK: ret i1 %tmp
  119. define i1 @misc0(double %arg) {
  120. %tmp = fcmp oeq double %arg, %arg
  121. ret i1 %tmp
  122. }
  123. ; CHECK: misc1
  124. ; CHECK: ret i1 false
  125. define i1 @misc1(double %arg) {
  126. %tmp = fcmp one double %arg, %arg
  127. ret i1 %tmp
  128. }