diff --git a/clang/include/clang/Basic/BuiltinsRISCV.def b/clang/include/clang/Basic/BuiltinsRISCV.def --- a/clang/include/clang/Basic/BuiltinsRISCV.def +++ b/clang/include/clang/Basic/BuiltinsRISCV.def @@ -29,8 +29,10 @@ TARGET_BUILTIN(__builtin_riscv_clmulr, "LiLiLi", "nc", "zbc") // Zbkx -TARGET_BUILTIN(__builtin_riscv_xperm4, "LiLiLi", "nc", "zbkx") -TARGET_BUILTIN(__builtin_riscv_xperm8, "LiLiLi", "nc", "zbkx") +TARGET_BUILTIN(__builtin_riscv_xperm4_32, "iii", "nc", "zbkx,32bit") +TARGET_BUILTIN(__builtin_riscv_xperm4_64, "WiWiWi", "nc", "zbkx,64bit") +TARGET_BUILTIN(__builtin_riscv_xperm8_32, "iii", "nc", "zbkx,32bit") +TARGET_BUILTIN(__builtin_riscv_xperm8_64, "WiWiWi", "nc", "zbkx,64bit") // Zbkb extension TARGET_BUILTIN(__builtin_riscv_brev8, "LiLi", "nc", "zbkb") diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -20202,8 +20202,10 @@ case RISCV::BI__builtin_riscv_clmul: case RISCV::BI__builtin_riscv_clmulh: case RISCV::BI__builtin_riscv_clmulr: - case RISCV::BI__builtin_riscv_xperm4: - case RISCV::BI__builtin_riscv_xperm8: + case RISCV::BI__builtin_riscv_xperm4_32: + case RISCV::BI__builtin_riscv_xperm4_64: + case RISCV::BI__builtin_riscv_xperm8_32: + case RISCV::BI__builtin_riscv_xperm8_64: case RISCV::BI__builtin_riscv_brev8: case RISCV::BI__builtin_riscv_zip_32: case RISCV::BI__builtin_riscv_unzip_32: { @@ -20245,10 +20247,12 @@ break; // Zbkx - case RISCV::BI__builtin_riscv_xperm8: + case RISCV::BI__builtin_riscv_xperm8_32: + case RISCV::BI__builtin_riscv_xperm8_64: ID = Intrinsic::riscv_xperm8; break; - case RISCV::BI__builtin_riscv_xperm4: + case RISCV::BI__builtin_riscv_xperm4_32: + case RISCV::BI__builtin_riscv_xperm4_64: ID = Intrinsic::riscv_xperm4; break; diff --git a/clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbkx.c b/clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbkx.c --- a/clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbkx.c +++ b/clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbkx.c @@ -13,9 +13,9 @@ // RV32ZBKX-NEXT: [[TMP2:%.*]] = call i32 @llvm.riscv.xperm8.i32(i32 [[TMP0]], i32 [[TMP1]]) // RV32ZBKX-NEXT: ret i32 [[TMP2]] // -long xperm8(long rs1, long rs2) +int xperm8(int rs1, int rs2) { - return __builtin_riscv_xperm8(rs1, rs2); + return __builtin_riscv_xperm8_32(rs1, rs2); } // RV32ZBKX-LABEL: @xperm4( @@ -29,7 +29,7 @@ // RV32ZBKX-NEXT: [[TMP2:%.*]] = call i32 @llvm.riscv.xperm4.i32(i32 [[TMP0]], i32 [[TMP1]]) // RV32ZBKX-NEXT: ret i32 [[TMP2]] // -long xperm4(long rs1, long rs2) +int xperm4(int rs1, int rs2) { - return __builtin_riscv_xperm4(rs1, rs2); + return __builtin_riscv_xperm4_32(rs1, rs2); } diff --git a/clang/test/CodeGen/RISCV/rvb-intrinsics/riscv64-zbkx.c b/clang/test/CodeGen/RISCV/rvb-intrinsics/riscv64-zbkx.c --- a/clang/test/CodeGen/RISCV/rvb-intrinsics/riscv64-zbkx.c +++ b/clang/test/CodeGen/RISCV/rvb-intrinsics/riscv64-zbkx.c @@ -15,7 +15,7 @@ // long xperm8(long rs1, long rs2) { - return __builtin_riscv_xperm8(rs1, rs2); + return __builtin_riscv_xperm8_64(rs1, rs2); } // RV64ZBKX-LABEL: @xperm4( @@ -31,5 +31,5 @@ // long xperm4(long rs1, long rs2) { - return __builtin_riscv_xperm4(rs1, rs2); + return __builtin_riscv_xperm4_64(rs1, rs2); }