Skip to content

Commit a71e7d7

Browse files
committed
update tests based on feedback
1 parent 5e2f7a5 commit a71e7d7

File tree

4 files changed

+376
-287
lines changed

4 files changed

+376
-287
lines changed
Lines changed: 123 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
; RUN: opt -S -dxil-intrinsic-expansion %s | FileCheck %s
2-
3-
target triple = "dxil-pc-shadermodel6.2-compute"
1+
; RUN: opt -mtriple=dxil-pc-shadermodel6.2-compute -S -dxil-intrinsic-expansion %s | FileCheck %s --check-prefixes=CHECK,CHECK62
2+
; RUN: opt -mtriple=dxil-pc-shadermodel6.3-compute -S -dxil-intrinsic-expansion %s | FileCheck %s --check-prefixes=CHECK,CHECK63
43

54
define void @loadf64(i32 %index) {
65
; check the handle from binding is unchanged
@@ -11,20 +10,26 @@ define void @loadf64(i32 %index) {
1110
@llvm.dx.resource.handlefrombinding.tdx.Rawbuffer_f64_1_0_0t(
1211
i32 0, i32 1, i32 1, i32 0, i1 false, ptr null)
1312

13+
; check we don't modify the code in sm6.3 or later
14+
; CHECK63: [[L0:%.*]] = call { double, i1 } @llvm.dx.resource.load.rawbuffer
15+
; CHECK63-SAME: target("dx.Rawbuffer", double, 0, 0) [[B]], i32 %index, i32 0)
16+
1417
; check we load an <2 x i32> instead of a double
15-
; CHECK-NOT: call {double, i1} @llvm.dx.resource.load.rawbuffer
16-
; CHECK: [[L0:%.*]] = call { <2 x i32>, i1 }
17-
; CHECK-SAME: @llvm.dx.resource.load.rawbuffer.v2i32.tdx.Rawbuffer_f64_0_0t(
18-
; CHECK-SAME: target("dx.Rawbuffer", double, 0, 0) [[B]], i32 %index, i32 0)
18+
; CHECK62-NOT: call {double, i1} @llvm.dx.resource.load.rawbuffer
19+
; CHECK62: [[L0:%.*]] = call { <2 x i32>, i1 }
20+
; CHECK62-SAME: @llvm.dx.resource.load.rawbuffer.v2i32.tdx.Rawbuffer_f64_0_0t(
21+
; CHECK62-SAME: target("dx.Rawbuffer", double, 0, 0) [[B]], i32 %index, i32 0)
1922
%load0 = call {double, i1} @llvm.dx.resource.load.rawbuffer(
2023
target("dx.Rawbuffer", double, 0, 0) %buffer, i32 %index, i32 0)
2124

25+
; CHECK63: extractvalue { double, i1 } [[L0]], 0
26+
2227
; check we extract the two i32 and construct a double
23-
; CHECK: [[D0:%.*]] = extractvalue { <2 x i32>, i1 } [[L0]], 0
24-
; CHECK: [[Lo:%.*]] = extractelement <2 x i32> [[D0]], i32 0
25-
; CHECK: [[Hi:%.*]] = extractelement <2 x i32> [[D0]], i32 1
26-
; CHECK: [[DBL:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo]], i32 [[Hi]])
27-
; CHECK-NOT: extractvalue { double, i1 }
28+
; CHECK62: [[D0:%.*]] = extractvalue { <2 x i32>, i1 } [[L0]], 0
29+
; CHECK62: [[Lo:%.*]] = extractelement <2 x i32> [[D0]], i32 0
30+
; CHECK62: [[Hi:%.*]] = extractelement <2 x i32> [[D0]], i32 1
31+
; CHECK62: [[DBL:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo]], i32 [[Hi]])
32+
; CHECK62-NOT: extractvalue { double, i1 }
2833
%data0 = extractvalue {double, i1} %load0, 0
2934
ret void
3035
}
@@ -38,24 +43,30 @@ define void @loadv2f64(i32 %index) {
3843
@llvm.dx.resource.handlefrombinding.tdx.Rawbuffer_v2f64_1_0_0t(
3944
i32 0, i32 1, i32 1, i32 0, i1 false, ptr null)
4045

46+
; check we don't modify the code in sm6.3 or later
47+
; CHECK63: [[L0:%.*]] = call { <2 x double>, i1 } @llvm.dx.resource.load.rawbuffer
48+
; CHECK63-SAME: target("dx.Rawbuffer", <2 x double>, 0, 0) [[B]], i32 %index, i32 0)
49+
4150
; check we load an <4 x i32> instead of a double2
42-
; CHECK: [[L0:%.*]] = call { <4 x i32>, i1 }
43-
; CHECK-SAME: @llvm.dx.resource.load.rawbuffer.v4i32.tdx.Rawbuffer_v2f64_0_0t(
44-
; CHECK-SAME: target("dx.Rawbuffer", <2 x double>, 0, 0) [[B]], i32 %index, i32 0)
51+
; CHECK62: [[L0:%.*]] = call { <4 x i32>, i1 }
52+
; CHECK62-SAME: @llvm.dx.resource.load.rawbuffer.v4i32.tdx.Rawbuffer_v2f64_0_0t(
53+
; CHECK62-SAME: target("dx.Rawbuffer", <2 x double>, 0, 0) [[B]], i32 %index, i32 0)
4554
%load0 = call { <2 x double>, i1 } @llvm.dx.resource.load.rawbuffer(
4655
target("dx.Rawbuffer", <2 x double>, 0, 0) %buffer, i32 %index, i32 0)
4756

