diff options
Diffstat (limited to 'llvm/test/CodeGen/BPF/memintrin.ll')
-rw-r--r-- | llvm/test/CodeGen/BPF/memintrin.ll | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/BPF/memintrin.ll b/llvm/test/CodeGen/BPF/memintrin.ll new file mode 100644 index 0000000..43ad426 --- /dev/null +++ b/llvm/test/CodeGen/BPF/memintrin.ll @@ -0,0 +1,87 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 +; RUN: llc -march=bpfel < %s | FileCheck %s + +declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1) + +declare void @llvm.memmove.p0.p0.i64(ptr, ptr, i64, i1) + +declare void @llvm.memset.p0.i64(ptr, i8, i64, i1) + +define void @memcpy(ptr %a, ptr %b, i64 %len) { +; CHECK-LABEL: memcpy: +; CHECK: # %bb.0: +; CHECK-NEXT: if r3 == 0 goto LBB0_3 +; CHECK-NEXT: # %bb.1: # %loop-memcpy-expansion.preheader +; CHECK-NEXT: r4 = 0 +; CHECK-NEXT: LBB0_2: # %loop-memcpy-expansion +; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 +; CHECK-NEXT: r5 = r1 +; CHECK-NEXT: r5 += r4 +; CHECK-NEXT: r0 = r2 +; CHECK-NEXT: r0 += r4 +; CHECK-NEXT: r0 = *(u8 *)(r0 + 0) +; CHECK-NEXT: *(u8 *)(r5 + 0) = r0 +; CHECK-NEXT: r4 += 1 +; CHECK-NEXT: if r3 > r4 goto LBB0_2 +; CHECK-NEXT: LBB0_3: # %post-loop-memcpy-expansion +; CHECK-NEXT: exit + call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 %len, i1 false) + ret void +} + + +define void @memmove(ptr %a, ptr %b, i64 %len) { +; CHECK-LABEL: memmove: +; CHECK: # %bb.0: +; CHECK-NEXT: if r2 >= r1 goto LBB1_4 +; CHECK-NEXT: # %bb.1: # %copy_backwards +; CHECK-NEXT: if r3 == 0 goto LBB1_6 +; CHECK-NEXT: # %bb.2: # %copy_backwards_loop.preheader +; CHECK-NEXT: r2 += -1 +; CHECK-NEXT: r1 += -1 +; CHECK-NEXT: LBB1_3: # %copy_backwards_loop +; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 +; CHECK-NEXT: r4 = r1 +; CHECK-NEXT: r4 += r3 +; CHECK-NEXT: r5 = r2 +; CHECK-NEXT: r5 += r3 +; CHECK-NEXT: r5 = *(u8 *)(r5 + 0) +; CHECK-NEXT: *(u8 *)(r4 + 0) = r5 +; CHECK-NEXT: r3 += -1 +; CHECK-NEXT: if r3 == 0 goto LBB1_6 +; CHECK-NEXT: goto LBB1_3 +; CHECK-NEXT: LBB1_4: # %copy_forward +; CHECK-NEXT: if r3 == 0 goto LBB1_6 +; CHECK-NEXT: LBB1_5: # %copy_forward_loop +; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 +; CHECK-NEXT: r4 = *(u8 *)(r2 + 0) +; CHECK-NEXT: *(u8 *)(r1 + 0) = r4 +; CHECK-NEXT: r2 += 1 +; CHECK-NEXT: r1 += 1 +; CHECK-NEXT: r3 += -1 +; CHECK-NEXT: if r3 != 0 goto LBB1_5 +; CHECK-NEXT: LBB1_6: # %memmove_done +; CHECK-NEXT: exit + call void @llvm.memmove.p0.p0.i64(ptr %a, ptr %b, i64 %len, i1 false) + ret void +} + + +define void @memset(ptr %a, i8 %b, i64 %len) { +; CHECK-LABEL: memset: +; CHECK: # %bb.0: +; CHECK-NEXT: if r3 == 0 goto LBB2_3 +; CHECK-NEXT: # %bb.1: # %loadstoreloop.preheader +; CHECK-NEXT: r4 = 0 +; CHECK-NEXT: LBB2_2: # %loadstoreloop +; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 +; CHECK-NEXT: r5 = r1 +; CHECK-NEXT: r5 += r4 +; CHECK-NEXT: *(u8 *)(r5 + 0) = r2 +; CHECK-NEXT: r4 += 1 +; CHECK-NEXT: if r3 > r4 goto LBB2_2 +; CHECK-NEXT: LBB2_3: # %split +; CHECK-NEXT: exit + call void @llvm.memset.p0.i64(ptr %a, i8 %b, i64 %len, i1 false) + ret void +} |