test compile target x86_64 baseline ; clz/ctz on 64 bit operands function %i64_clz(i64) -> i64 { ebb0(v10: i64): v11 = clz v10 ; check: x86_bsr ; check: selectif.i64 return v11 } function %i64_ctz(i64) -> i64 { ebb1(v20: i64): v21 = ctz v20 ; check: x86_bsf ; check: selectif.i64 return v21 } ; clz/ctz on 32 bit operands function %i32_clz(i32) -> i32 { ebb0(v10: i32): v11 = clz v10 ; check: x86_bsr ; check: selectif.i32 return v11 } function %i32_ctz(i32) -> i32 { ebb1(v20: i32): v21 = ctz v20 ; check: x86_bsf ; check: selectif.i32 return v21 } ; popcount on 64 bit operands function %i64_popcount(i64) -> i64 { ebb0(v30: i64): v31 = popcnt v30; ; check: ushr_imm ; check: iconst.i64 ; check: band ; check: isub ; check: ushr_imm ; check: band ; check: isub ; check: ushr_imm ; check: band ; check: isub ; check: ushr_imm ; check: iadd ; check: iconst.i64 ; check: band ; check: iconst.i64 ; check: imul ; check: ushr_imm return v31; } ; popcount on 32 bit operands function %i32_popcount(i32) -> i32 { ebb0(v40: i32): v41 = popcnt v40; ; check: ushr_imm ; check: iconst.i32 ; check: band ; check: isub ; check: ushr_imm ; check: band ; check: isub ; check: ushr_imm ; check: band ; check: isub ; check: ushr_imm ; check: iadd ; check: iconst.i32 ; check: band ; check: iconst.i32 ; check: imul ; check: ushr_imm return v41; }