57+
; CHECK63: extractvalue { <2 x double>, i1 } [[L0]], 0
58+
4859
; check we extract the 4 i32 and construct a <2 x double>
49-
; CHECK: [[D0:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 0
50-
; CHECK: [[Lo1:%.*]] = extractelement <4 x i32> [[D0]], i32 0
51-
; CHECK: [[Hi1:%.*]] = extractelement <4 x i32> [[D0]], i32 1
52-
; CHECK: [[Lo2:%.*]] = extractelement <4 x i32> [[D0]], i32 2
53-
; CHECK: [[Hi2:%.*]] = extractelement <4 x i32> [[D0]], i32 3
54-
; CHECK: [[Dbl1:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo1]], i32 [[Hi1]])
55-
; CHECK: [[Vec:%.*]] = insertelement <2 x double> poison, double [[Dbl1]], i32 0
56-
; CHECK: [[Dbl2:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo2]], i32 [[Hi2]])
57-
; CHECK: [[Vec2:%.*]] = insertelement <2 x double> [[Vec]], double [[Dbl2]], i32 1
58-
; CHECK-NOT: extractvalue { <2 x double>, i1 }
60+
; CHECK62: [[D0:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 0
61+
; CHECK62: [[Lo1:%.*]] = extractelement <4 x i32> [[D0]], i32 0
62+
; CHECK62: [[Hi1:%.*]] = extractelement <4 x i32> [[D0]], i32 1
63+
; CHECK62: [[Lo2:%.*]] = extractelement <4 x i32> [[D0]], i32 2
64+
; CHECK62: [[Hi2:%.*]] = extractelement <4 x i32> [[D0]], i32 3
65+
; CHECK62: [[Dbl1:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo1]], i32 [[Hi1]])
66+
; CHECK62: [[Vec:%.*]] = insertelement <2 x double> poison, double [[Dbl1]], i32 0
67+
; CHECK62: [[Dbl2:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo2]], i32 [[Hi2]])
68+
; CHECK62: [[Vec2:%.*]] = insertelement <2 x double> [[Vec]], double [[Dbl2]], i32 1
69+
; CHECK62-NOT: extractvalue { <2 x double>, i1 }
5970
%data0 = extractvalue { <2 x double>, i1 } %load0, 0
6071
ret void
6172
}
@@ -70,22 +81,29 @@ define void @loadf64WithCheckBit(i32 %index) {
7081
@llvm.dx.resource.handlefrombinding.tdx.Rawbuffer_f64_1_0_0t(
7182
i32 0, i32 1, i32 1, i32 0, i1 false, ptr null)
7283

84+
; check we don't modify the code in sm6.3 or later
85+
; CHECK63: [[L0:%.*]] = call { double, i1 } @llvm.dx.resource.load.rawbuffer
86+
; CHECK63-SAME: target("dx.Rawbuffer", double, 0, 0) [[B]], i32 %index, i32 0)
87+
7388
; check we load an <2 x i32> instead of a double
74-
; CHECK-NOT: call {double, i1} @llvm.dx.resource.load.rawbuffer
75-
; CHECK: [[L0:%.*]] = call { <2 x i32>, i1 }
76-
; CHECK-SAME: @llvm.dx.resource.load.rawbuffer.v2i32.tdx.Rawbuffer_f64_0_0t(
77-
; CHECK-SAME: target("dx.Rawbuffer", double, 0, 0) [[B]], i32 %index, i32 0)
89+
; CHECK62-NOT: call {double, i1} @llvm.dx.resource.load.rawbuffer
90+
; CHECK62: [[L0:%.*]] = call { <2 x i32>, i1 }
91+
; CHECK62-SAME: @llvm.dx.resource.load.rawbuffer.v2i32.tdx.Rawbuffer_f64_0_0t(
92+
; CHECK62-SAME: target("dx.Rawbuffer", double, 0, 0) [[B]], i32 %index, i32 0)
7893
%load0 = call {double, i1} @llvm.dx.resource.load.rawbuffer(
7994
target("dx.Rawbuffer", double, 0, 0) %buffer, i32 %index, i32 0)
8095

