diff options
| author | Tim Northover <tnorthover@apple.com> | 2018-12-17 17:25:53 +0000 |
|---|---|---|
| committer | Tim Northover <tnorthover@apple.com> | 2018-12-17 17:25:53 +0000 |
| commit | 256a16d0314c78b0ee3612e01d0cafbf6c83de7b (patch) | |
| tree | ac50144a309aa5c7f1387e827ab9c582c9be4055 /llvm/test/CodeGen/AArch64 | |
| parent | 2d6833c9c9e447e5a0a5fa0b0fa9db18b3dd8111 (diff) | |
| download | bcm5719-llvm-256a16d0314c78b0ee3612e01d0cafbf6c83de7b.tar.gz bcm5719-llvm-256a16d0314c78b0ee3612e01d0cafbf6c83de7b.zip | |
FastIsel: take care to update iterators when removing instructions.
We keep a few iterators into the basic block we're selecting while
performing FastISel. Usually this is fine, but occasionally code wants
to remove already-emitted instructions. When this happens we have to be
careful to update those iterators so they're not pointint at dangling
memory.
llvm-svn: 349365
Diffstat (limited to 'llvm/test/CodeGen/AArch64')
| -rw-r--r-- | llvm/test/CodeGen/AArch64/fast-isel-erase.ll | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AArch64/fast-isel-erase.ll b/llvm/test/CodeGen/AArch64/fast-isel-erase.ll new file mode 100644 index 00000000000..e8265bce9fe --- /dev/null +++ b/llvm/test/CodeGen/AArch64/fast-isel-erase.ll @@ -0,0 +1,25 @@ +; RUN: llc -mtriple=arm64-apple-ios -o - %s -fast-isel=1 -O0 | FileCheck %s + +; The zext can be folded into the load and removed, but doing so can invalidate +; pointers internal to FastISel and cause a crash so it must be done carefully. +define i32 @test() { +; CHECK-LABEL: test: +; CHECK: ldrh +; CHECK: bl _callee +; CHECK-NOT: uxth + +entry: + store i32 undef, i32* undef, align 4 + %t81 = load i16, i16* undef, align 2 + call void @callee() + %t82 = zext i16 %t81 to i32 + %t83 = shl i32 %t82, 16 + %t84 = or i32 undef, %t83 + br label %end + +end: + %val = phi i32 [%t84, %entry] + ret i32 %val +} + +declare void @callee() |

