143 lines · plain
1; RUN: llc < %s -march=bpfel -mcpu=v4 -verify-machineinstrs -show-mc-encoding \2; RUN: | FileCheck -check-prefixes=CHECK-LE %s3; RUN: llc < %s -march=bpfeb -mcpu=v4 -verify-machineinstrs -show-mc-encoding \4; RUN: | FileCheck -check-prefixes=CHECK-BE %s5 6; Source:7; void atomic_load_i8(char *p) {8; (void)__atomic_load_n(p, __ATOMIC_RELAXED);9; (void)__atomic_load_n(p, __ATOMIC_ACQUIRE);10; }11; void atomic_load_i16(short *p) {12; (void)__atomic_load_n(p, __ATOMIC_RELAXED);13; (void)__atomic_load_n(p, __ATOMIC_ACQUIRE);14; }15; void atomic_load_i32(int *p) {16; (void)__atomic_load_n(p, __ATOMIC_RELAXED);17; (void)__atomic_load_n(p, __ATOMIC_ACQUIRE);18; }19; void atomic_load_i64(long *p) {20; (void)__atomic_load_n(p, __ATOMIC_RELAXED);21; (void)__atomic_load_n(p, __ATOMIC_ACQUIRE);22; }23; void atomic_store_i8(char *p, char v) {24; __atomic_store_n(p, v, __ATOMIC_RELAXED);25; __atomic_store_n(p, v, __ATOMIC_RELEASE);26; }27; void atomic_store_i16(short *p, short v) {28; __atomic_store_n(p, v, __ATOMIC_RELAXED);29; __atomic_store_n(p, v, __ATOMIC_RELEASE);30; }31; void atomic_store_i32(int *p, int v) {32; __atomic_store_n(p, v, __ATOMIC_RELAXED);33; __atomic_store_n(p, v, __ATOMIC_RELEASE);34; }35; void atomic_store_i64(long *p, long v) {36; __atomic_store_n(p, v, __ATOMIC_RELAXED);37; __atomic_store_n(p, v, __ATOMIC_RELEASE);38; }39 40define dso_local void @atomic_load_i8(ptr nocapture noundef readonly %p) local_unnamed_addr #0 {41; CHECK-LABEL: atomic_load_i842; CHECK-LE: w2 = *(u8 *)(r1 + 0) # encoding: [0x71,0x12,0x00,0x00,0x00,0x00,0x00,0x00]43; CHECK-LE-NEXT: w1 = load_acquire((u8 *)(r1 + 0)) # encoding: [0xd3,0x11,0x00,0x00,0x00,0x01,0x00,0x00]44;45; CHECK-BE: w2 = *(u8 *)(r1 + 0) # encoding: [0x71,0x21,0x00,0x00,0x00,0x00,0x00,0x00]46; CHECK-BE-NEXT: w1 = load_acquire((u8 *)(r1 + 0)) # encoding: [0xd3,0x11,0x00,0x00,0x00,0x00,0x01,0x00]47entry:48 %0 = load atomic i8, ptr %p monotonic, align 149 %1 = load atomic i8, ptr %p acquire, align 150 ret void51}52 53define dso_local void @atomic_load_i16(ptr nocapture noundef readonly %p) local_unnamed_addr #0 {54; CHECK-LABEL: atomic_load_i1655; CHECK-LE: w2 = *(u16 *)(r1 + 0) # encoding: [0x69,0x12,0x00,0x00,0x00,0x00,0x00,0x00]56; CHECK-LE-NEXT: w1 = load_acquire((u16 *)(r1 + 0)) # encoding: [0xcb,0x11,0x00,0x00,0x00,0x01,0x00,0x00]57;58; CHECK-BE: w2 = *(u16 *)(r1 + 0) # encoding: [0x69,0x21,0x00,0x00,0x00,0x00,0x00,0x00]59; CHECK-BE-NEXT: w1 = load_acquire((u16 *)(r1 + 0)) # encoding: [0xcb,0x11,0x00,0x00,0x00,0x00,0x01,0x00]60entry:61 %0 = load atomic i16, ptr %p monotonic, align 262 %1 = load atomic i16, ptr %p acquire, align 263 ret void64}65 66define dso_local void @atomic_load_i32(ptr nocapture noundef readonly %p) local_unnamed_addr #0 {67; CHECK-LABEL: atomic_load_i3268; CHECK-LE: w2 = *(u32 *)(r1 + 0) # encoding: [0x61,0x12,0x00,0x00,0x00,0x00,0x00,0x00]69; CHECK-LE-NEXT: w1 = load_acquire((u32 *)(r1 + 0)) # encoding: [0xc3,0x11,0x00,0x00,0x00,0x01,0x00,0x00]70;71; CHECK-BE: w2 = *(u32 *)(r1 + 0) # encoding: [0x61,0x21,0x00,0x00,0x00,0x00,0x00,0x00]72; CHECK-BE-NEXT: w1 = load_acquire((u32 *)(r1 + 0)) # encoding: [0xc3,0x11,0x00,0x00,0x00,0x00,0x01,0x00]73entry:74 %0 = load atomic i32, ptr %p monotonic, align 475 %1 = load atomic i32, ptr %p acquire, align 476 ret void77}78 79define dso_local void @atomic_load_i64(ptr nocapture noundef readonly %p) local_unnamed_addr #0 {80; CHECK-LABEL: atomic_load_i6481; CHECK-LE: r2 = *(u64 *)(r1 + 0) # encoding: [0x79,0x12,0x00,0x00,0x00,0x00,0x00,0x00]82; CHECK-LE-NEXT: r1 = load_acquire((u64 *)(r1 + 0)) # encoding: [0xdb,0x11,0x00,0x00,0x00,0x01,0x00,0x00]83;84; CHECK-BE: r2 = *(u64 *)(r1 + 0) # encoding: [0x79,0x21,0x00,0x00,0x00,0x00,0x00,0x00]85; CHECK-BE-NEXT: r1 = load_acquire((u64 *)(r1 + 0)) # encoding: [0xdb,0x11,0x00,0x00,0x00,0x00,0x01,0x00]86entry:87 %0 = load atomic i64, ptr %p monotonic, align 888 %1 = load atomic i64, ptr %p acquire, align 889 ret void90}91 92define dso_local void @atomic_store_i8(ptr nocapture noundef writeonly %p, i8 noundef signext %v) local_unnamed_addr #0 {93; CHECK-LABEL: atomic_store_i894; CHECK-LE: *(u8 *)(r1 + 0) = w2 # encoding: [0x73,0x21,0x00,0x00,0x00,0x00,0x00,0x00]95; CHECK-LE-NEXT: store_release((u8 *)(r1 + 0), w2) # encoding: [0xd3,0x21,0x00,0x00,0x10,0x01,0x00,0x00]96;97; CHECK-BE: *(u8 *)(r1 + 0) = w2 # encoding: [0x73,0x12,0x00,0x00,0x00,0x00,0x00,0x00]98; CHECK-BE-NEXT: store_release((u8 *)(r1 + 0), w2) # encoding: [0xd3,0x12,0x00,0x00,0x00,0x00,0x01,0x10]99entry:100 store atomic i8 %v, ptr %p monotonic, align 1101 store atomic i8 %v, ptr %p release, align 1102 ret void103}104 105define dso_local void @atomic_store_i16(ptr nocapture noundef writeonly %p, i16 noundef signext %v) local_unnamed_addr #0 {106; CHECK-LABEL: atomic_store_i16107; CHECK-LE: *(u16 *)(r1 + 0) = w2 # encoding: [0x6b,0x21,0x00,0x00,0x00,0x00,0x00,0x00]108; CHECK-LE-NEXT: store_release((u16 *)(r1 + 0), w2) # encoding: [0xcb,0x21,0x00,0x00,0x10,0x01,0x00,0x00]109;110; CHECK-BE: *(u16 *)(r1 + 0) = w2 # encoding: [0x6b,0x12,0x00,0x00,0x00,0x00,0x00,0x00]111; CHECK-BE-NEXT: store_release((u16 *)(r1 + 0), w2) # encoding: [0xcb,0x12,0x00,0x00,0x00,0x00,0x01,0x10]112entry:113 store atomic i16 %v, ptr %p monotonic, align 2114 store atomic i16 %v, ptr %p release, align 2115 ret void116}117 118define dso_local void @atomic_store_i32(ptr nocapture noundef writeonly %p, i32 noundef %v) local_unnamed_addr #0 {119; CHECK-LABEL: atomic_store_i32120; CHECK-LE: *(u32 *)(r1 + 0) = w2 # encoding: [0x63,0x21,0x00,0x00,0x00,0x00,0x00,0x00]121; CHECK-LE-NEXT: store_release((u32 *)(r1 + 0), w2) # encoding: [0xc3,0x21,0x00,0x00,0x10,0x01,0x00,0x00]122;123; CHECK-BE: *(u32 *)(r1 + 0) = w2 # encoding: [0x63,0x12,0x00,0x00,0x00,0x00,0x00,0x00]124; CHECK-BE-NEXT: store_release((u32 *)(r1 + 0), w2) # encoding: [0xc3,0x12,0x00,0x00,0x00,0x00,0x01,0x10]125entry:126 store atomic i32 %v, ptr %p monotonic, align 4127 store atomic i32 %v, ptr %p release, align 4128 ret void129}130 131define dso_local void @atomic_store_i64(ptr nocapture noundef writeonly %p, i64 noundef %v) local_unnamed_addr #0 {132; CHECK-LABEL: atomic_store_i64133; CHECK-LE: *(u64 *)(r1 + 0) = r2 # encoding: [0x7b,0x21,0x00,0x00,0x00,0x00,0x00,0x00]134; CHECK-LE-NEXT: store_release((u64 *)(r1 + 0), r2) # encoding: [0xdb,0x21,0x00,0x00,0x10,0x01,0x00,0x00]135;136; CHECK-BE: *(u64 *)(r1 + 0) = r2 # encoding: [0x7b,0x12,0x00,0x00,0x00,0x00,0x00,0x00]137; CHECK-BE-NEXT: store_release((u64 *)(r1 + 0), r2) # encoding: [0xdb,0x12,0x00,0x00,0x00,0x00,0x01,0x10]138entry:139 store atomic i64 %v, ptr %p monotonic, align 8140 store atomic i64 %v, ptr %p release, align 8141 ret void142}143