xref: /aosp_15_r20/external/clang/test/CodeGenOpenCL/unroll-hint.cl (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -emit-llvm -O0 -cl-std=CL2.0 -o - %s | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li/*** for ***/
4*67e74705SXin Livoid for_count()
5*67e74705SXin Li{
6*67e74705SXin Li// CHECK-LABEL: for_count
7*67e74705SXin Li    __attribute__((opencl_unroll_hint(8)))
8*67e74705SXin Li    for( int i = 0; i < 1000; ++i);
9*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[FOR_COUNT:.*]]
10*67e74705SXin Li}
11*67e74705SXin Li
12*67e74705SXin Livoid for_disable()
13*67e74705SXin Li{
14*67e74705SXin Li// CHECK-LABEL: for_disable
15*67e74705SXin Li    __attribute__((opencl_unroll_hint(1)))
16*67e74705SXin Li    for( int i = 0; i < 1000; ++i);
17*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[FOR_DISABLE:.*]]
18*67e74705SXin Li}
19*67e74705SXin Li
20*67e74705SXin Livoid for_full()
21*67e74705SXin Li{
22*67e74705SXin Li// CHECK-LABEL: for_full
23*67e74705SXin Li    __attribute__((opencl_unroll_hint))
24*67e74705SXin Li    for( int i = 0; i < 1000; ++i);
25*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[FOR_FULL:.*]]
26*67e74705SXin Li}
27*67e74705SXin Li
28*67e74705SXin Li/*** while ***/
29*67e74705SXin Livoid while_count()
30*67e74705SXin Li{
31*67e74705SXin Li// CHECK-LABEL: while_count
32*67e74705SXin Li    int i = 1000;
33*67e74705SXin Li    __attribute__((opencl_unroll_hint(8)))
34*67e74705SXin Li    while(i-->0);
35*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_COUNT:.*]]
36*67e74705SXin Li}
37*67e74705SXin Li
38*67e74705SXin Livoid while_disable()
39*67e74705SXin Li{
40*67e74705SXin Li// CHECK-LABEL: while_disable
41*67e74705SXin Li    int i = 1000;
42*67e74705SXin Li    __attribute__((opencl_unroll_hint(1)))
43*67e74705SXin Li    while(i-->0);
44*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_DISABLE:.*]]
45*67e74705SXin Li}
46*67e74705SXin Li
47*67e74705SXin Livoid while_full()
48*67e74705SXin Li{
49*67e74705SXin Li// CHECK-LABEL: while_full
50*67e74705SXin Li    int i = 1000;
51*67e74705SXin Li    __attribute__((opencl_unroll_hint))
52*67e74705SXin Li    while(i-->0);
53*67e74705SXin Li// CHECK: br label %{{.*}}, !llvm.loop ![[WHILE_FULL:.*]]
54*67e74705SXin Li}
55*67e74705SXin Li
56*67e74705SXin Li/*** do ***/
57*67e74705SXin Livoid do_count()
58*67e74705SXin Li{
59*67e74705SXin Li// CHECK-LABEL: do_count
60*67e74705SXin Li    int i = 1000;
61*67e74705SXin Li    __attribute__((opencl_unroll_hint(8)))
62*67e74705SXin Li    do {} while(i--> 0);
63*67e74705SXin Li// CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_COUNT:.*]]
64*67e74705SXin Li}
65*67e74705SXin Li
66*67e74705SXin Livoid do_disable()
67*67e74705SXin Li{
68*67e74705SXin Li// CHECK-LABEL: do_disable
69*67e74705SXin Li    int i = 1000;
70*67e74705SXin Li    __attribute__((opencl_unroll_hint(1)))
71*67e74705SXin Li    do {} while(i--> 0);
72*67e74705SXin Li// CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_DISABLE:.*]]
73*67e74705SXin Li}
74*67e74705SXin Li
75*67e74705SXin Livoid do_full()
76*67e74705SXin Li{
77*67e74705SXin Li// CHECK-LABEL: do_full
78*67e74705SXin Li    int i = 1000;
79*67e74705SXin Li    __attribute__((opencl_unroll_hint))
80*67e74705SXin Li    do {} while(i--> 0);
81*67e74705SXin Li// CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !llvm.loop ![[DO_FULL:.*]]
82*67e74705SXin Li}
83*67e74705SXin Li
84*67e74705SXin Li
85*67e74705SXin Li// CHECK: ![[FOR_COUNT]]     =  distinct !{![[FOR_COUNT]],  ![[COUNT:.*]]}
86*67e74705SXin Li// CHECK: ![[COUNT]]         =  !{!"llvm.loop.unroll.count", i32 8}
87*67e74705SXin Li// CHECK: ![[FOR_DISABLE]]   =  distinct !{![[FOR_DISABLE]],  ![[DISABLE:.*]]}
88*67e74705SXin Li// CHECK: ![[DISABLE]]       =  !{!"llvm.loop.unroll.disable"}
89*67e74705SXin Li// CHECK: ![[FOR_FULL]]      =  distinct !{![[FOR_FULL]],  ![[FULL:.*]]}
90*67e74705SXin Li// CHECK: ![[FULL]]          =  !{!"llvm.loop.unroll.full"}
91*67e74705SXin Li// CHECK: ![[WHILE_COUNT]]   =  distinct !{![[WHILE_COUNT]],    ![[COUNT]]}
92*67e74705SXin Li// CHECK: ![[WHILE_DISABLE]] =  distinct !{![[WHILE_DISABLE]],  ![[DISABLE]]}
93*67e74705SXin Li// CHECK: ![[WHILE_FULL]]    =  distinct !{![[WHILE_FULL]],     ![[FULL]]}
94*67e74705SXin Li// CHECK: ![[DO_COUNT]]      =  distinct !{![[DO_COUNT]],       ![[COUNT]]}
95*67e74705SXin Li// CHECK: ![[DO_DISABLE]]    =  distinct !{![[DO_DISABLE]],     ![[DISABLE]]}
96*67e74705SXin Li// CHECK: ![[DO_FULL]]       =  distinct !{![[DO_FULL]],        ![[FULL]]}
97