96+
; CHECK63: extractvalue { double, i1 } [[L0]], 0
97+
; CHECK63: extractvalue { double, i1 } [[L0]], 1
98+
8199
; check we extract the two i32 and construct a double
82-
; CHECK: [[D0:%.*]] = extractvalue { <2 x i32>, i1 } [[L0]], 0
83-
; CHECK: [[Lo:%.*]] = extractelement <2 x i32> [[D0]], i32 0
84-
; CHECK: [[Hi:%.*]] = extractelement <2 x i32> [[D0]], i32 1
85-
; CHECK: [[DBL:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo]], i32 [[Hi]])
100+
; CHECK62: [[D0:%.*]] = extractvalue { <2 x i32>, i1 } [[L0]], 0
101+
; CHECK62: [[Lo:%.*]] = extractelement <2 x i32> [[D0]], i32 0
102+
; CHECK62: [[Hi:%.*]] = extractelement <2 x i32> [[D0]], i32 1
103+
; CHECK62: [[DBL:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo]], i32 [[Hi]])
86104
%data0 = extractvalue {double, i1} %load0, 0
87-
; CHECK: extractvalue { <2 x i32>, i1 } [[L0]], 1
88-
; CHECK-NOT: extractvalue { double, i1 }
105+
; CHECK62: extractvalue { <2 x i32>, i1 } [[L0]], 1
106+
; CHECK62-NOT: extractvalue { double, i1 }
89107
%cb = extractvalue {double, i1} %load0, 1
90108
ret void
91109
}
@@ -103,43 +121,49 @@ define void @loadv3f64(i32 %index) {
103121
@llvm.dx.resource.handlefrombinding.tdx.Rawbuffer_v3f64_0_0t(
104122
i32 0, i32 0, i32 1, i32 0, i1 false, ptr null)
105123

124+
; check we don't modify the code in sm6.3 or later
125+
; CHECK63: [[L0:%.*]] = call { <3 x double>, i1 } @llvm.dx.resource.load.rawbuffer
126+
; CHECK63-SAME: target("dx.Rawbuffer", <3 x double>, 0, 0) [[B]], i32 %index, i32 0)
127+
106128
; check we perform two loads
107129
; and do 6 extracts and construct 3 doubles
108-
; CHECK-NOT: call {<3 x double>, i1} @llvm.dx.resource.load.rawbuffer
109-
; CHECK: [[L0:%.*]] = call { <4 x i32>, i1 }
110-
; CHECK-SAME: @llvm.dx.resource.load.rawbuffer.v4i32.tdx.Rawbuffer_v3f64_0_0t(
111-
; CHECK-SAME: target("dx.Rawbuffer", <3 x double>, 0, 0) [[B]], i32 %index, i32 0)
112-
113-
; CHECK: [[D0:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 0
114-
; CHECK: [[Lo1:%.*]] = extractelement <4 x i32> [[D0]], i32 0
115-
; CHECK: [[Hi1:%.*]] = extractelement <4 x i32> [[D0]], i32 1
116-
; CHECK: [[Lo2:%.*]] = extractelement <4 x i32> [[D0]], i32 2
117-
; CHECK: [[Hi2:%.*]] = extractelement <4 x i32> [[D0]], i32 3
118-
; CHECK: [[DBL1:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo1]], i32 [[Hi1]])
119-
; CHECK: [[Vec1:%.*]] = insertelement <3 x double> poison, double [[DBL1]], i32 0
120-
; CHECK: [[DBL2:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo2]], i32 [[Hi2]])
121-
; CHECK: [[Vec2:%.*]] = insertelement <3 x double> [[Vec1]], double [[DBL2]], i32 1
130+
; CHECK62-NOT: call {<3 x double>, i1} @llvm.dx.resource.load.rawbuffer
131+
; CHECK62: [[L0:%.*]] = call { <4 x i32>, i1 }
132+
; CHECK62-SAME: @llvm.dx.resource.load.rawbuffer.v4i32.tdx.Rawbuffer_v3f64_0_0t(
133+
; CHECK62-SAME: target("dx.Rawbuffer", <3 x double>, 0, 0) [[B]], i32 %index, i32 0)
134+
135+
; CHECK62: [[D0:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 0
136+
; CHECK62: [[Lo1:%.*]] = extractelement <4 x i32> [[D0]], i32 0
137+
; CHECK62: [[Hi1:%.*]] = extractelement <4 x i32> [[D0]], i32 1
138+
; CHECK62: [[Lo2:%.*]] = extractelement <4 x i32> [[D0]], i32 2
139+
; CHECK62: [[Hi2:%.*]] = extractelement <4 x i32> [[D0]], i32 3
140+
; CHECK62: [[DBL1:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo1]], i32 [[Hi1]])
141+
; CHECK62: [[Vec1:%.*]] = insertelement <3 x double> poison, double [[DBL1]], i32 0
142+
; CHECK62: [[DBL2:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo2]], i32 [[Hi2]])
143+
; CHECK62: [[Vec2:%.*]] = insertelement <3 x double> [[Vec1]], double [[DBL2]], i32 1
122144

