blob: 6e48cb348ca0525d686b40970c085bf5d57a7e04 [file] [log] [blame] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=aarch64 -mattr=+v9.6a < %s | FileCheck %s
; RUN: llc -mtriple=aarch64 -mattr=+v9.6a -global-isel=1 < %s | FileCheck %s
define void @test_keep_relaxed_i8(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_relaxed_i8:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: strb w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 0, i32 0, i32 8)
ret void
}
define void @test_keep_relaxed_i16(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_relaxed_i16:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: strh w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 0, i32 0, i32 16)
ret void
}
define void @test_keep_relaxed_i32(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_relaxed_i32:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: str w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 0, i32 0, i32 32)
ret void
}
define void @test_keep_relaxed_i64(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_relaxed_i64:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: str x1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 0, i32 0, i32 64)
ret void
}
define void @test_keep_release_i8(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_release_i8:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: stlrb w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 3, i32 0, i32 8)
ret void
}
define void @test_keep_release_i16(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_release_i16:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: stlrh w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 3, i32 0, i32 16)
ret void
}
define void @test_keep_release_i32(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_release_i32:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: stlr w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 3, i32 0, i32 32)
ret void
}
define void @test_keep_release_i64(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_release_i64:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: stlr x1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 3, i32 0, i32 64)
ret void
}
define void @test_keep_seqcst_i8(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_seqcst_i8:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: stlrb w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 5, i32 0, i32 8)
ret void
}
define void @test_keep_seqcst_i16(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_seqcst_i16:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: stlrh w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 5, i32 0, i32 16)
ret void
}
define void @test_keep_seqcst_i32(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_seqcst_i32:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: stlr w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 5, i32 0, i32 32)
ret void
}
define void @test_keep_seqcst_i64(ptr %p, i64 %v) {
; CHECK-LABEL: test_keep_seqcst_i64:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh keep
; CHECK-NEXT: stlr x1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 5, i32 0, i32 64)
ret void
}
define void @test_strm_relaxed_i8(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_relaxed_i8:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: strb w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 0, i32 1, i32 8)
ret void
}
define void @test_strm_relaxed_i16(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_relaxed_i16:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: strh w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 0, i32 1, i32 16)
ret void
}
define void @test_strm_relaxed_i32(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_relaxed_i32:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: str w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 0, i32 1, i32 32)
ret void
}
define void @test_strm_relaxed_i64(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_relaxed_i64:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: str x1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 0, i32 1, i32 64)
ret void
}
define void @test_strm_release_i8(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_release_i8:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: stlrb w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 3, i32 1, i32 8)
ret void
}
define void @test_strm_release_i16(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_release_i16:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: stlrh w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 3, i32 1, i32 16)
ret void
}
define void @test_strm_release_i32(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_release_i32:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: stlr w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 3, i32 1, i32 32)
ret void
}
define void @test_strm_release_i64(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_release_i64:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: stlr x1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 3, i32 1, i32 64)
ret void
}
define void @test_strm_seqcst_i8(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_seqcst_i8:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: stlrb w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 5, i32 1, i32 8)
ret void
}
define void @test_strm_seqcst_i16(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_seqcst_i16:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: stlrh w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 5, i32 1, i32 16)
ret void
}
define void @test_strm_seqcst_i32(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_seqcst_i32:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: stlr w1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 5, i32 1, i32 32)
ret void
}
define void @test_strm_seqcst_i64(ptr %p, i64 %v) {
; CHECK-LABEL: test_strm_seqcst_i64:
; CHECK: // %bb.0:
; CHECK-NEXT: stshh strm
; CHECK-NEXT: stlr x1, [x0]
; CHECK-NEXT: ret
call void @llvm.aarch64.stshh.atomic.store.p0(ptr %p, i64 %v, i32 5, i32 1, i32 64)
ret void
}