1 // RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -target-feature +mops -target-feature +mte -w -S -emit-llvm -o - %s  | FileCheck --check-prefix=CHECK-MOPS   %s
2 // RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -target-feature +mops -Wno-implicit-function-declaration -w -S -emit-llvm -o - %s  | FileCheck --check-prefix=CHECK-NOMOPS %s
3 // RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -Wno-implicit-function-declaration -target-feature +mte -w -S -emit-llvm -o - %s  | FileCheck --check-prefix=CHECK-NOMOPS %s
4 // RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -Wno-implicit-function-declaration -w -S -emit-llvm -o - %s  | FileCheck --check-prefix=CHECK-NOMOPS %s
5 
6 #include <arm_acle.h>
7 #include <stddef.h>
8 
9 // CHECK-LABEL:       @bzero_0(
10 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
11 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
12 void *bzero_0(void *dst) {
13   return __arm_mops_memset_tag(dst, 0, 0);
14 }
15 
16 // CHECK-LABEL:       @bzero_1(
17 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
18 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
19 void *bzero_1(void *dst) {
20   return __arm_mops_memset_tag(dst, 0, 1);
21 }
22 
23 // CHECK-LABEL:       @bzero_10(
24 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
25 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
26 void *bzero_10(void *dst) {
27   return __arm_mops_memset_tag(dst, 0, 10);
28 }
29 
30 // CHECK-LABEL:       @bzero_10000(
31 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
32 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
33 void *bzero_10000(void *dst) {
34   return __arm_mops_memset_tag(dst, 0, 10000);
35 }
36 
37 // CHECK-LABEL:       @bzero_n(
38 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
39 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
40 void *bzero_n(void *dst, size_t size) {
41   return __arm_mops_memset_tag(dst, 0, size);
42 }
43 
44 // CHECK-LABEL:       @memset_0(
45 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
46 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
47 void *memset_0(void *dst, int value) {
48   return __arm_mops_memset_tag(dst, value, 0);
49 }
50 
51 // CHECK-LABEL:       @memset_1(
52 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
53 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
54 void *memset_1(void *dst, int value) {
55   return __arm_mops_memset_tag(dst, value, 1);
56 }
57 
58 // CHECK-LABEL:       @memset_10(
59 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
60 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
61 void *memset_10(void *dst, int value) {
62   return __arm_mops_memset_tag(dst, value, 10);
63 }
64 
65 // CHECK-LABEL:       @memset_10000(
66 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
67 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
68 void *memset_10000(void *dst, int value) {
69   return __arm_mops_memset_tag(dst, value, 10000);
70 }
71 
72 // CHECK-LABEL:       @memset_n(
73 // CHECK-MOPS:        @llvm.aarch64.mops.memset.tag
74 // CHECK-NOMOPS-NOT:  @llvm.aarch64.mops.memset.tag
75 void *memset_n(void *dst, int value, size_t size) {
76   return __arm_mops_memset_tag(dst, value, size);
77 }
78