| ; RUN: llc < %s -mtriple=arm64-eabi | FileCheck %s |
| |
| ; ARM64ISelLowering.cpp was creating a new (floating-point) load for efficiency |
| ; but not updating chain-successors of the old one. As a result, the two memory |
| ; operations in this function both ended up direct successors to the EntryToken |
| ; and could be reordered. |
| |
| @var = global i32 0, align 4 |
| |
| define float @foo() { |
| ; CHECK-LABEL: foo: |
| ; Load must come before we clobber @var |
| ; CHECK: adrp x[[VARBASE:[0-9]+]], {{_?var}} |
| ; CHECK: ldr [[SREG:s[0-9]+]], [x[[VARBASE]], |
| ; CHECK: str wzr, [x[[VARBASE]], |
| |
| %val = load i32, i32* @var, align 4 |
| store i32 0, i32* @var, align 4 |
| |
| %fltval = sitofp i32 %val to float |
| ret float %fltval |
| } |