Skip to content

Commit

Permalink
[RISCV] Change the type of argument to clz and ctz from ZiZi/WiWi to …
Browse files Browse the repository at this point in the history
…iUZi/iUWi

Input argument of clz and ctz should be unsigned type and return value
should be integer like `builtin_clz` and `builtin_ctz` defined in clang/include/clang/Basic/Builtins.def.

Reviewed By: craig.topper

Differential Revision: https://reviews.llvm.org/D153235
  • Loading branch information
tclin914 committed Jun 26, 2023
1 parent cdb9146 commit 612b7e1
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 12 deletions.
8 changes: 4 additions & 4 deletions clang/include/clang/Basic/BuiltinsRISCV.def
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
// Zbb extension
TARGET_BUILTIN(__builtin_riscv_orc_b_32, "ZiZi", "nc", "zbb")
TARGET_BUILTIN(__builtin_riscv_orc_b_64, "WiWi", "nc", "zbb,64bit")
TARGET_BUILTIN(__builtin_riscv_clz_32, "ZiZi", "nc", "zbb|xtheadbb")
TARGET_BUILTIN(__builtin_riscv_clz_64, "WiWi", "nc", "zbb|xtheadbb,64bit")
TARGET_BUILTIN(__builtin_riscv_ctz_32, "ZiZi", "nc", "zbb")
TARGET_BUILTIN(__builtin_riscv_ctz_64, "WiWi", "nc", "zbb,64bit")
TARGET_BUILTIN(__builtin_riscv_clz_32, "iUZi", "nc", "zbb|xtheadbb")
TARGET_BUILTIN(__builtin_riscv_clz_64, "iUWi", "nc", "zbb|xtheadbb,64bit")
TARGET_BUILTIN(__builtin_riscv_ctz_32, "iUZi", "nc", "zbb")
TARGET_BUILTIN(__builtin_riscv_ctz_64, "iUWi", "nc", "zbb,64bit")

// Zbc or Zbkc extension
TARGET_BUILTIN(__builtin_riscv_clmul, "LiLiLi", "nc", "zbc|zbkc")
Expand Down
4 changes: 2 additions & 2 deletions clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ int orc_b_32(int a) {
// RV32ZBB-NEXT: [[TMP1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[TMP0]], i1 false)
// RV32ZBB-NEXT: ret i32 [[TMP1]]
//
int clz_32(int a) {
int clz_32(unsigned int a) {
return __builtin_riscv_clz_32(a);
}

Expand All @@ -34,6 +34,6 @@ int clz_32(int a) {
// RV32ZBB-NEXT: [[TMP1:%.*]] = call i32 @llvm.cttz.i32(i32 [[TMP0]], i1 false)
// RV32ZBB-NEXT: ret i32 [[TMP1]]
//
int ctz_32(int a) {
int ctz_32(unsigned int a) {
return __builtin_riscv_ctz_32(a);
}
18 changes: 12 additions & 6 deletions clang/test/CodeGen/RISCV/rvb-intrinsics/riscv64-zbb.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,22 @@ long orc_b_64(long a) {
// RV64ZBB-NEXT: [[TMP1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[TMP0]], i1 false)
// RV64ZBB-NEXT: ret i32 [[TMP1]]
//
int clz_32(int a) {
int clz_32(unsigned int a) {
return __builtin_riscv_clz_32(a);
}

// RV64ZBB-LABEL: @clz_64(
// RV64ZBB-NEXT: entry:
// RV64ZBB-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
// RV64ZBB-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8
// RV64ZBB-NEXT: store i64 [[A:%.*]], ptr [[A_ADDR]], align 8
// RV64ZBB-NEXT: [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 8
// RV64ZBB-NEXT: [[TMP1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[TMP0]], i1 false)
// RV64ZBB-NEXT: ret i64 [[TMP1]]
// RV64ZBB-NEXT: store i64 [[TMP1]], ptr [[RETVAL]], align 4
// RV64ZBB-NEXT: [[TMP2:%.*]] = load i32, ptr [[RETVAL]], align 4
// RV64ZBB-NEXT: ret i32 [[TMP2]]
//
long clz_64(long a) {
int clz_64(unsigned long a) {
return __builtin_riscv_clz_64(a);
}

Expand All @@ -58,18 +61,21 @@ long clz_64(long a) {
// RV64ZBB-NEXT: [[TMP1:%.*]] = call i32 @llvm.cttz.i32(i32 [[TMP0]], i1 false)
// RV64ZBB-NEXT: ret i32 [[TMP1]]
//
int ctz_32(int a) {
int ctz_32(unsigned int a) {
return __builtin_riscv_ctz_32(a);
}

// RV64ZBB-LABEL: @ctz_64(
// RV64ZBB-NEXT: entry:
// RV64ZBB-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
// RV64ZBB-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8
// RV64ZBB-NEXT: store i64 [[A:%.*]], ptr [[A_ADDR]], align 8
// RV64ZBB-NEXT: [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 8
// RV64ZBB-NEXT: [[TMP1:%.*]] = call i64 @llvm.cttz.i64(i64 [[TMP0]], i1 false)
// RV64ZBB-NEXT: ret i64 [[TMP1]]
// RV64ZBB-NEXT: store i64 [[TMP1]], ptr [[RETVAL]], align 4
// RV64ZBB-NEXT: [[TMP2:%.*]] = load i32, ptr [[RETVAL]], align 4
// RV64ZBB-NEXT: ret i32 [[TMP2]]
//
long ctz_64(long a) {
int ctz_64(unsigned long a) {
return __builtin_riscv_ctz_64(a);
}

0 comments on commit 612b7e1

Please sign in to comment.