switch-to-br.ll 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. ; RUN: opt %s -simplifycfg -S | FileCheck %s
  2. declare i32 @f(i32)
  3. define i32 @basic(i32 %x) {
  4. ; CHECK-LABEL: @basic
  5. ; CHECK-LABEL: entry:
  6. ; CHECK-NEXT: call i32 @f(i32 0)
  7. ; CHECK-NEXT: ret i32 %0
  8. entry:
  9. switch i32 %x, label %default [
  10. i32 5, label %default
  11. i32 6, label %default
  12. i32 7, label %default
  13. ]
  14. default:
  15. %0 = call i32 @f(i32 0)
  16. ret i32 %0
  17. }
  18. define i32 @constant() {
  19. ; CHECK-LABEL: @constant
  20. ; CHECK-LABEL: entry:
  21. ; CHECK-NEXT: call i32 @f(i32 1)
  22. ; CHECK-NEXT: ret i32 %0
  23. entry:
  24. switch i32 42, label %default [
  25. i32 41, label %default
  26. i32 42, label %a
  27. i32 43, label %b
  28. ]
  29. default:
  30. %0 = call i32 @f(i32 0)
  31. ret i32 %0
  32. a:
  33. %1 = call i32 @f(i32 1)
  34. ret i32 %1
  35. b:
  36. %2 = call i32 @f(i32 2)
  37. ret i32 %2
  38. }
  39. define i32 @unreachable(i32 %x) {
  40. ; CHECK-LABEL: @unreachable
  41. ; CHECK-LABEL: entry:
  42. ; CHECK-NEXT: call i32 @f(i32 0)
  43. ; CHECK-NEXT: ret i32 %0
  44. entry:
  45. switch i32 %x, label %unreachable [
  46. i32 5, label %a
  47. i32 6, label %a
  48. i32 7, label %a
  49. ]
  50. unreachable:
  51. unreachable
  52. a:
  53. %0 = call i32 @f(i32 0)
  54. ret i32 %0
  55. }