; 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 }