assume.ll 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. ; RUN: opt -S -jump-threading -dce < %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 uwtable
  5. define i32 @test1(i32 %a, i32 %b) #0 {
  6. entry:
  7. %cmp = icmp sgt i32 %a, 5
  8. tail call void @llvm.assume(i1 %cmp)
  9. %cmp1 = icmp sgt i32 %b, 1234
  10. br i1 %cmp1, label %if.then, label %if.else
  11. ; CHECK-LABEL: @test1
  12. ; CHECK: icmp sgt i32 %a, 5
  13. ; CHECK: call void @llvm.assume
  14. ; CHECK-NOT: icmp sgt i32 %a, 3
  15. ; CHECK: ret i32
  16. if.then: ; preds = %entry
  17. %cmp2 = icmp sgt i32 %a, 3
  18. br i1 %cmp2, label %if.then3, label %return
  19. if.then3: ; preds = %if.then
  20. tail call void (...) @bar() #1
  21. br label %return
  22. if.else: ; preds = %entry
  23. tail call void (...) @car() #1
  24. br label %return
  25. return: ; preds = %if.else, %if.then, %if.then3
  26. %retval.0 = phi i32 [ 1, %if.then3 ], [ 0, %if.then ], [ 0, %if.else ]
  27. ret i32 %retval.0
  28. }
  29. define i32 @test2(i32 %a) #0 {
  30. entry:
  31. %cmp = icmp sgt i32 %a, 5
  32. tail call void @llvm.assume(i1 %cmp)
  33. %cmp1 = icmp sgt i32 %a, 3
  34. br i1 %cmp1, label %if.then, label %return
  35. ; CHECK-LABEL: @test2
  36. ; CHECK: icmp sgt i32 %a, 5
  37. ; CHECK: tail call void @llvm.assume
  38. ; CHECK: tail call void (...) @bar()
  39. ; CHECK: ret i32 1
  40. if.then: ; preds = %entry
  41. tail call void (...) @bar() #1
  42. br label %return
  43. return: ; preds = %entry, %if.then
  44. %retval.0 = phi i32 [ 1, %if.then ], [ 0, %entry ]
  45. ret i32 %retval.0
  46. }
  47. ; Function Attrs: nounwind
  48. declare void @llvm.assume(i1) #1
  49. declare void @bar(...)
  50. declare void @car(...)
  51. attributes #0 = { nounwind uwtable }
  52. attributes #1 = { nounwind }