@@ -399,11 +399,61 @@ define i32 @test_cttz_not_bw_multiuse(i32 %x) {
399
399
ret i32 %res
400
400
}
401
401
402
+ define <2 x i32 > @test_ctlz_bw_vec (<2 x i32 > %x ) {
403
+ ; CHECK-LABEL: @test_ctlz_bw_vec(
404
+ ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[X:%.*]], i1 false)
405
+ ; CHECK-NEXT: ret <2 x i32> [[TMP1]]
406
+ ;
407
+ %ct = tail call <2 x i32 > @llvm.ctlz.v2i32 (<2 x i32 > %x , i1 true )
408
+ %cmp = icmp ne <2 x i32 > %x , zeroinitializer
409
+ %res = select <2 x i1 > %cmp , <2 x i32 > %ct , <2 x i32 > <i32 32 , i32 32 >
410
+ ret <2 x i32 > %res
411
+ }
412
+
413
+ define <2 x i32 > @test_ctlz_not_bw_vec (<2 x i32 > %x ) {
414
+ ; CHECK-LABEL: @test_ctlz_not_bw_vec(
415
+ ; CHECK-NEXT: [[CT:%.*]] = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[X:%.*]], i1 false)
416
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[X]], zeroinitializer
417
+ ; CHECK-NEXT: [[RES:%.*]] = select <2 x i1> [[CMP]], <2 x i32> zeroinitializer, <2 x i32> [[CT]]
418
+ ; CHECK-NEXT: ret <2 x i32> [[RES]]
419
+ ;
420
+ %ct = tail call <2 x i32 > @llvm.ctlz.v2i32 (<2 x i32 > %x , i1 false )
421
+ %cmp = icmp ne <2 x i32 > %x , zeroinitializer
422
+ %res = select <2 x i1 > %cmp , <2 x i32 > %ct , <2 x i32 > <i32 0 , i32 0 >
423
+ ret <2 x i32 > %res
424
+ }
425
+
426
+ define <2 x i32 > @test_cttz_bw_vec (<2 x i32 > %x ) {
427
+ ; CHECK-LABEL: @test_cttz_bw_vec(
428
+ ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i32> @llvm.cttz.v2i32(<2 x i32> [[X:%.*]], i1 false)
429
+ ; CHECK-NEXT: ret <2 x i32> [[TMP1]]
430
+ ;
431
+ %ct = tail call <2 x i32 > @llvm.cttz.v2i32 (<2 x i32 > %x , i1 true )
432
+ %cmp = icmp ne <2 x i32 > %x , zeroinitializer
433
+ %res = select <2 x i1 > %cmp , <2 x i32 > %ct , <2 x i32 > <i32 32 , i32 32 >
434
+ ret <2 x i32 > %res
435
+ }
436
+
437
+ define <2 x i32 > @test_cttz_not_bw_vec (<2 x i32 > %x ) {
438
+ ; CHECK-LABEL: @test_cttz_not_bw_vec(
439
+ ; CHECK-NEXT: [[CT:%.*]] = tail call <2 x i32> @llvm.cttz.v2i32(<2 x i32> [[X:%.*]], i1 false)
440
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[X]], zeroinitializer
441
+ ; CHECK-NEXT: [[RES:%.*]] = select <2 x i1> [[CMP]], <2 x i32> zeroinitializer, <2 x i32> [[CT]]
442
+ ; CHECK-NEXT: ret <2 x i32> [[RES]]
443
+ ;
444
+ %ct = tail call <2 x i32 > @llvm.cttz.v2i32 (<2 x i32 > %x , i1 false )
445
+ %cmp = icmp ne <2 x i32 > %x , zeroinitializer
446
+ %res = select <2 x i1 > %cmp , <2 x i32 > %ct , <2 x i32 > <i32 0 , i32 0 >
447
+ ret <2 x i32 > %res
448
+ }
449
+
402
450
declare i16 @llvm.ctlz.i16 (i16 , i1 )
403
451
declare i32 @llvm.ctlz.i32 (i32 , i1 )
404
452
declare i64 @llvm.ctlz.i64 (i64 , i1 )
405
453
declare i128 @llvm.ctlz.i128 (i128 , i1 )
454
+ declare <2 x i32 > @llvm.ctlz.v2i32 (<2 x i32 >, i1 )
406
455
declare i16 @llvm.cttz.i16 (i16 , i1 )
407
456
declare i32 @llvm.cttz.i32 (i32 , i1 )
408
457
declare i64 @llvm.cttz.i64 (i64 , i1 )
409
458
declare i128 @llvm.cttz.i128 (i128 , i1 )
459
+ declare <2 x i32 > @llvm.cttz.v2i32 (<2 x i32 >, i1 )
0 commit comments