| ; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine -mem2reg | llvm-dis | \ | |
| ; RUN: not grep {int 1} | |
| ; When propagating the load through the select, make sure that the load is | |
| ; inserted where the original load was, not where the select is. Not doing | |
| ; so could produce incorrect results! | |
| implementation | |
| int %test(bool %C) { | |
| %X = alloca int | |
| %X2 = alloca int | |
| store int 1, int* %X | |
| store int 2, int* %X2 | |
| %Y = select bool %C, int* %X, int* %X2 | |
| store int 3, int* %X | |
| %Z = load int* %Y | |
| ret int %Z | |
| } | |