1*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -triple arm64-apple-ios -O3 -emit-llvm -o - %s | FileCheck %s
2*0a6a1f1dSLionel Sambuc
f0(void * a,void * b)3*0a6a1f1dSLionel Sambuc void f0(void *a, void *b) {
4*0a6a1f1dSLionel Sambuc __clear_cache(a,b);
5*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @__clear_cache
6*0a6a1f1dSLionel Sambuc }
7*0a6a1f1dSLionel Sambuc
8*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.aarch64.rbit.i32(i32 %a)
rbit(unsigned a)9*0a6a1f1dSLionel Sambuc unsigned rbit(unsigned a) {
10*0a6a1f1dSLionel Sambuc return __builtin_arm_rbit(a);
11*0a6a1f1dSLionel Sambuc }
12*0a6a1f1dSLionel Sambuc
13*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.aarch64.rbit.i64(i64 %a)
rbit64(unsigned long long a)14*0a6a1f1dSLionel Sambuc unsigned long long rbit64(unsigned long long a) {
15*0a6a1f1dSLionel Sambuc return __builtin_arm_rbit64(a);
16*0a6a1f1dSLionel Sambuc }
17*0a6a1f1dSLionel Sambuc
hints()18*0a6a1f1dSLionel Sambuc void hints() {
19*0a6a1f1dSLionel Sambuc __builtin_arm_nop(); //CHECK: call {{.*}} @llvm.aarch64.hint(i32 0)
20*0a6a1f1dSLionel Sambuc __builtin_arm_yield(); //CHECK: call {{.*}} @llvm.aarch64.hint(i32 1)
21*0a6a1f1dSLionel Sambuc __builtin_arm_wfe(); //CHECK: call {{.*}} @llvm.aarch64.hint(i32 2)
22*0a6a1f1dSLionel Sambuc __builtin_arm_wfi(); //CHECK: call {{.*}} @llvm.aarch64.hint(i32 3)
23*0a6a1f1dSLionel Sambuc __builtin_arm_sev(); //CHECK: call {{.*}} @llvm.aarch64.hint(i32 4)
24*0a6a1f1dSLionel Sambuc __builtin_arm_sevl(); //CHECK: call {{.*}} @llvm.aarch64.hint(i32 5)
25*0a6a1f1dSLionel Sambuc }
26*0a6a1f1dSLionel Sambuc
barriers()27*0a6a1f1dSLionel Sambuc void barriers() {
28*0a6a1f1dSLionel Sambuc __builtin_arm_dmb(1); //CHECK: call {{.*}} @llvm.aarch64.dmb(i32 1)
29*0a6a1f1dSLionel Sambuc __builtin_arm_dsb(2); //CHECK: call {{.*}} @llvm.aarch64.dsb(i32 2)
30*0a6a1f1dSLionel Sambuc __builtin_arm_isb(3); //CHECK: call {{.*}} @llvm.aarch64.isb(i32 3)
31*0a6a1f1dSLionel Sambuc }
32*0a6a1f1dSLionel Sambuc
prefetch()33*0a6a1f1dSLionel Sambuc void prefetch() {
34*0a6a1f1dSLionel Sambuc __builtin_arm_prefetch(0, 1, 2, 0, 1); // pstl3keep
35*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* null, i32 1, i32 1, i32 1)
36*0a6a1f1dSLionel Sambuc
37*0a6a1f1dSLionel Sambuc __builtin_arm_prefetch(0, 0, 0, 1, 1); // pldl1keep
38*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* null, i32 0, i32 0, i32 1)
39*0a6a1f1dSLionel Sambuc
40*0a6a1f1dSLionel Sambuc __builtin_arm_prefetch(0, 0, 0, 1, 1); // pldl1strm
41*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* null, i32 0, i32 0, i32 1)
42*0a6a1f1dSLionel Sambuc
43*0a6a1f1dSLionel Sambuc __builtin_arm_prefetch(0, 0, 0, 0, 0); // plil1keep
44*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* null, i32 0, i32 3, i32 0)
45*0a6a1f1dSLionel Sambuc }
46