Skip to content

Commit 577eb4b

Browse files
committed
Fix crashing when finding type of ocl_image* types
1 parent 4576df7 commit 577eb4b

File tree

2 files changed

+76
-11
lines changed

2 files changed

+76
-11
lines changed

llvm/lib/Target/AMDGPU/AMDGPULibFunc.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -620,17 +620,17 @@ bool ItaniumParamParser::parseItaniumParam(StringRef& param,
620620
// parse type
621621
char const TC = param.front();
622622
if (isDigit(TC)) {
623-
res.ArgType = StringSwitch<AMDGPULibFunc::EType>
624-
(eatLengthPrefixedName(param))
625-
.Case("ocl_image1darray" , AMDGPULibFunc::IMG1DA)
626-
.Case("ocl_image1dbuffer", AMDGPULibFunc::IMG1DB)
627-
.Case("ocl_image2darray" , AMDGPULibFunc::IMG2DA)
628-
.Case("ocl_image1d" , AMDGPULibFunc::IMG1D)
629-
.Case("ocl_image2d" , AMDGPULibFunc::IMG2D)
630-
.Case("ocl_image3d" , AMDGPULibFunc::IMG3D)
631-
.Case("ocl_event" , AMDGPULibFunc::DUMMY)
632-
.Case("ocl_sampler" , AMDGPULibFunc::DUMMY)
633-
.Default(AMDGPULibFunc::DUMMY);
623+
res.ArgType =
624+
StringSwitch<AMDGPULibFunc::EType>(eatLengthPrefixedName(param))
625+
.StartsWith("ocl_image1d_array", AMDGPULibFunc::IMG1DA)
626+
.StartsWith("ocl_image1d_buffer", AMDGPULibFunc::IMG1DB)
627+
.StartsWith("ocl_image2d_array", AMDGPULibFunc::IMG2DA)
628+
.StartsWith("ocl_image1d", AMDGPULibFunc::IMG1D)
629+
.StartsWith("ocl_image2d", AMDGPULibFunc::IMG2D)
630+
.StartsWith("ocl_image3d", AMDGPULibFunc::IMG3D)
631+
.Case("ocl_event", AMDGPULibFunc::DUMMY)
632+
.Case("ocl_sampler", AMDGPULibFunc::DUMMY)
633+
.Default(AMDGPULibFunc::DUMMY);
634634
} else {
635635
drop_front(param);
636636
switch (TC) {
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-simplifylib %s | FileCheck %s
3+
4+
; Make sure we can produce a valid FunctionType for the expected
5+
; signature of image functions.
6+
7+
declare i32 @_Z16get_image_height20ocl_image2d_depth_rw(ptr addrspace(4))
8+
9+
define i32 @call_ocl_image2d_depth(ptr addrspace(4) %img) {
10+
; CHECK-LABEL: define i32 @call_ocl_image2d_depth(
11+
; CHECK-SAME: ptr addrspace(4) [[IMG:%.*]]) {
12+
; CHECK-NEXT: [[RESULT:%.*]] = call i32 @_Z16get_image_height20ocl_image2d_depth_rw(ptr addrspace(4) [[IMG]])
13+
; CHECK-NEXT: ret i32 [[RESULT]]
14+
;
15+
%result = call i32 @_Z16get_image_height20ocl_image2d_depth_rw(ptr addrspace(4) %img)
16+
ret i32 %result
17+
}
18+
19+
declare i32 @_Z15get_image_width14ocl_image3d_ro(ptr addrspace(4))
20+
21+
define i32 @call_ocl_image3d_depth(ptr addrspace(4) %img) {
22+
; CHECK-LABEL: define i32 @call_ocl_image3d_depth(
23+
; CHECK-SAME: ptr addrspace(4) [[IMG:%.*]]) {
24+
; CHECK-NEXT: [[RESULT:%.*]] = call i32 @_Z15get_image_width14ocl_image3d_ro(ptr addrspace(4) [[IMG]])
25+
; CHECK-NEXT: ret i32 [[RESULT]]
26+
;
27+
%result = call i32 @_Z15get_image_width14ocl_image3d_ro(ptr addrspace(4) %img)
28+
ret i32 %result
29+
}
30+
31+
declare i32 @_Z15get_image_width14ocl_image1d_ro(ptr addrspace(4))
32+
33+
define i32 @call_get_image_width14ocl_image1d_ro(ptr addrspace(4) %img) {
34+
; CHECK-LABEL: define i32 @call_get_image_width14ocl_image1d_ro(
35+
; CHECK-SAME: ptr addrspace(4) [[IMG:%.*]]) {
36+
; CHECK-NEXT: [[RESULT:%.*]] = call i32 @_Z15get_image_width14ocl_image1d_ro(ptr addrspace(4) [[IMG]])
37+
; CHECK-NEXT: ret i32 [[RESULT]]
38+
;
39+
%result = call i32 @_Z15get_image_width14ocl_image1d_ro(ptr addrspace(4) %img)
40+
ret i32 %result
41+
}
42+
43+
declare <2 x i32> @_Z13get_image_dim20ocl_image2d_array_ro(ptr addrspace(4))
44+
45+
define <2 x i32> @call_Z13get_image_dim20ocl_image2d_array_ro(ptr addrspace(4) %img) {
46+
; CHECK-LABEL: define <2 x i32> @call_Z13get_image_dim20ocl_image2d_array_ro(
47+
; CHECK-SAME: ptr addrspace(4) [[IMG:%.*]]) {
48+
; CHECK-NEXT: [[RESULT:%.*]] = call <2 x i32> @_Z13get_image_dim20ocl_image2d_array_ro(ptr addrspace(4) [[IMG]])
49+
; CHECK-NEXT: ret <2 x i32> [[RESULT]]
50+
;
51+
%result = call <2 x i32> @_Z13get_image_dim20ocl_image2d_array_ro(ptr addrspace(4) %img)
52+
ret <2 x i32> %result
53+
}
54+
55+
declare i32 @_Z15get_image_width20ocl_image1d_array_ro(ptr addrspace(4))
56+
57+
define i32 @call_Z15get_image_width20ocl_image1d_array_ro(ptr addrspace(4) %img) {
58+
; CHECK-LABEL: define i32 @call_Z15get_image_width20ocl_image1d_array_ro(
59+
; CHECK-SAME: ptr addrspace(4) [[IMG:%.*]]) {
60+
; CHECK-NEXT: [[RESULT:%.*]] = call i32 @_Z15get_image_width20ocl_image1d_array_ro(ptr addrspace(4) [[IMG]])
61+
; CHECK-NEXT: ret i32 [[RESULT]]
62+
;
63+
%result = call i32 @_Z15get_image_width20ocl_image1d_array_ro(ptr addrspace(4) %img)
64+
ret i32 %result
65+
}

0 commit comments

Comments
 (0)