@@ -73,16 +73,22 @@ entry:
73
73
; CHECK-SPIRV: OpReturnValue [[var_23]]
74
74
75
75
; CHECK-LLVM: %0 = alloca [[structtype]], align 8
76
- ; CHECK-LLVM: call spir_func void @_Z17__spirv_IAddCarryss(ptr sret([[structtype]]) %0, i16 %a, i16 %b)
77
- ; CHECK-LLVM: %1 = load [[structtype]], ptr %0, align 2
78
- ; CHECK-LLVM: %2 = extractvalue [[structtype]] %1, 0
79
- ; CHECK-LLVM: %3 = extractvalue [[structtype]] %1, 1
80
- ; CHECK-LLVM: %4 = icmp ne i16 %3, 0
81
- ; CHECK-LLVM: %5 = insertvalue [[structtype_0]] undef, i16 %2, 0
82
- ; CHECK-LLVM: %6 = insertvalue [[structtype_0]] %5, i1 %4, 1
83
- ; CHECK-LLVM: %7 = extractvalue [[structtype_0]] %6, 0
84
- ; CHECK-LLVM: %8 = extractvalue [[structtype_0]] %6, 1
85
- ; CHECK-LLVM: ret i1 %8
76
+ ; CHECK-LLVM: %1 = call { i16, i1 } @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
77
+ ; CHECK-LLVM: %2 = extractvalue { i16, i1 } %1, 0
78
+ ; CHECK-LLVM: %3 = extractvalue { i16, i1 } %1, 1
79
+ ; CHECK-LLVM: %4 = zext i1 %3 to i16
80
+ ; CHECK-LLVM: %5 = insertvalue { i16, i16 } undef, i16 %2, 0
81
+ ; CHECK-LLVM: %6 = insertvalue { i16, i16 } %5, i16 %4, 1
82
+ ; CHECK-LLVM: store { i16, i16 } %6, ptr %0, align 2
83
+ ; CHECK-LLVM: %7 = load %structtype, ptr %0, align 2
84
+ ; CHECK-LLVM: %8 = extractvalue [[structtype]] %7, 0
85
+ ; CHECK-LLVM: %9 = extractvalue [[structtype]] %7, 1
86
+ ; CHECK-LLVM: %10 = icmp ne i16 %9, 0
87
+ ; CHECK-LLVM: %11 = insertvalue [[structtype_0]] undef, i16 %8, 0
88
+ ; CHECK-LLVM: %12 = insertvalue [[structtype_0]] %11, i1 %10, 1
89
+ ; CHECK-LLVM: %13 = extractvalue [[structtype_0]] %12, 0
90
+ ; CHECK-LLVM: %14 = extractvalue [[structtype_0]] %12, 1
91
+ ; CHECK-LLVM: ret i1 %14
86
92
define spir_func i1 @test_uadd_with_overflow_i32 (i32 %a , i32 %b ) {
87
93
entry:
88
94
%res = call {i32 , i1 } @llvm.uadd.with.overflow.i32 (i32 %a , i32 %b )
@@ -109,16 +115,22 @@ entry:
109
115
110
116
111
117
; CHECK-LLVM: %0 = alloca [[structtype_1]], align 8
112
- ; CHECK-LLVM: call spir_func void @_Z17__spirv_IAddCarryii(ptr sret([[structtype_1]]) %0, i32 %a, i32 %b)
113
- ; CHECK-LLVM: %1 = load [[structtype_1]], ptr %0, align 4
114
- ; CHECK-LLVM: %2 = extractvalue [[structtype_1]] %1, 0
115
- ; CHECK-LLVM: %3 = extractvalue [[structtype_1]] %1, 1
116
- ; CHECK-LLVM: %4 = icmp ne i32 %3, 0
117
- ; CHECK-LLVM: %5 = insertvalue [[structtype_2]] undef, i32 %2, 0
118
- ; CHECK-LLVM: %6 = insertvalue [[structtype_2]] %5, i1 %4, 1
119
- ; CHECK-LLVM: %7 = extractvalue [[structtype_2]] %6, 0
120
- ; CHECK-LLVM: %8 = extractvalue [[structtype_2]] %6, 1
121
- ; CHECK-LLVM: ret i1 %8
118
+ ; CHECK-LLVM: %1 = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
119
+ ; CHECK-LLVM: %2 = extractvalue { i32, i1 } %1, 0
120
+ ; CHECK-LLVM: %3 = extractvalue { i32, i1 } %1, 1
121
+ ; CHECK-LLVM: %4 = zext i1 %3 to i32
122
+ ; CHECK-LLVM: %5 = insertvalue { i32, i32 } undef, i32 %2, 0
123
+ ; CHECK-LLVM: %6 = insertvalue { i32, i32 } %5, i32 %4, 1
124
+ ; CHECK-LLVM: store { i32, i32 } %6, ptr %0, align 4
125
+ ; CHECK-LLVM: %7 = load [[structtype_1]], ptr %0, align 4
126
+ ; CHECK-LLVM: %8 = extractvalue [[structtype_1]] %7, 0
127
+ ; CHECK-LLVM: %9 = extractvalue [[structtype_1]] %7, 1
128
+ ; CHECK-LLVM: %10 = icmp ne i32 %9, 0
129
+ ; CHECK-LLVM: %11 = insertvalue [[structtype_2]] undef, i32 %8, 0
130
+ ; CHECK-LLVM: %12 = insertvalue [[structtype_2]] %11, i1 %10, 1
131
+ ; CHECK-LLVM: %13 = extractvalue [[structtype_2]] %12, 0
132
+ ; CHECK-LLVM: %14 = extractvalue [[structtype_2]] %12, 1
133
+ ; CHECK-LLVM: ret i1 %14
122
134
define spir_func i1 @test_uadd_with_overflow_i64 (i64 %a , i64 %b ) {
123
135
entry:
124
136
%res = call {i64 , i1 } @llvm.uadd.with.overflow.i64 (i64 %a , i64 %b )
@@ -144,16 +156,22 @@ entry:
144
156
; CHECK-SPIRV: OpReturnValue [[var_65]]
145
157
146
158
; CHECK-LLVM: %0 = alloca [[structtype_3]], align 8
147
- ; CHECK-LLVM: call spir_func void @_Z17__spirv_IAddCarryll(ptr sret([[structtype_3]]) %0, i64 %a, i64 %b)
148
- ; CHECK-LLVM: %1 = load [[structtype_3]], ptr %0, align 4
149
- ; CHECK-LLVM: %2 = extractvalue [[structtype_3]] %1, 0
150
- ; CHECK-LLVM: %3 = extractvalue [[structtype_3]] %1, 1
151
- ; CHECK-LLVM: %4 = icmp ne i64 %3, 0
152
- ; CHECK-LLVM: %5 = insertvalue [[structtype_4]] undef, i64 %2, 0
153
- ; CHECK-LLVM: %6 = insertvalue [[structtype_4]] %5, i1 %4, 1
154
- ; CHECK-LLVM: %7 = extractvalue [[structtype_4]] %6, 0
155
- ; CHECK-LLVM: %8 = extractvalue [[structtype_4]] %6, 1
156
- ; CHECK-LLVM: ret i1 %8
159
+ ; CHECK-LLVM: %1 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %a, i64 %b)
160
+ ; CHECK-LLVM: %2 = extractvalue { i64, i1 } %1, 0
161
+ ; CHECK-LLVM: %3 = extractvalue { i64, i1 } %1, 1
162
+ ; CHECK-LLVM: %4 = zext i1 %3 to i64
163
+ ; CHECK-LLVM: %5 = insertvalue { i64, i64 } undef, i64 %2, 0
164
+ ; CHECK-LLVM: %6 = insertvalue { i64, i64 } %5, i64 %4, 1
165
+ ; CHECK-LLVM: store { i64, i64 } %6, ptr %0, align 8
166
+ ; CHECK-LLVM: %7 = load [[structtype_3]], ptr %0, align 4
167
+ ; CHECK-LLVM: %8 = extractvalue [[structtype_3]] %7, 0
168
+ ; CHECK-LLVM: %9 = extractvalue [[structtype_3]] %7, 1
169
+ ; CHECK-LLVM: %10 = icmp ne i64 %9, 0
170
+ ; CHECK-LLVM: %11 = insertvalue [[structtype_4]] undef, i64 %8, 0
171
+ ; CHECK-LLVM: %12 = insertvalue [[structtype_4]] %11, i1 %10, 1
172
+ ; CHECK-LLVM: %13 = extractvalue [[structtype_4]] %12, 0
173
+ ; CHECK-LLVM: %14 = extractvalue [[structtype_4]] %12, 1
174
+ ; CHECK-LLVM: ret i1 %14
157
175
define spir_func <4 x i1 > @test_uadd_with_overflow_v4i32 (<4 x i32 > %a , <4 x i32 > %b ) {
158
176
entry:
159
177
%res = call {<4 x i32 >, <4 x i1 >} @llvm.uadd.with.overflow.v4i32 (<4 x i32 > %a , <4 x i32 > %b )
@@ -179,16 +197,22 @@ entry:
179
197
; CHECK-SPIRV: OpReturnValue [[var_87]]
180
198
181
199
; CHECK-LLVM: %0 = alloca [[structtype_5]], align 16
182
- ; CHECK-LLVM: call spir_func void @_Z17__spirv_IAddCarryDv4_iS_(ptr sret([[structtype_5]]) %0, <4 x i32> %a, <4 x i32> %b)
183
- ; CHECK-LLVM: %1 = load [[structtype_5]], ptr %0, align 16
184
- ; CHECK-LLVM: %2 = extractvalue [[structtype_5]] %1, 0
185
- ; CHECK-LLVM: %3 = extractvalue [[structtype_5]] %1, 1
186
- ; CHECK-LLVM: %4 = icmp ne <4 x i32> %3, zeroinitializer
187
- ; CHECK-LLVM: %5 = insertvalue [[structtype_6]] undef, <4 x i32> %2, 0
188
- ; CHECK-LLVM: %6 = insertvalue [[structtype_6]] %5, <4 x i1> %4, 1
189
- ; CHECK-LLVM: %7 = extractvalue [[structtype_6]] %6, 0
190
- ; CHECK-LLVM: %8 = extractvalue [[structtype_6]] %6, 1
191
- ; CHECK-LLVM: ret <4 x i1> %8
200
+ ; CHECK-LLVM: %1 = call { <4 x i32>, <4 x i1> } @llvm.uadd.with.overflow.v4i32(<4 x i32> %a, <4 x i32> %b)
201
+ ; CHECK-LLVM: %2 = extractvalue { <4 x i32>, <4 x i1> } %1, 0
202
+ ; CHECK-LLVM: %3 = extractvalue { <4 x i32>, <4 x i1> } %1, 1
203
+ ; CHECK-LLVM: %4 = zext <4 x i1> %3 to <4 x i32>
204
+ ; CHECK-LLVM: %5 = insertvalue { <4 x i32>, <4 x i32> } undef, <4 x i32> %2, 0
205
+ ; CHECK-LLVM: %6 = insertvalue { <4 x i32>, <4 x i32> } %5, <4 x i32> %4, 1
206
+ ; CHECK-LLVM: store { <4 x i32>, <4 x i32> } %6, ptr %0, align 16
207
+ ; CHECK-LLVM: %7 = load [[structtype_5]], ptr %0, align 16
208
+ ; CHECK-LLVM: %8 = extractvalue [[structtype_5]] %7, 0
209
+ ; CHECK-LLVM: %9 = extractvalue [[structtype_5]] %7, 1
210
+ ; CHECK-LLVM: %10 = icmp ne <4 x i32> %9, zeroinitializer
211
+ ; CHECK-LLVM: %11 = insertvalue [[structtype_6]] undef, <4 x i32> %8, 0
212
+ ; CHECK-LLVM: %12 = insertvalue [[structtype_6]] %11, <4 x i1> %10, 1
213
+ ; CHECK-LLVM: %13 = extractvalue [[structtype_6]] %12, 0
214
+ ; CHECK-LLVM: %14 = extractvalue [[structtype_6]] %12, 1
215
+ ; CHECK-LLVM: ret <4 x i1> %14
192
216
declare {i16 , i1 } @llvm.uadd.with.overflow.i16 (i16 %a , i16 %b )
193
217
declare {i32 , i1 } @llvm.uadd.with.overflow.i32 (i32 %a , i32 %b )
194
218
declare {i64 , i1 } @llvm.uadd.with.overflow.i64 (i64 %a , i64 %b )
0 commit comments