xref: /llvm-project/llvm/test/Transforms/AtomicExpand/LoongArch/load-store-atomic.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
147f3dc6dSgonglingqin; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*9d4f7f44Swanglei; RUN: opt -S --mtriple=loongarch32 -mattr=+d --passes=atomic-expand %s | FileCheck %s --check-prefix=LA32
3*9d4f7f44Swanglei; RUN: opt -S --mtriple=loongarch64 -mattr=+d --passes=atomic-expand %s | FileCheck %s --check-prefix=LA64
447f3dc6dSgonglingqin
547f3dc6dSgonglingqindefine i8 @load_acquire_i8(ptr %ptr) {
647f3dc6dSgonglingqin; LA32-LABEL: @load_acquire_i8(
747f3dc6dSgonglingqin; LA32-NEXT:    [[VAL:%.*]] = load atomic i8, ptr [[PTR:%.*]] monotonic, align 1
847f3dc6dSgonglingqin; LA32-NEXT:    fence acquire
947f3dc6dSgonglingqin; LA32-NEXT:    ret i8 [[VAL]]
1047f3dc6dSgonglingqin;
1147f3dc6dSgonglingqin; LA64-LABEL: @load_acquire_i8(
1247f3dc6dSgonglingqin; LA64-NEXT:    [[VAL:%.*]] = load atomic i8, ptr [[PTR:%.*]] monotonic, align 1
1347f3dc6dSgonglingqin; LA64-NEXT:    fence acquire
1447f3dc6dSgonglingqin; LA64-NEXT:    ret i8 [[VAL]]
1547f3dc6dSgonglingqin;
1647f3dc6dSgonglingqin  %val = load atomic i8, ptr %ptr acquire, align 1
1747f3dc6dSgonglingqin  ret i8 %val
1847f3dc6dSgonglingqin}
1947f3dc6dSgonglingqin
2047f3dc6dSgonglingqindefine i16 @load_acquire_i16(ptr %ptr) {
2147f3dc6dSgonglingqin; LA32-LABEL: @load_acquire_i16(
2247f3dc6dSgonglingqin; LA32-NEXT:    [[VAL:%.*]] = load atomic i16, ptr [[PTR:%.*]] monotonic, align 2
2347f3dc6dSgonglingqin; LA32-NEXT:    fence acquire
2447f3dc6dSgonglingqin; LA32-NEXT:    ret i16 [[VAL]]
2547f3dc6dSgonglingqin;
2647f3dc6dSgonglingqin; LA64-LABEL: @load_acquire_i16(
2747f3dc6dSgonglingqin; LA64-NEXT:    [[VAL:%.*]] = load atomic i16, ptr [[PTR:%.*]] monotonic, align 2
2847f3dc6dSgonglingqin; LA64-NEXT:    fence acquire
2947f3dc6dSgonglingqin; LA64-NEXT:    ret i16 [[VAL]]
3047f3dc6dSgonglingqin;
3147f3dc6dSgonglingqin  %val = load atomic i16, ptr %ptr acquire, align 2
3247f3dc6dSgonglingqin  ret i16 %val
3347f3dc6dSgonglingqin}
3447f3dc6dSgonglingqin
3547f3dc6dSgonglingqindefine i32 @load_acquire_i32(ptr %ptr) {
3647f3dc6dSgonglingqin; LA32-LABEL: @load_acquire_i32(
3747f3dc6dSgonglingqin; LA32-NEXT:    [[VAL:%.*]] = load atomic i32, ptr [[PTR:%.*]] monotonic, align 4
3847f3dc6dSgonglingqin; LA32-NEXT:    fence acquire
3947f3dc6dSgonglingqin; LA32-NEXT:    ret i32 [[VAL]]
4047f3dc6dSgonglingqin;
4147f3dc6dSgonglingqin; LA64-LABEL: @load_acquire_i32(
4247f3dc6dSgonglingqin; LA64-NEXT:    [[VAL:%.*]] = load atomic i32, ptr [[PTR:%.*]] monotonic, align 4
4347f3dc6dSgonglingqin; LA64-NEXT:    fence acquire
4447f3dc6dSgonglingqin; LA64-NEXT:    ret i32 [[VAL]]
4547f3dc6dSgonglingqin;
4647f3dc6dSgonglingqin  %val = load atomic i32, ptr %ptr acquire, align 4
4747f3dc6dSgonglingqin  ret i32 %val
4847f3dc6dSgonglingqin}
4947f3dc6dSgonglingqin
5047f3dc6dSgonglingqindefine i64 @load_acquire_i64(ptr %ptr) {
5147f3dc6dSgonglingqin; LA32-LABEL: @load_acquire_i64(
5247f3dc6dSgonglingqin; LA32-NEXT:    [[TMP1:%.*]] = call i64 @__atomic_load_8(ptr [[PTR:%.*]], i32 2)
5347f3dc6dSgonglingqin; LA32-NEXT:    ret i64 [[TMP1]]
5447f3dc6dSgonglingqin;
5547f3dc6dSgonglingqin; LA64-LABEL: @load_acquire_i64(
5647f3dc6dSgonglingqin; LA64-NEXT:    [[VAL:%.*]] = load atomic i64, ptr [[PTR:%.*]] monotonic, align 8
5747f3dc6dSgonglingqin; LA64-NEXT:    fence acquire
5847f3dc6dSgonglingqin; LA64-NEXT:    ret i64 [[VAL]]
5947f3dc6dSgonglingqin;
6047f3dc6dSgonglingqin  %val = load atomic i64, ptr %ptr acquire, align 8
6147f3dc6dSgonglingqin  ret i64 %val
6247f3dc6dSgonglingqin}
6347f3dc6dSgonglingqin
6447f3dc6dSgonglingqindefine void @store_release_i8(ptr %ptr, i8 signext %v) {
6547f3dc6dSgonglingqin; LA32-LABEL: @store_release_i8(
6647f3dc6dSgonglingqin; LA32-NEXT:    fence release
6747f3dc6dSgonglingqin; LA32-NEXT:    store atomic i8 [[V:%.*]], ptr [[PTR:%.*]] monotonic, align 1
6847f3dc6dSgonglingqin; LA32-NEXT:    ret void
6947f3dc6dSgonglingqin;
7047f3dc6dSgonglingqin; LA64-LABEL: @store_release_i8(
7147f3dc6dSgonglingqin; LA64-NEXT:    fence release
7247f3dc6dSgonglingqin; LA64-NEXT:    store atomic i8 [[V:%.*]], ptr [[PTR:%.*]] monotonic, align 1
7347f3dc6dSgonglingqin; LA64-NEXT:    ret void
7447f3dc6dSgonglingqin;
7547f3dc6dSgonglingqin  store atomic i8 %v, ptr %ptr release, align 1
7647f3dc6dSgonglingqin  ret void
7747f3dc6dSgonglingqin}
7847f3dc6dSgonglingqin
7947f3dc6dSgonglingqindefine void @store_release_i16(ptr %ptr, i16 signext %v) {
8047f3dc6dSgonglingqin; LA32-LABEL: @store_release_i16(
8147f3dc6dSgonglingqin; LA32-NEXT:    fence release
8247f3dc6dSgonglingqin; LA32-NEXT:    store atomic i16 [[V:%.*]], ptr [[PTR:%.*]] monotonic, align 2
8347f3dc6dSgonglingqin; LA32-NEXT:    ret void
8447f3dc6dSgonglingqin;
8547f3dc6dSgonglingqin; LA64-LABEL: @store_release_i16(
8647f3dc6dSgonglingqin; LA64-NEXT:    fence release
8747f3dc6dSgonglingqin; LA64-NEXT:    store atomic i16 [[V:%.*]], ptr [[PTR:%.*]] monotonic, align 2
8847f3dc6dSgonglingqin; LA64-NEXT:    ret void
8947f3dc6dSgonglingqin;
9047f3dc6dSgonglingqin  store atomic i16 %v, ptr %ptr release, align 2
9147f3dc6dSgonglingqin  ret void
9247f3dc6dSgonglingqin}
9347f3dc6dSgonglingqin
9447f3dc6dSgonglingqindefine void @store_release_i32(ptr %ptr, i32 signext %v) {
9547f3dc6dSgonglingqin; LA32-LABEL: @store_release_i32(
9647f3dc6dSgonglingqin; LA32-NEXT:    fence release
9747f3dc6dSgonglingqin; LA32-NEXT:    store atomic i32 [[V:%.*]], ptr [[PTR:%.*]] monotonic, align 4
9847f3dc6dSgonglingqin; LA32-NEXT:    ret void
9947f3dc6dSgonglingqin;
10047f3dc6dSgonglingqin; LA64-LABEL: @store_release_i32(
101e9a4b8e3Sgonglingqin; LA64-NEXT:    store atomic i32 [[V:%.*]], ptr [[PTR:%.*]] release, align 4
10247f3dc6dSgonglingqin; LA64-NEXT:    ret void
10347f3dc6dSgonglingqin;
10447f3dc6dSgonglingqin  store atomic i32 %v, ptr %ptr release, align 4
10547f3dc6dSgonglingqin  ret void
10647f3dc6dSgonglingqin}
10747f3dc6dSgonglingqin
10847f3dc6dSgonglingqindefine void @store_release_i64(ptr %ptr, i64 %v) {
10947f3dc6dSgonglingqin; LA32-LABEL: @store_release_i64(
11047f3dc6dSgonglingqin; LA32-NEXT:    call void @__atomic_store_8(ptr [[PTR:%.*]], i64 [[V:%.*]], i32 3)
11147f3dc6dSgonglingqin; LA32-NEXT:    ret void
11247f3dc6dSgonglingqin;
11347f3dc6dSgonglingqin; LA64-LABEL: @store_release_i64(
114e9a4b8e3Sgonglingqin; LA64-NEXT:    store atomic i64 [[V:%.*]], ptr [[PTR:%.*]] release, align 8
11547f3dc6dSgonglingqin; LA64-NEXT:    ret void
11647f3dc6dSgonglingqin;
11747f3dc6dSgonglingqin  store atomic i64 %v, ptr %ptr release, align 8
11847f3dc6dSgonglingqin  ret void
11947f3dc6dSgonglingqin}
120