blob: e451f136dcf5abe6e5c22109c58641b345d4f70b [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
; RUN: llc -mtriple=aarch64-unknown-linux-gnu -global-isel < %s | FileCheck %s
; Make sure postinc/preinc addressing mode is not used for volatile accesses,
; see https://github.com/llvm/llvm-project/issues/173014.
define ptr @volatile_store_postinc(ptr %p) {
; CHECK-LABEL: volatile_store_postinc:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x8, x0
; CHECK-NEXT: add x0, x0, #4
; CHECK-NEXT: str wzr, [x8]
; CHECK-NEXT: ret
store volatile i32 0, ptr %p
%gep = getelementptr i8, ptr %p, i64 4
ret ptr %gep
}
define ptr @volatile_load_postinc(ptr %p) {
; CHECK-LABEL: volatile_load_postinc:
; CHECK: // %bb.0:
; CHECK-NEXT: ldr wzr, [x0]
; CHECK-NEXT: add x0, x0, #4
; CHECK-NEXT: ret
load volatile i32, ptr %p
%gep = getelementptr i8, ptr %p, i64 4
ret ptr %gep
}
define ptr @volatile_store_preinc(ptr %p) {
; CHECK-LABEL: volatile_store_preinc:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x8, x0
; CHECK-NEXT: add x0, x0, #4
; CHECK-NEXT: str wzr, [x8, #4]
; CHECK-NEXT: ret
%gep = getelementptr i8, ptr %p, i64 4
store volatile i32 0, ptr %gep
ret ptr %gep
}
define ptr @volatile_load_preinc(ptr %p) {
; CHECK-LABEL: volatile_load_preinc:
; CHECK: // %bb.0:
; CHECK-NEXT: ldr wzr, [x0, #4]
; CHECK-NEXT: add x0, x0, #4
; CHECK-NEXT: ret
%gep = getelementptr i8, ptr %p, i64 4
load volatile i32, ptr %gep
ret ptr %gep
}