brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · b99ea44 Raw
255 lines · plain
1; RUN: llc < %s -mtriple=bpfel -mcpu=v3 -verify-machineinstrs -show-mc-encoding | FileCheck %s2;3; Source:4;   int test_load_add_32(int *p, int v) {5;     return __sync_fetch_and_add(p, v);6;   }7;   int test_load_add_64(long *p, long v) {8;     return __sync_fetch_and_add(p, v);9;   }10;   int test_load_sub_32(int *p, int v) {11;     return __sync_fetch_and_sub(p, v);12;   }13;   int test_load_sub_64(long *p, long v) {14;     return __sync_fetch_and_sub(p, v);15;   }16;   // from https://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html17;   // __sync_lock_test_and_set() actually does atomic xchg and returns18;   // old contents.19;   int test_xchg_32(int *p, int v) {20;     return __sync_lock_test_and_set(p, v);21;   }22;   int test_xchg_64(long *p, long v) {23;     return __sync_lock_test_and_set(p, v);24;   }25;   int test_cas_32(int *p, int old, int new) {26;     return __sync_val_compare_and_swap(p, old, new);27;   }28;   long test_cas_64(long *p, long old, long new) {29;     return __sync_val_compare_and_swap(p, old, new);30;   }31;   int test_load_and_32(int *p, int v) {32;     return __sync_fetch_and_and(p, v);33;   }34;   int test_load_and_64(long *p, long v) {35;     return __sync_fetch_and_and(p, v);36;   }37;   int test_load_or_32(int *p, int v) {38;     return __sync_fetch_and_or(p, v);39;   }40;   int test_load_or_64(long *p, long v) {41;     return __sync_fetch_and_or(p, v);42;   }43;   int test_load_xor_32(int *p, int v) {44;     return __sync_fetch_and_xor(p, v);45;   }46;   int test_load_xor_64(long *p, long v) {47;     return __sync_fetch_and_xor(p, v);48;   }49;   int test_atomic_xor_32(int *p, int v) {50;     __sync_fetch_and_xor(p, v);51;     return 0;52;   }53;   int test_atomic_xor_64(long *p, long v) {54;     __sync_fetch_and_xor(p, v);55;     return 0;56;   }57;   int test_atomic_and_64(long *p, long v) {58;     __sync_fetch_and_and(p, v);59;     return 0;60;   }61;   int test_atomic_or_64(long *p, long v) {62;     __sync_fetch_and_or(p, v);63;     return 0;64;   }65 66; CHECK-LABEL: test_load_add_3267; CHECK: w0 = w268; CHECK: w0 = atomic_fetch_add((u32 *)(r1 + 0), w0)69; CHECK: encoding: [0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00]70define dso_local i32 @test_load_add_32(ptr nocapture %p, i32 %v) local_unnamed_addr {71entry:72  %0 = atomicrmw add ptr %p, i32 %v seq_cst73  ret i32 %074}75 76; CHECK-LABEL: test_load_add_6477; CHECK: r0 = r278; CHECK: r0 = atomic_fetch_add((u64 *)(r1 + 0), r0)79; CHECK: encoding: [0xdb,0x01,0x00,0x00,0x01,0x00,0x00,0x00]80define dso_local i32 @test_load_add_64(ptr nocapture %p, i64 %v) local_unnamed_addr {81entry:82  %0 = atomicrmw add ptr %p, i64 %v seq_cst83  %conv = trunc i64 %0 to i3284  ret i32 %conv85}86 87; CHECK-LABEL: test_load_sub_3288; CHECK: w0 = w289; CHECK: w0 = -w090; CHECK: w0 = atomic_fetch_add((u32 *)(r1 + 0), w0)91; CHECK: encoding: [0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00]92define dso_local i32 @test_load_sub_32(ptr nocapture %p, i32 %v) local_unnamed_addr {93entry:94  %0 = atomicrmw sub ptr %p, i32 %v seq_cst95  ret i32 %096}97 98; CHECK-LABEL: test_load_sub_6499; CHECK: r0 = r2100; CHECK: r0 = -r0101; CHECK: r0 = atomic_fetch_add((u64 *)(r1 + 0), r0)102; CHECK: encoding: [0xdb,0x01,0x00,0x00,0x01,0x00,0x00,0x00]103define dso_local i32 @test_load_sub_64(ptr nocapture %p, i64 %v) local_unnamed_addr {104entry:105  %0 = atomicrmw sub ptr %p, i64 %v seq_cst106  %conv = trunc i64 %0 to i32107  ret i32 %conv108}109 110; CHECK-LABEL: test_xchg_32111; CHECK: w0 = w2112; CHECK: w0 = xchg32_32(r1 + 0, w0)113; CHECK: encoding: [0xc3,0x01,0x00,0x00,0xe1,0x00,0x00,0x00]114define dso_local i32 @test_xchg_32(ptr nocapture %p, i32 %v) local_unnamed_addr {115entry:116  %0 = atomicrmw xchg ptr %p, i32 %v seq_cst117  ret i32 %0118}119 120; CHECK-LABEL: test_xchg_64121; CHECK: r0 = r2122; CHECK: r0 = xchg_64(r1 + 0, r0)123; CHECK: encoding: [0xdb,0x01,0x00,0x00,0xe1,0x00,0x00,0x00]124define dso_local i32 @test_xchg_64(ptr nocapture %p, i64 %v) local_unnamed_addr {125entry:126  %0 = atomicrmw xchg ptr %p, i64 %v seq_cst127  %conv = trunc i64 %0 to i32128  ret i32 %conv129}130 131; CHECK-LABEL: test_cas_32132; CHECK: w0 = w2133; CHECK: w0 = cmpxchg32_32(r1 + 0, w0, w3)134; CHECK: encoding: [0xc3,0x31,0x00,0x00,0xf1,0x00,0x00,0x00]135define dso_local i32 @test_cas_32(ptr nocapture %p, i32 %old, i32 %new) local_unnamed_addr {136entry:137  %0 = cmpxchg ptr %p, i32 %old, i32 %new seq_cst seq_cst138  %1 = extractvalue { i32, i1 } %0, 0139  ret i32 %1140}141 142; CHECK-LABEL: test_cas_64143; CHECK: r0 = r2144; CHECK: r0 = cmpxchg_64(r1 + 0, r0, r3)145; CHECK: encoding: [0xdb,0x31,0x00,0x00,0xf1,0x00,0x00,0x00]146define dso_local i64 @test_cas_64(ptr nocapture %p, i64 %old, i64 %new) local_unnamed_addr {147entry:148  %0 = cmpxchg ptr %p, i64 %old, i64 %new seq_cst seq_cst149  %1 = extractvalue { i64, i1 } %0, 0150  ret i64 %1151}152 153; CHECK-LABEL: test_load_and_32154; CHECK: w0 = w2155; CHECK: w0 = atomic_fetch_and((u32 *)(r1 + 0), w0)156; CHECK: encoding: [0xc3,0x01,0x00,0x00,0x51,0x00,0x00,0x00]157define dso_local i32 @test_load_and_32(ptr nocapture %p, i32 %v) local_unnamed_addr {158entry:159  %0 = atomicrmw and ptr %p, i32 %v seq_cst160  ret i32 %0161}162 163; CHECK-LABEL: test_load_and_64164; CHECK: r0 = r2165; CHECK: r0 = atomic_fetch_and((u64 *)(r1 + 0), r0)166; CHECK: encoding: [0xdb,0x01,0x00,0x00,0x51,0x00,0x00,0x00]167define dso_local i32 @test_load_and_64(ptr nocapture %p, i64 %v) local_unnamed_addr {168entry:169  %0 = atomicrmw and ptr %p, i64 %v seq_cst170  %conv = trunc i64 %0 to i32171  ret i32 %conv172}173 174; CHECK-LABEL: test_load_or_32175; CHECK: w0 = w2176; CHECK: w0 = atomic_fetch_or((u32 *)(r1 + 0), w0)177; CHECK: encoding: [0xc3,0x01,0x00,0x00,0x41,0x00,0x00,0x00]178define dso_local i32 @test_load_or_32(ptr nocapture %p, i32 %v) local_unnamed_addr {179entry:180  %0 = atomicrmw or ptr %p, i32 %v seq_cst181  ret i32 %0182}183 184; CHECK-LABEL: test_load_or_64185; CHECK: r0 = r2186; CHECK: r0 = atomic_fetch_or((u64 *)(r1 + 0), r0)187; CHECK: encoding: [0xdb,0x01,0x00,0x00,0x41,0x00,0x00,0x00]188define dso_local i32 @test_load_or_64(ptr nocapture %p, i64 %v) local_unnamed_addr {189entry:190  %0 = atomicrmw or ptr %p, i64 %v seq_cst191  %conv = trunc i64 %0 to i32192  ret i32 %conv193}194 195; CHECK-LABEL: test_load_xor_32196; CHECK: w0 = w2197; CHECK: w0 = atomic_fetch_xor((u32 *)(r1 + 0), w0)198; CHECK: encoding: [0xc3,0x01,0x00,0x00,0xa1,0x00,0x00,0x00]199define dso_local i32 @test_load_xor_32(ptr nocapture %p, i32 %v) local_unnamed_addr {200entry:201  %0 = atomicrmw xor ptr %p, i32 %v seq_cst202  ret i32 %0203}204 205; CHECK-LABEL: test_load_xor_64206; CHECK: r0 = r2207; CHECK: r0 = atomic_fetch_xor((u64 *)(r1 + 0), r0)208; CHECK: encoding: [0xdb,0x01,0x00,0x00,0xa1,0x00,0x00,0x00]209define dso_local i32 @test_load_xor_64(ptr nocapture %p, i64 %v) local_unnamed_addr {210entry:211  %0 = atomicrmw xor ptr %p, i64 %v seq_cst212  %conv = trunc i64 %0 to i32213  ret i32 %conv214}215 216; CHECK-LABEL: test_atomic_xor_32217; CHECK: w2 = atomic_fetch_xor((u32 *)(r1 + 0), w2)218; CHECK: encoding: [0xc3,0x21,0x00,0x00,0xa1,0x00,0x00,0x00]219; CHECK: w0 = 0220define dso_local i32 @test_atomic_xor_32(ptr nocapture %p, i32 %v) local_unnamed_addr {221entry:222  %0 = atomicrmw xor ptr %p, i32 %v seq_cst223  ret i32 0224}225 226; CHECK-LABEL: test_atomic_xor_64227; CHECK: atomic_fetch_xor((u64 *)(r1 + 0), r2)228; CHECK: encoding: [0xdb,0x21,0x00,0x00,0xa1,0x00,0x00,0x00]229; CHECK: w0 = 0230define dso_local i32 @test_atomic_xor_64(ptr nocapture %p, i64 %v) local_unnamed_addr {231entry:232  %0 = atomicrmw xor ptr %p, i64 %v seq_cst233  ret i32 0234}235 236; CHECK-LABEL: test_atomic_and_64237; CHECK: r2 = atomic_fetch_and((u64 *)(r1 + 0), r2)238; CHECK: encoding: [0xdb,0x21,0x00,0x00,0x51,0x00,0x00,0x00]239; CHECK: w0 = 0240define dso_local i32 @test_atomic_and_64(ptr nocapture %p, i64 %v) local_unnamed_addr {241entry:242  %0 = atomicrmw and ptr %p, i64 %v seq_cst243  ret i32 0244}245 246; CHECK-LABEL: test_atomic_or_64247; CHECK: r2 = atomic_fetch_or((u64 *)(r1 + 0), r2)248; CHECK: encoding: [0xdb,0x21,0x00,0x00,0x41,0x00,0x00,0x00]249; CHECK: w0 = 0250define dso_local i32 @test_atomic_or_64(ptr nocapture %p, i64 %v) local_unnamed_addr {251entry:252  %0 = atomicrmw or ptr %p, i64 %v seq_cst253  ret i32 0254}255