gcsetest.ll 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. ; Test that GCSE uses basicaa to do alias analysis, which is capable of
  2. ; disambiguating some obvious cases. All loads should be removable in
  3. ; this testcase.
  4. ; RUN: opt < %s -basicaa -gvn -instcombine -dce -S | FileCheck %s
  5. @A = global i32 7
  6. @B = global i32 8
  7. ; CHECK: define i32 @test()
  8. ; CHECK-NEXT: store i32 123, i32* @B
  9. ; CHECK-NEXT: ret i32 0
  10. define i32 @test() {
  11. %A1 = load i32, i32* @A
  12. store i32 123, i32* @B ; Store cannot alias @A
  13. %A2 = load i32, i32* @A
  14. %X = sub i32 %A1, %A2
  15. ret i32 %X
  16. }
  17. ; CHECK: define i32 @test2()
  18. ; CHECK-NEXT: br label %Loop
  19. ; CHECK: Loop:
  20. ; CHECK-NEXT: store i32 0, i32* @B
  21. ; CHECK-NEXT: br i1 true, label %out, label %Loop
  22. ; CHECK: out:
  23. ; CHECK-NEXT: ret i32 0
  24. define i32 @test2() {
  25. %A1 = load i32, i32* @A
  26. br label %Loop
  27. Loop:
  28. %AP = phi i32 [0, %0], [%X, %Loop]
  29. store i32 %AP, i32* @B ; Store cannot alias @A
  30. %A2 = load i32, i32* @A
  31. %X = sub i32 %A1, %A2
  32. %c = icmp eq i32 %X, 0
  33. br i1 %c, label %out, label %Loop
  34. out:
  35. ret i32 %X
  36. }
  37. declare void @external()
  38. ; CHECK: define i32 @test3()
  39. ; CHECK-NEXT: call void @external()
  40. ; CHECK-NEXT: ret i32 7
  41. define i32 @test3() {
  42. %X = alloca i32
  43. store i32 7, i32* %X
  44. call void @external()
  45. %V = load i32, i32* %X
  46. ret i32 %V
  47. }