assume2.ll 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. ; RUN: opt < %s -instcombine -S | FileCheck %s
  2. target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
  3. target triple = "x86_64-unknown-linux-gnu"
  4. ; Function Attrs: nounwind
  5. declare void @llvm.assume(i1) #1
  6. ; Function Attrs: nounwind uwtable
  7. define i32 @test1(i32 %a) #0 {
  8. entry:
  9. ; CHECK-LABEL: @test1
  10. ; CHECK: call void @llvm.assume
  11. ; CHECK: ret i32 5
  12. %and = and i32 %a, 15
  13. %cmp = icmp eq i32 %and, 5
  14. tail call void @llvm.assume(i1 %cmp)
  15. %and1 = and i32 %a, 7
  16. ret i32 %and1
  17. }
  18. ; Function Attrs: nounwind uwtable
  19. define i32 @test2(i32 %a) #0 {
  20. entry:
  21. ; CHECK-LABEL: @test2
  22. ; CHECK: call void @llvm.assume
  23. ; CHECK: ret i32 2
  24. %and = and i32 %a, 15
  25. %nand = xor i32 %and, -1
  26. %cmp = icmp eq i32 %nand, 4294967285
  27. tail call void @llvm.assume(i1 %cmp)
  28. %and1 = and i32 %a, 7
  29. ret i32 %and1
  30. }
  31. ; Function Attrs: nounwind uwtable
  32. define i32 @test3(i32 %a) #0 {
  33. entry:
  34. ; CHECK-LABEL: @test3
  35. ; CHECK: call void @llvm.assume
  36. ; CHECK: ret i32 5
  37. %v = or i32 %a, 4294967280
  38. %cmp = icmp eq i32 %v, 4294967285
  39. tail call void @llvm.assume(i1 %cmp)
  40. %and1 = and i32 %a, 7
  41. ret i32 %and1
  42. }
  43. ; Function Attrs: nounwind uwtable
  44. define i32 @test4(i32 %a) #0 {
  45. entry:
  46. ; CHECK-LABEL: @test4
  47. ; CHECK: call void @llvm.assume
  48. ; CHECK: ret i32 2
  49. %v = or i32 %a, 4294967280
  50. %nv = xor i32 %v, -1
  51. %cmp = icmp eq i32 %nv, 5
  52. tail call void @llvm.assume(i1 %cmp)
  53. %and1 = and i32 %a, 7
  54. ret i32 %and1
  55. }
  56. ; Function Attrs: nounwind uwtable
  57. define i32 @test5(i32 %a) #0 {
  58. entry:
  59. ; CHECK-LABEL: @test5
  60. ; CHECK: call void @llvm.assume
  61. ; CHECK: ret i32 4
  62. %v = xor i32 %a, 1
  63. %cmp = icmp eq i32 %v, 5
  64. tail call void @llvm.assume(i1 %cmp)
  65. %and1 = and i32 %a, 7
  66. ret i32 %and1
  67. }
  68. ; Function Attrs: nounwind uwtable
  69. define i32 @test6(i32 %a) #0 {
  70. entry:
  71. ; CHECK-LABEL: @test6
  72. ; CHECK: call void @llvm.assume
  73. ; CHECK: ret i32 5
  74. %v = shl i32 %a, 2
  75. %cmp = icmp eq i32 %v, 20
  76. tail call void @llvm.assume(i1 %cmp)
  77. %and1 = and i32 %a, 63
  78. ret i32 %and1
  79. }
  80. ; Function Attrs: nounwind uwtable
  81. define i32 @test7(i32 %a) #0 {
  82. entry:
  83. ; CHECK-LABEL: @test7
  84. ; CHECK: call void @llvm.assume
  85. ; CHECK: ret i32 20
  86. %v = lshr i32 %a, 2
  87. %cmp = icmp eq i32 %v, 5
  88. tail call void @llvm.assume(i1 %cmp)
  89. %and1 = and i32 %a, 252
  90. ret i32 %and1
  91. }
  92. ; Function Attrs: nounwind uwtable
  93. define i32 @test8(i32 %a) #0 {
  94. entry:
  95. ; CHECK-LABEL: @test8
  96. ; CHECK: call void @llvm.assume
  97. ; CHECK: ret i32 20
  98. %v = lshr i32 %a, 2
  99. %cmp = icmp eq i32 %v, 5
  100. tail call void @llvm.assume(i1 %cmp)
  101. %and1 = and i32 %a, 252
  102. ret i32 %and1
  103. }
  104. ; Function Attrs: nounwind uwtable
  105. define i32 @test9(i32 %a) #0 {
  106. entry:
  107. ; CHECK-LABEL: @test9
  108. ; CHECK: call void @llvm.assume
  109. ; CHECK: ret i32 0
  110. %cmp = icmp sgt i32 %a, 5
  111. tail call void @llvm.assume(i1 %cmp)
  112. %and1 = and i32 %a, 2147483648
  113. ret i32 %and1
  114. }
  115. ; Function Attrs: nounwind uwtable
  116. define i32 @test10(i32 %a) #0 {
  117. entry:
  118. ; CHECK-LABEL: @test10
  119. ; CHECK: call void @llvm.assume
  120. ; CHECK: ret i32 -2147483648
  121. %cmp = icmp sle i32 %a, -2
  122. tail call void @llvm.assume(i1 %cmp)
  123. %and1 = and i32 %a, 2147483648
  124. ret i32 %and1
  125. }
  126. ; Function Attrs: nounwind uwtable
  127. define i32 @test11(i32 %a) #0 {
  128. entry:
  129. ; CHECK-LABEL: @test11
  130. ; CHECK: call void @llvm.assume
  131. ; CHECK: ret i32 0
  132. %cmp = icmp ule i32 %a, 256
  133. tail call void @llvm.assume(i1 %cmp)
  134. %and1 = and i32 %a, 3072
  135. ret i32 %and1
  136. }
  137. attributes #0 = { nounwind uwtable }
  138. attributes #1 = { nounwind }