55define i32 @bfoz_from_and_i32 (i32 %x ) {
66; CHECK-LABEL: bfoz_from_and_i32:
77; CHECK: # %bb.0:
8- ; CHECK-NEXT: slli a0, a0, 52
9- ; CHECK-NEXT: srli a0, a0, 52
8+ ; CHECK-NEXT: nds.bfoz a0, a0, 11, 0
109; CHECK-NEXT: ret
1110 %a = and i32 %x , 4095
1211 ret i32 %a
@@ -15,8 +14,7 @@ define i32 @bfoz_from_and_i32(i32 %x) {
1514define i64 @bfoz_from_and_i64 (i64 %x ) {
1615; CHECK-LABEL: bfoz_from_and_i64:
1716; CHECK: # %bb.0:
18- ; CHECK-NEXT: slli a0, a0, 52
19- ; CHECK-NEXT: srli a0, a0, 52
17+ ; CHECK-NEXT: nds.bfoz a0, a0, 11, 0
2018; CHECK-NEXT: ret
2119 %a = and i64 %x , 4095
2220 ret i64 %a
@@ -25,8 +23,7 @@ define i64 @bfoz_from_and_i64(i64 %x) {
2523define i32 @bfoz_from_and_lshr_i32 (i32 %x ) {
2624; CHECK-LABEL: bfoz_from_and_lshr_i32:
2725; CHECK: # %bb.0:
28- ; CHECK-NEXT: slli a0, a0, 38
29- ; CHECK-NEXT: srli a0, a0, 61
26+ ; CHECK-NEXT: nds.bfoz a0, a0, 25, 23
3027; CHECK-NEXT: ret
3128 %shifted = lshr i32 %x , 23
3229 %masked = and i32 %shifted , 7
@@ -36,8 +33,7 @@ define i32 @bfoz_from_and_lshr_i32(i32 %x) {
3633define i64 @bfoz_from_and_lshr_i64 (i64 %x ) {
3734; CHECK-LABEL: bfoz_from_and_lshr_i64:
3835; CHECK: # %bb.0:
39- ; CHECK-NEXT: slli a0, a0, 6
40- ; CHECK-NEXT: srli a0, a0, 52
36+ ; CHECK-NEXT: nds.bfoz a0, a0, 57, 46
4137; CHECK-NEXT: ret
4238 %shifted = lshr i64 %x , 46
4339 %masked = and i64 %shifted , 4095
@@ -47,8 +43,7 @@ define i64 @bfoz_from_and_lshr_i64(i64 %x) {
4743define i32 @bfoz_from_lshr_and_i32 (i32 %x ) {
4844; CHECK-LABEL: bfoz_from_lshr_and_i32:
4945; CHECK: # %bb.0:
50- ; CHECK-NEXT: slli a0, a0, 40
51- ; CHECK-NEXT: srli a0, a0, 52
46+ ; CHECK-NEXT: nds.bfoz a0, a0, 23, 12
5247; CHECK-NEXT: ret
5348 %masked = and i32 %x , 16773120
5449 %shifted = lshr i32 %masked , 12
@@ -58,8 +53,7 @@ define i32 @bfoz_from_lshr_and_i32(i32 %x) {
5853define i64 @bfoz_from_lshr_and_i64 (i64 %x ) {
5954; CHECK-LABEL: bfoz_from_lshr_and_i64:
6055; CHECK: # %bb.0:
61- ; CHECK-NEXT: slli a0, a0, 28
62- ; CHECK-NEXT: srli a0, a0, 52
56+ ; CHECK-NEXT: nds.bfoz a0, a0, 35, 24
6357; CHECK-NEXT: ret
6458 %masked = and i64 %x , 68702699520
6559 %shifted = lshr i64 %masked , 24
0 commit comments