diff options
Diffstat (limited to 'llvm/test/Transforms/NewGVN/pre-new-inst.ll')
| -rw-r--r-- | llvm/test/Transforms/NewGVN/pre-new-inst.ll | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/Transforms/NewGVN/pre-new-inst.ll b/llvm/test/Transforms/NewGVN/pre-new-inst.ll new file mode 100644 index 00000000000..2b6fc2f2c05 --- /dev/null +++ b/llvm/test/Transforms/NewGVN/pre-new-inst.ll @@ -0,0 +1,30 @@ +; XFAIL: * +; RUN: opt -basicaa -newgvn -S %s | FileCheck %s + +%MyStruct = type { i32, i32 } +define i8 @foo(i64 %in, i8* %arr) { + %addr = alloca %MyStruct + %dead = trunc i64 %in to i32 + br i1 undef, label %next, label %tmp + +tmp: + call void @bar() + br label %next + +next: + %addr64 = bitcast %MyStruct* %addr to i64* + store i64 %in, i64* %addr64 + br label %final + +final: + %addr32 = getelementptr %MyStruct, %MyStruct* %addr, i32 0, i32 0 + %idx32 = load i32, i32* %addr32 + +; CHECK: %resptr = getelementptr i8, i8* %arr, i32 %dead + %resptr = getelementptr i8, i8* %arr, i32 %idx32 + %res = load i8, i8* %resptr + + ret i8 %res +} + +declare void @bar() |

