@@ -17,8 +17,9 @@ define void @loadv4f32() {
17
17
; CHECK-NOT: %dx.resource.casthandle
18
18
19
19
; CHECK: [[DATA0:%.*]] = call %dx.types.ResRet.f32 @dx.op.bufferLoad.f32(i32 68, %dx.types.Handle [[HANDLE]], i32 0, i32 undef)
20
- %data0 = call <4 x float > @llvm.dx.resource.load.typedbuffer (
20
+ %load0 = call { <4 x float >, i1 } @llvm.dx.resource.load.typedbuffer (
21
21
target ("dx.TypedBuffer" , <4 x float >, 0 , 0 , 0 ) %buffer , i32 0 )
22
+ %data0 = extractvalue {<4 x float >, i1 } %load0 , 0
22
23
23
24
; The extract order depends on the users, so don't enforce that here.
24
25
; CHECK-DAG: [[VAL0_0:%.*]] = extractvalue %dx.types.ResRet.f32 [[DATA0]], 0
@@ -34,8 +35,9 @@ define void @loadv4f32() {
34
35
call void @scalar_user (float %data0_2 )
35
36
36
37
; CHECK: [[DATA4:%.*]] = call %dx.types.ResRet.f32 @dx.op.bufferLoad.f32(i32 68, %dx.types.Handle [[HANDLE]], i32 4, i32 undef)
37
- %data4 = call <4 x float > @llvm.dx.resource.load.typedbuffer (
38
+ %load4 = call { <4 x float >, i1 } @llvm.dx.resource.load.typedbuffer (
38
39
target ("dx.TypedBuffer" , <4 x float >, 0 , 0 , 0 ) %buffer , i32 4 )
40
+ %data4 = extractvalue {<4 x float >, i1 } %load4 , 0
39
41
40
42
; CHECK: extractvalue %dx.types.ResRet.f32 [[DATA4]], 0
41
43
; CHECK: extractvalue %dx.types.ResRet.f32 [[DATA4]], 1
@@ -48,8 +50,9 @@ define void @loadv4f32() {
48
50
call void @vector_user (<4 x float > %data4 )
49
51
50
52
; CHECK: [[DATA12:%.*]] = call %dx.types.ResRet.f32 @dx.op.bufferLoad.f32(i32 68, %dx.types.Handle [[HANDLE]], i32 12, i32 undef)
51
- %data12 = call <4 x float > @llvm.dx.resource.load.typedbuffer (
53
+ %load12 = call { <4 x float >, i1 } @llvm.dx.resource.load.typedbuffer (
52
54
target ("dx.TypedBuffer" , <4 x float >, 0 , 0 , 0 ) %buffer , i32 12 )
55
+ %data12 = extractvalue {<4 x float >, i1 } %load12 , 0
53
56
54
57
; CHECK: [[DATA12_3:%.*]] = extractvalue %dx.types.ResRet.f32 [[DATA12]], 3
55
58
%data12_3 = extractelement <4 x float > %data12 , i32 3
@@ -70,8 +73,9 @@ define void @index_dynamic(i32 %bufindex, i32 %elemindex) {
70
73
i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
71
74
72
75
; CHECK: [[LOAD:%.*]] = call %dx.types.ResRet.f32 @dx.op.bufferLoad.f32(i32 68, %dx.types.Handle [[HANDLE]], i32 %bufindex, i32 undef)
73
- %load = call <4 x float > @llvm.dx.resource.load.typedbuffer (
76
+ %load = call { <4 x float >, i1 } @llvm.dx.resource.load.typedbuffer (
74
77
target ("dx.TypedBuffer" , <4 x float >, 0 , 0 , 0 ) %buffer , i32 %bufindex )
78
+ %data = extractvalue {<4 x float >, i1 } %load , 0
75
79
76
80
; CHECK: [[ALLOCA:%.*]] = alloca [4 x float]
77
81
; CHECK: [[V0:%.*]] = extractvalue %dx.types.ResRet.f32 [[LOAD]], 0
@@ -89,10 +93,10 @@ define void @index_dynamic(i32 %bufindex, i32 %elemindex) {
89
93
;
90
94
; CHECK: [[PTR:%.*]] = getelementptr inbounds [4 x float], ptr [[ALLOCA]], i32 0, i32 %elemindex
91
95
; CHECK: [[X:%.*]] = load float, ptr [[PTR]]
92
- %data = extractelement <4 x float > %load , i32 %elemindex
96
+ %x = extractelement <4 x float > %data , i32 %elemindex
93
97
94
98
; CHECK: call void @scalar_user(float [[X]])
95
- call void @scalar_user (float %data )
99
+ call void @scalar_user (float %x )
96
100
97
101
ret void
98
102
}
@@ -105,8 +109,9 @@ define void @loadf32() {
105
109
i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
106
110
107
111
; CHECK: [[DATA0:%.*]] = call %dx.types.ResRet.f32 @dx.op.bufferLoad.f32(i32 68, %dx.types.Handle [[HANDLE]], i32 0, i32 undef)
108
- %data0 = call float @llvm.dx.resource.load.typedbuffer (
112
+ %load0 = call { float , i1 } @llvm.dx.resource.load.typedbuffer (
109
113
target ("dx.TypedBuffer" , float , 0 , 0 , 0 ) %buffer , i32 0 )
114
+ %data0 = extractvalue {float , i1 } %load0 , 0
110
115
111
116
; CHECK: [[VAL0:%.*]] = extractvalue %dx.types.ResRet.f32 [[DATA0]], 0
112
117
; CHECK: call void @scalar_user(float [[VAL0]])
@@ -123,7 +128,7 @@ define void @loadv2f32() {
123
128
i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
124
129
125
130
; CHECK: [[DATA0:%.*]] = call %dx.types.ResRet.f32 @dx.op.bufferLoad.f32(i32 68, %dx.types.Handle [[HANDLE]], i32 0, i32 undef)
126
- %data0 = call <2 x float > @llvm.dx.resource.load.typedbuffer (
131
+ %data0 = call { <2 x float >, i1 } @llvm.dx.resource.load.typedbuffer (
127
132
target ("dx.TypedBuffer" , <2 x float >, 0 , 0 , 0 ) %buffer , i32 0 )
128
133
129
134
ret void
@@ -137,7 +142,7 @@ define void @loadv4f32_checkbit() {
137
142
i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
138
143
139
144
; CHECK: [[DATA0:%.*]] = call %dx.types.ResRet.f32 @dx.op.bufferLoad.f32(i32 68, %dx.types.Handle [[HANDLE]], i32 0, i32 undef)
140
- %data0 = call {<4 x float >, i1 } @llvm.dx.resource.loadchecked .typedbuffer.f32 (
145
+ %data0 = call {<4 x float >, i1 } @llvm.dx.resource.load .typedbuffer.f32 (
141
146
target ("dx.TypedBuffer" , <4 x float >, 0 , 0 , 0 ) %buffer , i32 0 )
142
147
143
148
; CHECK: [[STATUS:%.*]] = extractvalue %dx.types.ResRet.f32 [[DATA0]], 4
@@ -158,7 +163,7 @@ define void @loadv4i32() {
158
163
i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
159
164
160
165
; CHECK: [[DATA0:%.*]] = call %dx.types.ResRet.i32 @dx.op.bufferLoad.i32(i32 68, %dx.types.Handle [[HANDLE]], i32 0, i32 undef)
161
- %data0 = call <4 x i32 > @llvm.dx.resource.load.typedbuffer (
166
+ %data0 = call { <4 x i32 >, i1 } @llvm.dx.resource.load.typedbuffer (
162
167
target ("dx.TypedBuffer" , <4 x i32 >, 0 , 0 , 0 ) %buffer , i32 0 )
163
168
164
169
ret void
@@ -172,7 +177,7 @@ define void @loadv4f16() {
172
177
i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
173
178
174
179
; CHECK: [[DATA0:%.*]] = call %dx.types.ResRet.f16 @dx.op.bufferLoad.f16(i32 68, %dx.types.Handle [[HANDLE]], i32 0, i32 undef)
175
- %data0 = call <4 x half > @llvm.dx.resource.load.typedbuffer (
180
+ %data0 = call { <4 x half >, i1 } @llvm.dx.resource.load.typedbuffer (
176
181
target ("dx.TypedBuffer" , <4 x half >, 0 , 0 , 0 ) %buffer , i32 0 )
177
182
178
183
ret void
@@ -186,7 +191,7 @@ define void @loadv4i16() {
186
191
i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
187
192
188
193
; CHECK: [[DATA0:%.*]] = call %dx.types.ResRet.i16 @dx.op.bufferLoad.i16(i32 68, %dx.types.Handle [[HANDLE]], i32 0, i32 undef)
189
- %data0 = call <4 x i16 > @llvm.dx.resource.load.typedbuffer (
194
+ %data0 = call { <4 x i16 >, i1 } @llvm.dx.resource.load.typedbuffer (
190
195
target ("dx.TypedBuffer" , <4 x i16 >, 0 , 0 , 0 ) %buffer , i32 0 )
191
196
192
197
ret void
0 commit comments