return-constants.ll 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. ; RUN: opt < %s -ipconstprop -S > %t
  2. ;; Check that the 21 constants got propagated properly
  3. ; RUN: cat %t | grep "%M = add i32 21, 21"
  4. ;; Check that the second return values didn't get propagated
  5. ; RUN: cat %t | grep "%N = add i32 %B, %D"
  6. %0 = type { i32, i32 }
  7. define internal %0 @foo(i1 %Q) {
  8. br i1 %Q, label %T, label %F
  9. T: ; preds = %0
  10. %mrv = insertvalue %0 undef, i32 21, 0
  11. %mrv1 = insertvalue %0 %mrv, i32 22, 1
  12. ret %0 %mrv1
  13. F: ; preds = %0
  14. %mrv2 = insertvalue %0 undef, i32 21, 0
  15. %mrv3 = insertvalue %0 %mrv2, i32 23, 1
  16. ret %0 %mrv3
  17. }
  18. define internal %0 @bar(i1 %Q) {
  19. %A = insertvalue %0 undef, i32 21, 0
  20. br i1 %Q, label %T, label %F
  21. T: ; preds = %0
  22. %B = insertvalue %0 %A, i32 22, 1
  23. ret %0 %B
  24. F: ; preds = %0
  25. %C = insertvalue %0 %A, i32 23, 1
  26. ret %0 %C
  27. }
  28. define %0 @caller(i1 %Q) {
  29. %X = call %0 @foo(i1 %Q)
  30. %A = extractvalue %0 %X, 0
  31. %B = extractvalue %0 %X, 1
  32. %Y = call %0 @bar(i1 %Q)
  33. %C = extractvalue %0 %Y, 0
  34. %D = extractvalue %0 %Y, 1
  35. %M = add i32 %A, %C
  36. %N = add i32 %B, %D
  37. ret %0 %X
  38. }