@@ -15,7 +15,7 @@ define amdgpu_kernel void @test_kernel(i32 %n) {
15
15
; GCN-LABEL: @test_kernel(
16
16
; GCN-NEXT: entry:
17
17
; GCN-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
18
- ; GCN-NEXT: [[PRINTF_ALLOC_FN:%.*]] = call ptr addrspace(1) @__printf_alloc(i32 16 )
18
+ ; GCN-NEXT: [[PRINTF_ALLOC_FN:%.*]] = call ptr addrspace(1) @__printf_alloc(i32 12 )
19
19
; GCN-NEXT: br label [[ENTRY_SPLIT:%.*]]
20
20
; GCN: entry.split:
21
21
; GCN-NEXT: [[TMP0:%.*]] = icmp ne ptr addrspace(1) [[PRINTF_ALLOC_FN]], null
@@ -25,10 +25,9 @@ define amdgpu_kernel void @test_kernel(i32 %n) {
25
25
; GCN-NEXT: [[PRINTBUFFIDCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFID]] to ptr addrspace(1)
26
26
; GCN-NEXT: store i32 1, ptr addrspace(1) [[PRINTBUFFIDCAST]], align 4
27
27
; GCN-NEXT: [[PRINTBUFFGEP:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 4
28
- ; GCN-NEXT: [[PRINTARGPTR:%.*]] = ptrtoint ptr addrspace(5) [[STR]] to i64
29
28
; GCN-NEXT: [[PRINTBUFFPTRCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFGEP]] to ptr addrspace(1)
30
- ; GCN-NEXT: store i64 [[PRINTARGPTR]] , ptr addrspace(1) [[PRINTBUFFPTRCAST]], align 4
31
- ; GCN-NEXT: [[PRINTBUFFNEXTPTR:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTBUFFGEP]], i32 8
29
+ ; GCN-NEXT: store i32 4144959 , ptr addrspace(1) [[PRINTBUFFPTRCAST]], align 4
30
+ ; GCN-NEXT: [[PRINTBUFFNEXTPTR:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTBUFFGEP]], i32 4
32
31
; GCN-NEXT: [[PRINTBUFFPTRCAST1:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFNEXTPTR]] to ptr addrspace(1)
33
32
; GCN-NEXT: store i32 [[N:%.*]], ptr addrspace(1) [[PRINTBUFFPTRCAST1]], align 4
34
33
; GCN-NEXT: br label [[TMP2]]
@@ -41,6 +40,126 @@ entry:
41
40
ret void
42
41
}
43
42
43
+ define amdgpu_kernel void @string_pointee_type (i32 %n ) {
44
+ ; R600-LABEL: @string_pointee_type(
45
+ ; R600-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
46
+ ; R600-NEXT: [[CALL1:%.*]] = call i32 (ptr addrspace(4), ...) @printf(ptr addrspace(4) @.str, ptr addrspace(5) [[STR]], i32 [[N:%.*]])
47
+ ; R600-NEXT: ret void
48
+ ;
49
+ ; GCN-LABEL: @string_pointee_type(
50
+ ; GCN-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
51
+ ; GCN-NEXT: [[PRINTF_ALLOC_FN:%.*]] = call ptr addrspace(1) @__printf_alloc(i32 12)
52
+ ; GCN-NEXT: br label [[DOTSPLIT:%.*]]
53
+ ; GCN: .split:
54
+ ; GCN-NEXT: [[TMP1:%.*]] = icmp ne ptr addrspace(1) [[PRINTF_ALLOC_FN]], null
55
+ ; GCN-NEXT: br i1 [[TMP1]], label [[TMP2:%.*]], label [[TMP3:%.*]]
56
+ ; GCN: 2:
57
+ ; GCN-NEXT: [[PRINTBUFFID:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 0
58
+ ; GCN-NEXT: [[PRINTBUFFIDCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFID]] to ptr addrspace(1)
59
+ ; GCN-NEXT: store i32 2, ptr addrspace(1) [[PRINTBUFFIDCAST]], align 4
60
+ ; GCN-NEXT: [[PRINTBUFFGEP:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 4
61
+ ; GCN-NEXT: [[PRINTBUFFPTRCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFGEP]] to ptr addrspace(1)
62
+ ; GCN-NEXT: store i32 4144959, ptr addrspace(1) [[PRINTBUFFPTRCAST]], align 4
63
+ ; GCN-NEXT: [[PRINTBUFFNEXTPTR:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTBUFFGEP]], i32 4
64
+ ; GCN-NEXT: [[PRINTBUFFPTRCAST1:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFNEXTPTR]] to ptr addrspace(1)
65
+ ; GCN-NEXT: store i32 [[N:%.*]], ptr addrspace(1) [[PRINTBUFFPTRCAST1]], align 4
66
+ ; GCN-NEXT: br label [[TMP3]]
67
+ ; GCN: 3:
68
+ ; GCN-NEXT: ret void
69
+ ;
70
+ %str = alloca [9 x i8 ], align 1 , addrspace (5 )
71
+ %call1 = call i32 (ptr addrspace (4 ), ...) @printf (ptr addrspace (4 ) @.str , ptr addrspace (5 ) %str , i32 %n )
72
+ ret void
73
+ }
74
+
75
+ define amdgpu_kernel void @string_address_space4 (i32 %n , ptr addrspace (4 ) %str ) {
76
+ ; R600-LABEL: @string_address_space4(
77
+ ; R600-NEXT: [[CALL1:%.*]] = call i32 (ptr addrspace(4), ...) @printf(ptr addrspace(4) @.str, ptr addrspace(4) [[STR:%.*]], i32 [[N:%.*]])
78
+ ; R600-NEXT: ret void
79
+ ;
80
+ ; GCN-LABEL: @string_address_space4(
81
+ ; GCN-NEXT: [[PRINTF_ALLOC_FN:%.*]] = call ptr addrspace(1) @__printf_alloc(i32 12)
82
+ ; GCN-NEXT: br label [[DOTSPLIT:%.*]]
83
+ ; GCN: .split:
84
+ ; GCN-NEXT: [[TMP1:%.*]] = icmp ne ptr addrspace(1) [[PRINTF_ALLOC_FN]], null
85
+ ; GCN-NEXT: br i1 [[TMP1]], label [[TMP2:%.*]], label [[TMP3:%.*]]
86
+ ; GCN: 2:
87
+ ; GCN-NEXT: [[PRINTBUFFID:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 0
88
+ ; GCN-NEXT: [[PRINTBUFFIDCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFID]] to ptr addrspace(1)
89
+ ; GCN-NEXT: store i32 3, ptr addrspace(1) [[PRINTBUFFIDCAST]], align 4
90
+ ; GCN-NEXT: [[PRINTBUFFGEP:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 4
91
+ ; GCN-NEXT: [[PRINTBUFFPTRCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFGEP]] to ptr addrspace(1)
92
+ ; GCN-NEXT: store i32 4144959, ptr addrspace(1) [[PRINTBUFFPTRCAST]], align 4
93
+ ; GCN-NEXT: [[PRINTBUFFNEXTPTR:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTBUFFGEP]], i32 4
94
+ ; GCN-NEXT: [[PRINTBUFFPTRCAST1:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFNEXTPTR]] to ptr addrspace(1)
95
+ ; GCN-NEXT: store i32 [[N:%.*]], ptr addrspace(1) [[PRINTBUFFPTRCAST1]], align 4
96
+ ; GCN-NEXT: br label [[TMP3]]
97
+ ; GCN: 3:
98
+ ; GCN-NEXT: ret void
99
+ ;
100
+ %call1 = call i32 (ptr addrspace (4 ), ...) @printf (ptr addrspace (4 ) @.str , ptr addrspace (4 ) %str , i32 %n )
101
+ ret void
102
+ }
103
+
104
+ define amdgpu_kernel void @string_address_space1 (i32 %n , ptr addrspace (1 ) %str ) {
105
+ ; R600-LABEL: @string_address_space1(
106
+ ; R600-NEXT: [[CALL1:%.*]] = call i32 (ptr addrspace(4), ...) @printf(ptr addrspace(4) @.str, ptr addrspace(1) [[STR:%.*]], i32 [[N:%.*]])
107
+ ; R600-NEXT: ret void
108
+ ;
109
+ ; GCN-LABEL: @string_address_space1(
110
+ ; GCN-NEXT: [[PRINTF_ALLOC_FN:%.*]] = call ptr addrspace(1) @__printf_alloc(i32 12)
111
+ ; GCN-NEXT: br label [[DOTSPLIT:%.*]]
112
+ ; GCN: .split:
113
+ ; GCN-NEXT: [[TMP1:%.*]] = icmp ne ptr addrspace(1) [[PRINTF_ALLOC_FN]], null
114
+ ; GCN-NEXT: br i1 [[TMP1]], label [[TMP2:%.*]], label [[TMP3:%.*]]
115
+ ; GCN: 2:
116
+ ; GCN-NEXT: [[PRINTBUFFID:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 0
117
+ ; GCN-NEXT: [[PRINTBUFFIDCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFID]] to ptr addrspace(1)
118
+ ; GCN-NEXT: store i32 4, ptr addrspace(1) [[PRINTBUFFIDCAST]], align 4
119
+ ; GCN-NEXT: [[PRINTBUFFGEP:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 4
120
+ ; GCN-NEXT: [[PRINTBUFFPTRCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFGEP]] to ptr addrspace(1)
121
+ ; GCN-NEXT: store i32 4144959, ptr addrspace(1) [[PRINTBUFFPTRCAST]], align 4
122
+ ; GCN-NEXT: [[PRINTBUFFNEXTPTR:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTBUFFGEP]], i32 4
123
+ ; GCN-NEXT: [[PRINTBUFFPTRCAST1:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFNEXTPTR]] to ptr addrspace(1)
124
+ ; GCN-NEXT: store i32 [[N:%.*]], ptr addrspace(1) [[PRINTBUFFPTRCAST1]], align 4
125
+ ; GCN-NEXT: br label [[TMP3]]
126
+ ; GCN: 3:
127
+ ; GCN-NEXT: ret void
128
+ ;
129
+ %call1 = call i32 (ptr addrspace (4 ), ...) @printf (ptr addrspace (4 ) @.str , ptr addrspace (1 ) %str , i32 %n )
130
+ ret void
131
+ }
132
+
133
+ define amdgpu_kernel void @string_format_passed_i32 (i32 %n , i32 %str ) {
134
+ ; R600-LABEL: @string_format_passed_i32(
135
+ ; R600-NEXT: [[CALL1:%.*]] = call i32 (ptr addrspace(4), ...) @printf(ptr addrspace(4) @.str, i32 [[STR:%.*]], i32 [[N:%.*]])
136
+ ; R600-NEXT: ret void
137
+ ;
138
+ ; GCN-LABEL: @string_format_passed_i32(
139
+ ; GCN-NEXT: [[PRINTF_ALLOC_FN:%.*]] = call ptr addrspace(1) @__printf_alloc(i32 12)
140
+ ; GCN-NEXT: br label [[DOTSPLIT:%.*]]
141
+ ; GCN: .split:
142
+ ; GCN-NEXT: [[TMP1:%.*]] = icmp ne ptr addrspace(1) [[PRINTF_ALLOC_FN]], null
143
+ ; GCN-NEXT: br i1 [[TMP1]], label [[TMP2:%.*]], label [[TMP3:%.*]]
144
+ ; GCN: 2:
145
+ ; GCN-NEXT: [[PRINTBUFFID:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 0
146
+ ; GCN-NEXT: [[PRINTBUFFIDCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFID]] to ptr addrspace(1)
147
+ ; GCN-NEXT: store i32 5, ptr addrspace(1) [[PRINTBUFFIDCAST]], align 4
148
+ ; GCN-NEXT: [[PRINTBUFFGEP:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 4
149
+ ; GCN-NEXT: [[PRINTBUFFPTRCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFGEP]] to ptr addrspace(1)
150
+ ; GCN-NEXT: store i32 [[STR:%.*]], ptr addrspace(1) [[PRINTBUFFPTRCAST]], align 4
151
+ ; GCN-NEXT: [[PRINTBUFFNEXTPTR:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTBUFFGEP]], i32 4
152
+ ; GCN-NEXT: [[PRINTBUFFPTRCAST1:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFNEXTPTR]] to ptr addrspace(1)
153
+ ; GCN-NEXT: store i32 [[N:%.*]], ptr addrspace(1) [[PRINTBUFFPTRCAST1]], align 4
154
+ ; GCN-NEXT: br label [[TMP3]]
155
+ ; GCN: 3:
156
+ ; GCN-NEXT: ret void
157
+ ;
158
+ %call1 = call i32 (ptr addrspace (4 ), ...) @printf (ptr addrspace (4 ) @.str , i32 %str , i32 %n )
159
+ ret void
160
+ }
161
+
162
+
44
163
@str.as1 = private unnamed_addr addrspace (1 ) constant [6 x i8 ] c "%s:%d\00 " , align 1
45
164
46
165
define amdgpu_kernel void @test_kernel_addrspacecasted_format_str (i32 %n ) {
@@ -55,20 +174,19 @@ define amdgpu_kernel void @test_kernel_addrspacecasted_format_str(i32 %n) {
55
174
; GCN-NEXT: entry:
56
175
; GCN-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
57
176
; GCN-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [9 x i8], ptr addrspace(5) [[STR]], i32 0, i32 0
58
- ; GCN-NEXT: [[PRINTF_ALLOC_FN:%.*]] = call ptr addrspace(1) @__printf_alloc(i32 16 )
177
+ ; GCN-NEXT: [[PRINTF_ALLOC_FN:%.*]] = call ptr addrspace(1) @__printf_alloc(i32 12 )
59
178
; GCN-NEXT: br label [[ENTRY_SPLIT:%.*]]
60
179
; GCN: entry.split:
61
180
; GCN-NEXT: [[TMP0:%.*]] = icmp ne ptr addrspace(1) [[PRINTF_ALLOC_FN]], null
62
181
; GCN-NEXT: br i1 [[TMP0]], label [[TMP1:%.*]], label [[TMP2:%.*]]
63
182
; GCN: 1:
64
183
; GCN-NEXT: [[PRINTBUFFID:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 0
65
184
; GCN-NEXT: [[PRINTBUFFIDCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFID]] to ptr addrspace(1)
66
- ; GCN-NEXT: store i32 2 , ptr addrspace(1) [[PRINTBUFFIDCAST]], align 4
185
+ ; GCN-NEXT: store i32 6 , ptr addrspace(1) [[PRINTBUFFIDCAST]], align 4
67
186
; GCN-NEXT: [[PRINTBUFFGEP:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTF_ALLOC_FN]], i32 4
68
- ; GCN-NEXT: [[PRINTARGPTR:%.*]] = ptrtoint ptr addrspace(5) [[ARRAYDECAY]] to i64
69
187
; GCN-NEXT: [[PRINTBUFFPTRCAST:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFGEP]] to ptr addrspace(1)
70
- ; GCN-NEXT: store i64 [[PRINTARGPTR]] , ptr addrspace(1) [[PRINTBUFFPTRCAST]], align 4
71
- ; GCN-NEXT: [[PRINTBUFFNEXTPTR:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTBUFFGEP]], i32 8
188
+ ; GCN-NEXT: store i32 4144959 , ptr addrspace(1) [[PRINTBUFFPTRCAST]], align 4
189
+ ; GCN-NEXT: [[PRINTBUFFNEXTPTR:%.*]] = getelementptr i8, ptr addrspace(1) [[PRINTBUFFGEP]], i32 4
72
190
; GCN-NEXT: [[PRINTBUFFPTRCAST1:%.*]] = bitcast ptr addrspace(1) [[PRINTBUFFNEXTPTR]] to ptr addrspace(1)
73
191
; GCN-NEXT: store i32 [[N:%.*]], ptr addrspace(1) [[PRINTBUFFPTRCAST1]], align 4
74
192
; GCN-NEXT: br label [[TMP2]]
0 commit comments