1f4a2713aSLionel Sambuc // REQUIRES: arm-registered-target
2f4a2713aSLionel Sambuc // RUN: %clang_cc1 -Wall -Werror -triple thumbv7-eabi -target-cpu cortex-a8 -O3 -emit-llvm -o - %s | FileCheck %s
3f4a2713aSLionel Sambuc
f0()4f4a2713aSLionel Sambuc void *f0()
5f4a2713aSLionel Sambuc {
6f4a2713aSLionel Sambuc return __builtin_thread_pointer();
7f4a2713aSLionel Sambuc }
8f4a2713aSLionel Sambuc
f1(char * a,char * b)9f4a2713aSLionel Sambuc void f1(char *a, char *b) {
10f4a2713aSLionel Sambuc __clear_cache(a,b);
11f4a2713aSLionel Sambuc }
12f4a2713aSLionel Sambuc
13f4a2713aSLionel Sambuc // CHECK: call {{.*}} @__clear_cache
14f4a2713aSLionel Sambuc
test_eh_return_data_regno()15f4a2713aSLionel Sambuc void test_eh_return_data_regno()
16f4a2713aSLionel Sambuc {
17f4a2713aSLionel Sambuc volatile int res;
18f4a2713aSLionel Sambuc res = __builtin_eh_return_data_regno(0); // CHECK: store volatile i32 0
19f4a2713aSLionel Sambuc res = __builtin_eh_return_data_regno(1); // CHECK: store volatile i32 1
20f4a2713aSLionel Sambuc }
21f4a2713aSLionel Sambuc
nop()22*0a6a1f1dSLionel Sambuc void nop() {
23*0a6a1f1dSLionel Sambuc __builtin_arm_nop();
24*0a6a1f1dSLionel Sambuc }
25*0a6a1f1dSLionel Sambuc
26*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 0)
27*0a6a1f1dSLionel Sambuc
yield()28*0a6a1f1dSLionel Sambuc void yield() {
29*0a6a1f1dSLionel Sambuc __builtin_arm_yield();
30*0a6a1f1dSLionel Sambuc }
31*0a6a1f1dSLionel Sambuc
32*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 1)
33*0a6a1f1dSLionel Sambuc
wfe()34*0a6a1f1dSLionel Sambuc void wfe() {
35*0a6a1f1dSLionel Sambuc __builtin_arm_wfe();
36*0a6a1f1dSLionel Sambuc }
37*0a6a1f1dSLionel Sambuc
38*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 2)
39*0a6a1f1dSLionel Sambuc
wfi()40*0a6a1f1dSLionel Sambuc void wfi() {
41*0a6a1f1dSLionel Sambuc __builtin_arm_wfi();
42*0a6a1f1dSLionel Sambuc }
43*0a6a1f1dSLionel Sambuc
44*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 3)
45*0a6a1f1dSLionel Sambuc
sev()46*0a6a1f1dSLionel Sambuc void sev() {
47*0a6a1f1dSLionel Sambuc __builtin_arm_sev();
48*0a6a1f1dSLionel Sambuc }
49*0a6a1f1dSLionel Sambuc
50*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 4)
51*0a6a1f1dSLionel Sambuc
sevl()52f4a2713aSLionel Sambuc void sevl() {
53f4a2713aSLionel Sambuc __builtin_arm_sevl();
54f4a2713aSLionel Sambuc }
55*0a6a1f1dSLionel Sambuc
56*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 5)
57*0a6a1f1dSLionel Sambuc
dbg()58*0a6a1f1dSLionel Sambuc void dbg() {
59*0a6a1f1dSLionel Sambuc __builtin_arm_dbg(0);
60*0a6a1f1dSLionel Sambuc }
61*0a6a1f1dSLionel Sambuc
62*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.dbg(i32 0)
63f4a2713aSLionel Sambuc
test_barrier()64f4a2713aSLionel Sambuc void test_barrier() {
65f4a2713aSLionel Sambuc __builtin_arm_dmb(1); //CHECK: call {{.*}} @llvm.arm.dmb(i32 1)
66f4a2713aSLionel Sambuc __builtin_arm_dsb(2); //CHECK: call {{.*}} @llvm.arm.dsb(i32 2)
67*0a6a1f1dSLionel Sambuc __builtin_arm_isb(3); //CHECK: call {{.*}} @llvm.arm.isb(i32 3)
68*0a6a1f1dSLionel Sambuc }
69*0a6a1f1dSLionel Sambuc
70*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.rbit(i32 %a)
71*0a6a1f1dSLionel Sambuc
rbit(unsigned a)72*0a6a1f1dSLionel Sambuc unsigned rbit(unsigned a) {
73*0a6a1f1dSLionel Sambuc return __builtin_arm_rbit(a);
74*0a6a1f1dSLionel Sambuc }
75*0a6a1f1dSLionel Sambuc
prefetch(int i)76*0a6a1f1dSLionel Sambuc void prefetch(int i) {
77*0a6a1f1dSLionel Sambuc __builtin_arm_prefetch(&i, 0, 1);
78*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* %{{.*}}, i32 0, i32 3, i32 1)
79*0a6a1f1dSLionel Sambuc
80*0a6a1f1dSLionel Sambuc __builtin_arm_prefetch(&i, 1, 1);
81*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* %{{.*}}, i32 1, i32 3, i32 1)
82*0a6a1f1dSLionel Sambuc
83*0a6a1f1dSLionel Sambuc
84*0a6a1f1dSLionel Sambuc __builtin_arm_prefetch(&i, 1, 0);
85*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* %{{.*}}, i32 1, i32 3, i32 0)
86f4a2713aSLionel Sambuc }
87