blob: 3e2ad2a24302c5dc7d3e9c14a8b7e5d3b701bed1 [file] [log] [blame]
alan-bakerf67468c2019-11-25 15:51:49 -05001// Copyright 2019 The Clspv Authors. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#include "Builtins.h"
16
17using namespace llvm;
18
19bool clspv::IsImageBuiltin(StringRef name) {
alan-baker75090e42020-02-20 11:21:04 -050020 return clspv::IsSampledImageRead(name) || clspv::IsUnsampledImageRead(name) ||
21 clspv::IsImageWrite(name) || clspv::IsImageQuery(name);
alan-bakerf67468c2019-11-25 15:51:49 -050022}
23
24bool clspv::IsSampledImageRead(StringRef name) {
25 return clspv::IsFloatSampledImageRead(name) ||
26 clspv::IsUintSampledImageRead(name) ||
27 clspv::IsIntSampledImageRead(name);
28}
29
30bool clspv::IsFloatSampledImageRead(StringRef name) {
alan-bakerf906d2b2019-12-10 11:26:23 -050031 return name.startswith("_Z11read_imagef14ocl_image1d_ro11ocl_samplerf") ||
32 name.startswith("_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f") ||
alan-bakerf67468c2019-11-25 15:51:49 -050033 name.startswith("_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f") ||
alan-baker7150a1d2020-02-25 08:31:06 -050034 name.startswith(
35 "_Z11read_imagef20ocl_image1d_array_ro11ocl_samplerDv2_f") ||
36 name.startswith(
37 "_Z11read_imagef20ocl_image2d_array_ro11ocl_samplerDv4_f") ||
alan-bakerf906d2b2019-12-10 11:26:23 -050038 name.startswith("_Z11read_imagef14ocl_image1d_ro11ocl_sampleri") ||
alan-bakerf67468c2019-11-25 15:51:49 -050039 name.startswith("_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_i") ||
alan-baker7150a1d2020-02-25 08:31:06 -050040 name.startswith("_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_i") ||
41 name.startswith(
42 "_Z11read_imagef20ocl_image1d_array_ro11ocl_samplerDv2_i") ||
43 name.startswith(
44 "_Z11read_imagef20ocl_image2d_array_ro11ocl_samplerDv4_i");
alan-bakerf67468c2019-11-25 15:51:49 -050045}
46
47bool clspv::IsUintSampledImageRead(StringRef name) {
alan-bakerf906d2b2019-12-10 11:26:23 -050048 return name.startswith("_Z12read_imageui14ocl_image1d_ro11ocl_samplerf") ||
49 name.startswith(
alan-bakerf67468c2019-11-25 15:51:49 -050050 "_Z12read_imageui14ocl_image2d_ro11ocl_samplerDv2_f") ||
51 name.startswith(
52 "_Z12read_imageui14ocl_image3d_ro11ocl_samplerDv4_f") ||
alan-baker7150a1d2020-02-25 08:31:06 -050053 name.startswith(
54 "_Z12read_imageui20ocl_image1d_array_ro11ocl_samplerDv2_f") ||
55 name.startswith(
56 "_Z12read_imageui20ocl_image2d_array_ro11ocl_samplerDv4_f") ||
alan-bakerf906d2b2019-12-10 11:26:23 -050057 name.startswith("_Z12read_imageui14ocl_image1d_ro11ocl_sampleri") ||
alan-bakerf67468c2019-11-25 15:51:49 -050058 name.startswith(
59 "_Z12read_imageui14ocl_image2d_ro11ocl_samplerDv2_i") ||
alan-baker7150a1d2020-02-25 08:31:06 -050060 name.startswith(
61 "_Z12read_imageui14ocl_image3d_ro11ocl_samplerDv4_i") ||
62 name.startswith(
63 "_Z12read_imageui20ocl_image1d_array_ro11ocl_samplerDv2_i") ||
64 name.startswith(
65 "_Z12read_imageui20ocl_image2d_array_ro11ocl_samplerDv4_i");
alan-bakerf67468c2019-11-25 15:51:49 -050066}
67
68bool clspv::IsIntSampledImageRead(StringRef name) {
alan-bakerf906d2b2019-12-10 11:26:23 -050069 return name.startswith("_Z11read_imagei14ocl_image1d_ro11ocl_samplerf") ||
70 name.startswith("_Z11read_imagei14ocl_image2d_ro11ocl_samplerDv2_f") ||
alan-bakerf67468c2019-11-25 15:51:49 -050071 name.startswith("_Z11read_imagei14ocl_image3d_ro11ocl_samplerDv4_f") ||
alan-baker7150a1d2020-02-25 08:31:06 -050072 name.startswith(
73 "_Z11read_imagei20ocl_image1d_array_ro11ocl_samplerDv2_f") ||
74 name.startswith(
75 "_Z11read_imagei20ocl_image2d_array_ro11ocl_samplerDv4_f") ||
alan-bakerf906d2b2019-12-10 11:26:23 -050076 name.startswith("_Z11read_imagei14ocl_image1d_ro11ocl_sampleri") ||
alan-bakerf67468c2019-11-25 15:51:49 -050077 name.startswith("_Z11read_imagei14ocl_image2d_ro11ocl_samplerDv2_i") ||
alan-baker7150a1d2020-02-25 08:31:06 -050078 name.startswith("_Z11read_imagei14ocl_image3d_ro11ocl_samplerDv4_i") ||
79 name.startswith(
80 "_Z11read_imagei20ocl_image1d_array_ro11ocl_samplerDv2_i") ||
81 name.startswith(
82 "_Z11read_imagei20ocl_image2d_array_ro11ocl_samplerDv4_i");
alan-bakerf67468c2019-11-25 15:51:49 -050083}
84
alan-baker75090e42020-02-20 11:21:04 -050085bool clspv::IsUnsampledImageRead(StringRef name) {
86 return clspv::IsFloatUnsampledImageRead(name) ||
87 clspv::IsUintUnsampledImageRead(name) ||
88 clspv::IsIntUnsampledImageRead(name);
89}
90
91bool clspv::IsFloatUnsampledImageRead(StringRef name) {
92 return name.startswith("_Z11read_imagef14ocl_image1d_roi") ||
93 name.startswith("_Z11read_imagef14ocl_image2d_roDv2_i") ||
alan-baker7150a1d2020-02-25 08:31:06 -050094 name.startswith("_Z11read_imagef14ocl_image3d_roDv4_i") ||
95 name.startswith("_Z11read_imagef20ocl_image1d_array_roDv2_i") ||
96 name.startswith("_Z11read_imagef20ocl_image2d_array_roDv4_i");
alan-baker75090e42020-02-20 11:21:04 -050097}
98
99bool clspv::IsUintUnsampledImageRead(StringRef name) {
100 return name.startswith("_Z12read_imageui14ocl_image1d_roi") ||
101 name.startswith("_Z12read_imageui14ocl_image2d_roDv2_i") ||
alan-baker7150a1d2020-02-25 08:31:06 -0500102 name.startswith("_Z12read_imageui14ocl_image3d_roDv4_i") ||
103 name.startswith("_Z12read_imageui20ocl_image1d_array_roDv2_i") ||
104 name.startswith("_Z12read_imageui20ocl_image2d_array_roDv4_i");
alan-baker75090e42020-02-20 11:21:04 -0500105}
106
107bool clspv::IsIntUnsampledImageRead(StringRef name) {
108 return name.startswith("_Z11read_imagei14ocl_image1d_roi") ||
109 name.startswith("_Z11read_imagei14ocl_image2d_roDv2_i") ||
alan-baker7150a1d2020-02-25 08:31:06 -0500110 name.startswith("_Z11read_imagei14ocl_image3d_roDv4_i") ||
111 name.startswith("_Z11read_imagei20ocl_image1d_array_roDv2_i") ||
112 name.startswith("_Z11read_imagei20ocl_image2d_array_roDv4_i");
alan-baker75090e42020-02-20 11:21:04 -0500113}
114
alan-bakerf67468c2019-11-25 15:51:49 -0500115bool clspv::IsImageWrite(StringRef name) {
116 return clspv::IsFloatImageWrite(name) || clspv::IsUintImageWrite(name) ||
117 clspv::IsIntImageWrite(name);
118}
119
120bool clspv::IsFloatImageWrite(StringRef name) {
alan-bakerf906d2b2019-12-10 11:26:23 -0500121 return name.startswith("_Z12write_imagef14ocl_image1d_woiDv4_f") ||
122 name.startswith("_Z12write_imagef14ocl_image2d_woDv2_iDv4_f") ||
alan-baker7150a1d2020-02-25 08:31:06 -0500123 name.startswith("_Z12write_imagef14ocl_image3d_woDv4_iDv4_f") ||
124 name.startswith("_Z12write_imagef20ocl_image1d_array_woDv2_iDv4_f") ||
125 name.startswith("_Z12write_imagef20ocl_image2d_array_woDv4_iDv4_f");
alan-bakerf67468c2019-11-25 15:51:49 -0500126}
127
128bool clspv::IsUintImageWrite(StringRef name) {
alan-bakerf906d2b2019-12-10 11:26:23 -0500129 return name.startswith("_Z13write_imageui14ocl_image1d_woiDv4_j") ||
130 name.startswith("_Z13write_imageui14ocl_image2d_woDv2_iDv4_j") ||
alan-baker7150a1d2020-02-25 08:31:06 -0500131 name.startswith("_Z13write_imageui14ocl_image3d_woDv4_iDv4_j") ||
132 name.startswith("_Z13write_imageui20ocl_image1d_array_woDv2_iDv4_j") ||
133 name.startswith("_Z13write_imageui20ocl_image2d_array_woDv4_iDv4_j");
alan-bakerf67468c2019-11-25 15:51:49 -0500134}
135
136bool clspv::IsIntImageWrite(StringRef name) {
alan-baker7150a1d2020-02-25 08:31:06 -0500137 // Odd mangling for 2d array and 3d writes.
alan-bakerf906d2b2019-12-10 11:26:23 -0500138 return name.startswith("_Z12write_imagei14ocl_image1d_woiDv4_i") ||
139 name.startswith("_Z12write_imagei14ocl_image2d_woDv2_iDv4_i") ||
alan-baker7150a1d2020-02-25 08:31:06 -0500140 name.startswith("_Z12write_imagei14ocl_image3d_woDv4_iS0_") ||
141 name.startswith("_Z12write_imagei20ocl_image1d_array_woDv2_iDv4_i") ||
142 name.startswith("_Z12write_imagei20ocl_image2d_array_woDv4_iS0_");
alan-bakerf67468c2019-11-25 15:51:49 -0500143}
144
145bool clspv::IsGetImageHeight(StringRef name) {
146 return name.startswith("_Z16get_image_height14ocl_image2d_ro") ||
alan-bakerce179f12019-12-06 19:02:22 -0500147 name.startswith("_Z16get_image_height14ocl_image2d_wo") ||
148 name.startswith("_Z16get_image_height14ocl_image3d_ro") ||
alan-baker7150a1d2020-02-25 08:31:06 -0500149 name.startswith("_Z16get_image_height14ocl_image3d_wo") ||
150 name.startswith("_Z16get_image_height20ocl_image2d_array_ro") ||
151 name.startswith("_Z16get_image_height20ocl_image2d_array_wo");
alan-bakerf67468c2019-11-25 15:51:49 -0500152}
153
154bool clspv::IsGetImageWidth(StringRef name) {
alan-bakerf906d2b2019-12-10 11:26:23 -0500155 return name.startswith("_Z15get_image_width14ocl_image1d_ro") ||
156 name.startswith("_Z15get_image_width14ocl_image1d_wo") ||
157 name.startswith("_Z15get_image_width14ocl_image2d_ro") ||
alan-bakerce179f12019-12-06 19:02:22 -0500158 name.startswith("_Z15get_image_width14ocl_image2d_wo") ||
159 name.startswith("_Z15get_image_width14ocl_image3d_ro") ||
alan-baker7150a1d2020-02-25 08:31:06 -0500160 name.startswith("_Z15get_image_width14ocl_image3d_wo") ||
161 name.startswith("_Z15get_image_width20ocl_image1d_array_ro") ||
162 name.startswith("_Z15get_image_width20ocl_image1d_array_wo") ||
163 name.startswith("_Z15get_image_width20ocl_image2d_array_ro") ||
164 name.startswith("_Z15get_image_width20ocl_image2d_array_wo");
alan-bakerce179f12019-12-06 19:02:22 -0500165}
166
167bool clspv::IsGetImageDepth(StringRef name) {
168 return name.startswith("_Z15get_image_depth14ocl_image3d_ro") ||
169 name.startswith("_Z15get_image_depth14ocl_image3d_wo");
170}
171
172bool clspv::IsGetImageDim(StringRef name) {
173 return name.startswith("_Z13get_image_dim14ocl_image2d_ro") ||
174 name.startswith("_Z13get_image_dim14ocl_image2d_wo") ||
175 name.startswith("_Z13get_image_dim14ocl_image3d_ro") ||
alan-baker7150a1d2020-02-25 08:31:06 -0500176 name.startswith("_Z13get_image_dim14ocl_image3d_wo") ||
177 name.startswith("_Z13get_image_dim20ocl_image2d_array_ro") ||
178 name.startswith("_Z13get_image_dim20ocl_image2d_array_wo");
alan-bakerce179f12019-12-06 19:02:22 -0500179}
180
181bool clspv::IsImageQuery(StringRef name) {
182 return clspv::IsGetImageHeight(name) || clspv::IsGetImageWidth(name) ||
183 clspv::IsGetImageDepth(name) || clspv::IsGetImageDim(name);
alan-bakerf67468c2019-11-25 15:51:49 -0500184}