@@ -5192,3 +5192,138 @@ entry:
5192
5192
%s = select <8 x i1 > %c , <8 x half > %a , <8 x half > %b
5193
5193
ret <8 x half > %s
5194
5194
}
5195
+
5196
+
5197
+
5198
+ define arm_aapcs_vfpcc <8 x half > @vcmp_oeq_v8f16_bc (<8 x half > %src , half * %src2p , <8 x half > %a , <8 x half > %b ) {
5199
+ ; CHECK-MVE-LABEL: vcmp_oeq_v8f16_bc:
5200
+ ; CHECK-MVE: @ %bb.0: @ %entry
5201
+ ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
5202
+ ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
5203
+ ; CHECK-MVE-NEXT: ldrh r0, [r0]
5204
+ ; CHECK-MVE-NEXT: vmovx.f16 s12, s0
5205
+ ; CHECK-MVE-NEXT: movs r2, #0
5206
+ ; CHECK-MVE-NEXT: movs r1, #0
5207
+ ; CHECK-MVE-NEXT: vdup.16 q4, r0
5208
+ ; CHECK-MVE-NEXT: movs r0, #0
5209
+ ; CHECK-MVE-NEXT: vmovx.f16 s14, s16
5210
+ ; CHECK-MVE-NEXT: vmovx.f16 s22, s17
5211
+ ; CHECK-MVE-NEXT: vcmp.f16 s12, s14
5212
+ ; CHECK-MVE-NEXT: vmovx.f16 s12, s4
5213
+ ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
5214
+ ; CHECK-MVE-NEXT: it eq
5215
+ ; CHECK-MVE-NEXT: moveq r0, #1
5216
+ ; CHECK-MVE-NEXT: cmp r0, #0
5217
+ ; CHECK-MVE-NEXT: vcmp.f16 s0, s16
5218
+ ; CHECK-MVE-NEXT: cset r0, ne
5219
+ ; CHECK-MVE-NEXT: vmovx.f16 s14, s8
5220
+ ; CHECK-MVE-NEXT: lsls r0, r0, #31
5221
+ ; CHECK-MVE-NEXT: vmovx.f16 s0, s3
5222
+ ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12
5223
+ ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
5224
+ ; CHECK-MVE-NEXT: it eq
5225
+ ; CHECK-MVE-NEXT: moveq r2, #1
5226
+ ; CHECK-MVE-NEXT: cmp r2, #0
5227
+ ; CHECK-MVE-NEXT: cset r2, ne
5228
+ ; CHECK-MVE-NEXT: vmov r0, s12
5229
+ ; CHECK-MVE-NEXT: lsls r2, r2, #31
5230
+ ; CHECK-MVE-NEXT: vcmp.f16 s1, s17
5231
+ ; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4
5232
+ ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
5233
+ ; CHECK-MVE-NEXT: vmov r2, s12
5234
+ ; CHECK-MVE-NEXT: vmov.16 q3[0], r2
5235
+ ; CHECK-MVE-NEXT: vmov.16 q3[1], r0
5236
+ ; CHECK-MVE-NEXT: mov.w r0, #0
5237
+ ; CHECK-MVE-NEXT: it eq
5238
+ ; CHECK-MVE-NEXT: moveq r0, #1
5239
+ ; CHECK-MVE-NEXT: cmp r0, #0
5240
+ ; CHECK-MVE-NEXT: cset r0, ne
5241
+ ; CHECK-MVE-NEXT: lsls r0, r0, #31
5242
+ ; CHECK-MVE-NEXT: vseleq.f16 s20, s9, s5
5243
+ ; CHECK-MVE-NEXT: vmov r0, s20
5244
+ ; CHECK-MVE-NEXT: vmovx.f16 s20, s1
5245
+ ; CHECK-MVE-NEXT: vcmp.f16 s20, s22
5246
+ ; CHECK-MVE-NEXT: vmov.16 q3[2], r0
5247
+ ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
5248
+ ; CHECK-MVE-NEXT: mov.w r0, #0
5249
+ ; CHECK-MVE-NEXT: it eq
5250
+ ; CHECK-MVE-NEXT: moveq r0, #1
5251
+ ; CHECK-MVE-NEXT: cmp r0, #0
5252
+ ; CHECK-MVE-NEXT: cset r0, ne
5253
+ ; CHECK-MVE-NEXT: vmovx.f16 s20, s5
5254
+ ; CHECK-MVE-NEXT: vmovx.f16 s22, s9
5255
+ ; CHECK-MVE-NEXT: lsls r0, r0, #31
5256
+ ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
5257
+ ; CHECK-MVE-NEXT: vcmp.f16 s2, s18
5258
+ ; CHECK-MVE-NEXT: vmov r0, s20
5259
+ ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
5260
+ ; CHECK-MVE-NEXT: vmov.16 q3[3], r0
5261
+ ; CHECK-MVE-NEXT: mov.w r0, #0
5262
+ ; CHECK-MVE-NEXT: it eq
5263
+ ; CHECK-MVE-NEXT: moveq r0, #1
5264
+ ; CHECK-MVE-NEXT: cmp r0, #0
5265
+ ; CHECK-MVE-NEXT: cset r0, ne
5266
+ ; CHECK-MVE-NEXT: vmovx.f16 s22, s18
5267
+ ; CHECK-MVE-NEXT: lsls r0, r0, #31
5268
+ ; CHECK-MVE-NEXT: vseleq.f16 s20, s10, s6
5269
+ ; CHECK-MVE-NEXT: vmov r0, s20
5270
+ ; CHECK-MVE-NEXT: vmovx.f16 s20, s2
5271
+ ; CHECK-MVE-NEXT: vcmp.f16 s20, s22
5272
+ ; CHECK-MVE-NEXT: vmov.16 q3[4], r0
5273
+ ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
5274
+ ; CHECK-MVE-NEXT: mov.w r0, #0
5275
+ ; CHECK-MVE-NEXT: it eq
5276
+ ; CHECK-MVE-NEXT: moveq r0, #1
5277
+ ; CHECK-MVE-NEXT: cmp r0, #0
5278
+ ; CHECK-MVE-NEXT: cset r0, ne
5279
+ ; CHECK-MVE-NEXT: vmovx.f16 s20, s6
5280
+ ; CHECK-MVE-NEXT: vmovx.f16 s22, s10
5281
+ ; CHECK-MVE-NEXT: lsls r0, r0, #31
5282
+ ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
5283
+ ; CHECK-MVE-NEXT: vcmp.f16 s3, s19
5284
+ ; CHECK-MVE-NEXT: vmov r0, s20
5285
+ ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
5286
+ ; CHECK-MVE-NEXT: vmov.16 q3[5], r0
5287
+ ; CHECK-MVE-NEXT: mov.w r0, #0
5288
+ ; CHECK-MVE-NEXT: it eq
5289
+ ; CHECK-MVE-NEXT: moveq r0, #1
5290
+ ; CHECK-MVE-NEXT: cmp r0, #0
5291
+ ; CHECK-MVE-NEXT: cset r0, ne
5292
+ ; CHECK-MVE-NEXT: vmovx.f16 s2, s19
5293
+ ; CHECK-MVE-NEXT: vcmp.f16 s0, s2
5294
+ ; CHECK-MVE-NEXT: lsls r0, r0, #31
5295
+ ; CHECK-MVE-NEXT: vseleq.f16 s20, s11, s7
5296
+ ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
5297
+ ; CHECK-MVE-NEXT: it eq
5298
+ ; CHECK-MVE-NEXT: moveq r1, #1
5299
+ ; CHECK-MVE-NEXT: vmov r0, s20
5300
+ ; CHECK-MVE-NEXT: cmp r1, #0
5301
+ ; CHECK-MVE-NEXT: vmov.16 q3[6], r0
5302
+ ; CHECK-MVE-NEXT: cset r0, ne
5303
+ ; CHECK-MVE-NEXT: vmovx.f16 s0, s7
5304
+ ; CHECK-MVE-NEXT: vmovx.f16 s2, s11
5305
+ ; CHECK-MVE-NEXT: lsls r0, r0, #31
5306
+ ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
5307
+ ; CHECK-MVE-NEXT: vmov r0, s0
5308
+ ; CHECK-MVE-NEXT: vmov.16 q3[7], r0
5309
+ ; CHECK-MVE-NEXT: vmov q0, q3
5310
+ ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
5311
+ ; CHECK-MVE-NEXT: bx lr
5312
+ ;
5313
+ ; CHECK-MVEFP-LABEL: vcmp_oeq_v8f16_bc:
5314
+ ; CHECK-MVEFP: @ %bb.0: @ %entry
5315
+ ; CHECK-MVEFP-NEXT: ldrh r0, [r0]
5316
+ ; CHECK-MVEFP-NEXT: vdup.16 q3, r0
5317
+ ; CHECK-MVEFP-NEXT: vcmp.f16 eq, q0, q3
5318
+ ; CHECK-MVEFP-NEXT: vpsel q0, q1, q2
5319
+ ; CHECK-MVEFP-NEXT: bx lr
5320
+ entry:
5321
+ %src2 = load half , half * %src2p
5322
+ %src2bc = bitcast half %src2 to i16
5323
+ %i = insertelement <8 x i16 > undef , i16 %src2bc , i32 0
5324
+ %spbc = shufflevector <8 x i16 > %i , <8 x i16 > undef , <8 x i32 > zeroinitializer
5325
+ %sp = bitcast <8 x i16 > %spbc to <8 x half >
5326
+ %c = fcmp oeq <8 x half > %src , %sp
5327
+ %s = select <8 x i1 > %c , <8 x half > %a , <8 x half > %b
5328
+ ret <8 x half > %s
5329
+ }
0 commit comments