123145
; 2nd load
124-
; CHECK: [[L2:%.*]] = call { <2 x i32>, i1 }
125-
; CHECK-SAME: @llvm.dx.resource.load.rawbuffer.v2i32.tdx.Rawbuffer_v3f64_0_0t(
126-
; CHECK-SAME: target("dx.Rawbuffer", <3 x double>, 0, 0) [[B]], i32 %index, i32 16)
127-
128-
; CHECK: [[D2:%.*]] = extractvalue { <2 x i32>, i1 } [[L2]], 0
129-
; CHECK: [[Lo3:%.*]] = extractelement <2 x i32> [[D2]], i32 0
130-
; CHECK: [[Hi3:%.*]] = extractelement <2 x i32> [[D2]], i32 1
131-
; CHECK: [[DBL3:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo3]], i32 [[Hi3]])
132-
; CHECK: [[Vec3:%.*]] = insertelement <3 x double> [[Vec2]], double [[DBL3]], i32 2
146+
; CHECK62: [[L2:%.*]] = call { <2 x i32>, i1 }
147+
; CHECK62-SAME: @llvm.dx.resource.load.rawbuffer.v2i32.tdx.Rawbuffer_v3f64_0_0t(
148+
; CHECK62-SAME: target("dx.Rawbuffer", <3 x double>, 0, 0) [[B]], i32 %index, i32 16)
149+
150+
; CHECK62: [[D2:%.*]] = extractvalue { <2 x i32>, i1 } [[L2]], 0
151+
; CHECK62: [[Lo3:%.*]] = extractelement <2 x i32> [[D2]], i32 0
152+
; CHECK62: [[Hi3:%.*]] = extractelement <2 x i32> [[D2]], i32 1
153+
; CHECK62: [[DBL3:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo3]], i32 [[Hi3]])
154+
; CHECK62: [[Vec3:%.*]] = insertelement <3 x double> [[Vec2]], double [[DBL3]], i32 2
133155
%load0 = call {<3 x double>, i1} @llvm.dx.resource.load.rawbuffer(
134156
target("dx.Rawbuffer", <3 x double>, 0, 0) %buffer, i32 %index, i32 0)
135157

158+
; CHECK63: extractvalue { <3 x double>, i1 } [[L0]], 0
159+
; CHECK63: extractvalue { <3 x double>, i1 } [[L0]], 1
136160

