switch-to-icmp.ll 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. ; RUN: opt -S -simplifycfg < %s | FileCheck %s
  2. define zeroext i1 @test1(i32 %x) nounwind readnone ssp noredzone {
  3. entry:
  4. switch i32 %x, label %lor.rhs [
  5. i32 2, label %lor.end
  6. i32 1, label %lor.end
  7. i32 3, label %lor.end
  8. ]
  9. lor.rhs:
  10. br label %lor.end
  11. lor.end:
  12. %0 = phi i1 [ true, %entry ], [ false, %lor.rhs ], [ true, %entry ], [ true, %entry ]
  13. ret i1 %0
  14. ; CHECK-LABEL: @test1(
  15. ; CHECK: %x.off = add i32 %x, -1
  16. ; CHECK: %switch = icmp ult i32 %x.off, 3
  17. }
  18. define zeroext i1 @test2(i32 %x) nounwind readnone ssp noredzone {
  19. entry:
  20. switch i32 %x, label %lor.rhs [
  21. i32 0, label %lor.end
  22. i32 1, label %lor.end
  23. ]
  24. lor.rhs:
  25. br label %lor.end
  26. lor.end:
  27. %0 = phi i1 [ true, %entry ], [ false, %lor.rhs ], [ true, %entry ]
  28. ret i1 %0
  29. ; CHECK-LABEL: @test2(
  30. ; CHECK: %switch = icmp ult i32 %x, 2
  31. }
  32. define i32 @test3(i1 %flag) {
  33. entry:
  34. switch i1 %flag, label %bad [
  35. i1 true, label %good
  36. i1 false, label %good
  37. ]
  38. good:
  39. ret i32 0
  40. bad:
  41. ret i32 1
  42. ; CHECK-LABEL: @test3(
  43. ; CHECK: entry:
  44. ; CHECK-NEXT: ret i32 0
  45. }