| ; Test that LICM uses basicaa to do alias analysis, which is capable of |
| ; disambiguating some obvious cases. The ToRemove load should be eliminated |
| ; in this testcase. This testcase was carefully contrived so that GCSE would |
| ; not be able to eliminate the load itself, without licm's help. This is |
| ; because, for GCSE, the load is killed by the dummy basic block. |
| |
| ; RUN: if as < %s | opt -basicaa -licm -gcse -simplifycfg -instcombine | dis | grep ToRemove |
| ; RUN: then exit 1 |
| ; RUN: else exit 0 |
| ; RUN: fi |
| |
| %A = global int 7 |
| %B = global int 8 |
| implementation |
| |
| int %test(bool %c) { |
| %ToRemove = load int* %A |
| br label %Loop |
| Loop: |
| %Atmp = load int* %A |
| store int %Atmp, int* %B ; Store cannot alias %A |
| |
| br bool %c, label %Out, label %Loop |
| Out: |
| ret int 7 |
| |
| Dummy: |
| store int 7, int* %A |
| br label %Loop |
| } |
| |