137-
; CHECK-NOT: extractvalue {<3 x double>, i1 }
161+
; CHECK62-NOT: extractvalue {<3 x double>, i1 }
138162
%data0 = extractvalue {<3 x double>, i1} %load0, 0
139163
; check we extract checkbit from both loads and and them together
140-
; CHECK: [[B1:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 1
141-
; CHECK: [[B2:%.*]] = extractvalue { <2 x i32>, i1 } [[L2]], 1
142-
; CHECK: and i1 [[B1]], [[B2]]
164+
; CHECK62: [[B1:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 1
165+
; CHECK62: [[B2:%.*]] = extractvalue { <2 x i32>, i1 } [[L2]], 1
166+
; CHECK62: and i1 [[B1]], [[B2]]
143167
%cb = extractvalue {<3 x double>, i1} %load0, 1
144168
ret void
145169
}
@@ -153,47 +177,53 @@ define void @loadv4f64(i32 %index) {
153177
@llvm.dx.resource.handlefrombinding.tdx.Rawbuffer_v4f64_0_0t(
154178
i32 0, i32 0, i32 1, i32 0, i1 false, ptr null)
155179

180+
; check we don't modify the code in sm6.3 or later
181+
; CHECK63: [[L0:%.*]] = call { <4 x double>, i1 } @llvm.dx.resource.load.rawbuffer
182+
; CHECK63-SAME: target("dx.Rawbuffer", <4 x double>, 0, 0) [[B]], i32 %index, i32 0)
183+
156184
; check we perform two loads
157185
; and do 8 extracts and construct 4 doubles
158-
; CHECK-NOT: call {<4 x double>, i1} @llvm.dx.resource.load.rawbuffer
159-
; CHECK: [[L0:%.*]] = call { <4 x i32>, i1 }
160-
; CHECK-SAME: @llvm.dx.resource.load.rawbuffer.v4i32.tdx.Rawbuffer_v4f64_0_0t(
161-
; CHECK-SAME: target("dx.Rawbuffer", <4 x double>, 0, 0) [[B]], i32 %index, i32 0)
162-
163-
; CHECK: [[D0:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 0
164-
; CHECK: [[Lo1:%.*]] = extractelement <4 x i32> [[D0]], i32 0
165-
; CHECK: [[Hi1:%.*]] = extractelement <4 x i32> [[D0]], i32 1
166-
; CHECK: [[Lo2:%.*]] = extractelement <4 x i32> [[D0]], i32 2
167-
; CHECK: [[Hi2:%.*]] = extractelement <4 x i32> [[D0]], i32 3
168-
; CHECK: [[DBL1:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo1]], i32 [[Hi1]])
169-
; CHECK: [[Vec1:%.*]] = insertelement <4 x double> poison, double [[DBL1]], i32 0
170-
; CHECK: [[DBL2:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo2]], i32 [[Hi2]])
171-
; CHECK: [[Vec2:%.*]] = insertelement <4 x double> [[Vec1]], double [[DBL2]], i32 1
186+
; CHECK62-NOT: call {<4 x double>, i1} @llvm.dx.resource.load.rawbuffer
187+
; CHECK62: [[L0:%.*]] = call { <4 x i32>, i1 }
188+
; CHECK62-SAME: @llvm.dx.resource.load.rawbuffer.v4i32.tdx.Rawbuffer_v4f64_0_0t(
189+
; CHECK62-SAME: target("dx.Rawbuffer", <4 x double>, 0, 0) [[B]], i32 %index, i32 0)
190+
191+
; CHECK62: [[D0:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 0
192+
; CHECK62: [[Lo1:%.*]] = extractelement <4 x i32> [[D0]], i32 0
193+
; CHECK62: [[Hi1:%.*]] = extractelement <4 x i32> [[D0]], i32 1
194+
; CHECK62: [[Lo2:%.*]] = extractelement <4 x i32> [[D0]], i32 2
195+
; CHECK62: [[Hi2:%.*]] = extractelement <4 x i32> [[D0]], i32 3
196+
; CHECK62: [[DBL1:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo1]], i32 [[Hi1]])
197+
; CHECK62: [[Vec1:%.*]] = insertelement <4 x double> poison, double [[DBL1]], i32 0
198+
; CHECK62: [[DBL2:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo2]], i32 [[Hi2]])
199+
; CHECK62: [[Vec2:%.*]] = insertelement <4 x double> [[Vec1]], double [[DBL2]], i32 1
172200

173201
; 2nd load
174-
; CHECK: [[L2:%.*]] = call { <4 x i32>, i1 }
175-
; CHECK-SAME: @llvm.dx.resource.load.rawbuffer.v4i32.tdx.Rawbuffer_v4f64_0_0t(
176-
; CHECK-SAME: target("dx.Rawbuffer", <4 x double>, 0, 0) [[B]], i32 %index, i32 16)
177-
178-
; CHECK: [[D2:%.*]] = extractvalue { <4 x i32>, i1 } [[L2]], 0
179-
; CHECK: [[Lo3:%.*]] = extractelement <4 x i32> [[D2]], i32 0
180-
; CHECK: [[Hi3:%.*]] = extractelement <4 x i32> [[D2]], i32 1
181-
; CHECK: [[Lo4:%.*]] = extractelement <4 x i32> [[D2]], i32 2
182-
; CHECK: [[Hi4:%.*]] = extractelement <4 x i32> [[D2]], i32 3
183-
; CHECK: [[DBL3:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo3]], i32 [[Hi3]])
184-
; CHECK: [[Vec3:%.*]] = insertelement <4 x double> [[Vec2]], double [[DBL3]], i32 2
185-
; CHECK: [[DBL4:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo4]], i32 [[Hi4]])
186-
; CHECK: [[Vec4:%.*]] = insertelement <4 x double> [[Vec3]], double [[DBL4]], i32 3
202+
; CHECK62: [[L2:%.*]] = call { <4 x i32>, i1 }
203+
; CHECK62-SAME: @llvm.dx.resource.load.rawbuffer.v4i32.tdx.Rawbuffer_v4f64_0_0t(
204+
; CHECK62-SAME: target("dx.Rawbuffer", <4 x double>, 0, 0) [[B]], i32 %index, i32 16)
205+
206+
; CHECK62: [[D2:%.*]] = extractvalue { <4 x i32>, i1 } [[L2]], 0
207+
; CHECK62: [[Lo3:%.*]] = extractelement <4 x i32> [[D2]], i32 0
208+
; CHECK62: [[Hi3:%.*]] = extractelement <4 x i32> [[D2]], i32 1
209+
; CHECK62: [[Lo4:%.*]] = extractelement <4 x i32> [[D2]], i32 2
210+
; CHECK62: [[Hi4:%.*]] = extractelement <4 x i32> [[D2]], i32 3
211+
; CHECK62: [[DBL3:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo3]], i32 [[Hi3]])
212+
; CHECK62: [[Vec3:%.*]] = insertelement <4 x double> [[Vec2]], double [[DBL3]], i32 2
213+
; CHECK62: [[DBL4:%.*]] = call double @llvm.dx.asdouble.i32(i32 [[Lo4]], i32 [[Hi4]])
214+
; CHECK62: [[Vec4:%.*]] = insertelement <4 x double> [[Vec3]], double [[DBL4]], i32 3
187215
%load0 = call {<4 x double>, i1} @llvm.dx.resource.load.rawbuffer(
188216
target("dx.Rawbuffer", <4 x double>, 0, 0) %buffer, i32 %index, i32 0)
189217

218+
; CHECK63: extractvalue { <4 x double>, i1 } [[L0]], 0
219+
; CHECK63: extractvalue { <4 x double>, i1 } [[L0]], 1
190220

191-
; CHECK-NOT: extractvalue {<4 x double>, i1 }
221+
; CHECK62-NOT: extractvalue {<4 x double>, i1 }
192222
%data0 = extractvalue {<4 x double>, i1} %load0, 0
193223
; check we extract checkbit from both loads and and them together
194-
; CHECK: [[B1:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 1
195-
; CHECK: [[B2:%.*]] = extractvalue { <4 x i32>, i1 } [[L2]], 1
196-
; CHECK: and i1 [[B1]], [[B2]]
224+
; CHECK62: [[B1:%.*]] = extractvalue { <4 x i32>, i1 } [[L0]], 1
225+
; CHECK62: [[B2:%.*]] = extractvalue { <4 x i32>, i1 } [[L2]], 1
226+
; CHECK62: and i1 [[B1]], [[B2]]
197227
%cb = extractvalue {<4 x double>, i1} %load0, 1
198228
ret void
199229
}

0 commit comments

Comments
 (0)