overflow-intrinsics.ll 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. ; RUN: opt -codegenprepare -S < %s | FileCheck %s
  2. target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
  3. target triple = "x86_64-apple-darwin10.0.0"
  4. ; CHECK-LABEL: @test1(
  5. ; CHECK: llvm.uadd.with.overflow
  6. ; CHECK: ret i64
  7. define i64 @test1(i64 %a, i64 %b) nounwind ssp {
  8. entry:
  9. %add = add i64 %b, %a
  10. %cmp = icmp ult i64 %add, %a
  11. %Q = select i1 %cmp, i64 %b, i64 42
  12. ret i64 %Q
  13. }
  14. ; CHECK-LABEL: @test2(
  15. ; CHECK: llvm.uadd.with.overflow
  16. ; CHECK: ret i64
  17. define i64 @test2(i64 %a, i64 %b) nounwind ssp {
  18. entry:
  19. %add = add i64 %b, %a
  20. %cmp = icmp ult i64 %add, %b
  21. %Q = select i1 %cmp, i64 %b, i64 42
  22. ret i64 %Q
  23. }
  24. ; CHECK-LABEL: @test3(
  25. ; CHECK: llvm.uadd.with.overflow
  26. ; CHECK: ret i64
  27. define i64 @test3(i64 %a, i64 %b) nounwind ssp {
  28. entry:
  29. %add = add i64 %b, %a
  30. %cmp = icmp ugt i64 %b, %add
  31. %Q = select i1 %cmp, i64 %b, i64 42
  32. ret i64 %Q
  33. }
  34. ; CHECK-LABEL: @test4(
  35. ; CHECK: llvm.uadd.with.overflow
  36. ; CHECK: extractvalue
  37. ; CHECK: extractvalue
  38. ; CHECK: select
  39. define i64 @test4(i64 %a, i64 %b, i1 %c) nounwind ssp {
  40. entry:
  41. %add = add i64 %b, %a
  42. %cmp = icmp ugt i64 %b, %add
  43. br i1 %c, label %next, label %exit
  44. next:
  45. %Q = select i1 %cmp, i64 %b, i64 42
  46. ret i64 %Q
  47. exit:
  48. ret i64 0
  49. }
  50. ; CHECK-LABEL: @test5(
  51. ; CHECK-NOT: llvm.uadd.with.overflow
  52. ; CHECK: next
  53. define i64 @test5(i64 %a, i64 %b, i64* %ptr, i1 %c) nounwind ssp {
  54. entry:
  55. %add = add i64 %b, %a
  56. store i64 %add, i64* %ptr
  57. %cmp = icmp ugt i64 %b, %add
  58. br i1 %c, label %next, label %exit
  59. next:
  60. %Q = select i1 %cmp, i64 %b, i64 42
  61. ret i64 %Q
  62. exit:
  63. ret i64 0
  64. }