cfgstructures.ll 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. ; RUN: llvm-as < %s | llvm-dis > %t1.ll
  2. ; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
  3. ; RUN: diff %t1.ll %t2.ll
  4. ;; This is an irreducible flow graph
  5. define void @irreducible(i1 %cond) {
  6. br i1 %cond, label %X, label %Y
  7. X: ; preds = %Y, %0
  8. br label %Y
  9. Y: ; preds = %X, %0
  10. br label %X
  11. }
  12. ;; This is a pair of loops that share the same header
  13. define void @sharedheader(i1 %cond) {
  14. br label %A
  15. A: ; preds = %Y, %X, %0
  16. br i1 %cond, label %X, label %Y
  17. X: ; preds = %A
  18. br label %A
  19. Y: ; preds = %A
  20. br label %A
  21. }
  22. ;; This is a simple nested loop
  23. define void @nested(i1 %cond1, i1 %cond2, i1 %cond3) {
  24. br label %Loop1
  25. Loop1: ; preds = %L2Exit, %0
  26. br label %Loop2
  27. Loop2: ; preds = %L3Exit, %Loop1
  28. br label %Loop3
  29. Loop3: ; preds = %Loop3, %Loop2
  30. br i1 %cond3, label %Loop3, label %L3Exit
  31. L3Exit: ; preds = %Loop3
  32. br i1 %cond2, label %Loop2, label %L2Exit
  33. L2Exit: ; preds = %L3Exit
  34. br i1 %cond1, label %Loop1, label %L1Exit
  35. L1Exit: ; preds = %L2Exit
  36. ret void
  37. }