diff options
Diffstat (limited to 'llvm/test/CodeGen/AArch64/fast-isel-erase.ll')
-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() |