Skip to content

Commit b351908

Browse files
adeel10xPaoloS02
authored andcommitted
This patch replaces __builtin_riscv_cv_bitmanip_ror with target independent __builtin_rotateright32. Consequently, the definitions of __builtin_riscv_cv_bitmanip_ror and the intrinsic int_riscv_cv_bitmanip_ror were removed, and relevant tests in clang and llvm were updated.
1 parent d76498e commit b351908

File tree

8 files changed

+16
-30
lines changed

8 files changed

+16
-30
lines changed

clang/include/clang/Basic/BuiltinsRISCVCOREV.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,6 @@ TARGET_BUILTIN(bitmanip_ff1, "UZcUZi", "nc", "xcvbitmanip")
174174
TARGET_BUILTIN(bitmanip_fl1, "UZcUZi", "nc", "xcvbitmanip")
175175
TARGET_BUILTIN(bitmanip_clb, "UZcUZi", "nc", "xcvbitmanip")
176176
TARGET_BUILTIN(bitmanip_cnt, "UZcUZi", "nc", "xcvbitmanip")
177-
TARGET_BUILTIN(bitmanip_ror, "UZiUZiUZi", "nc", "xcvbitmanip")
178177
TARGET_BUILTIN(bitmanip_bitrev, "UZiUZiIUcIUc", "nc", "xcvbitmanip")
179178

180179
TARGET_BUILTIN(mac_mac, "UZiUZiUZiUZi", "nc", "xcvmac")

clang/lib/Headers/riscv_corev_bitmanip.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ static __inline__ uint8_t __DEFAULT_FN_ATTRS __riscv_cv_bitmanip_cnt(unsigned lo
5858
}
5959

6060
static __inline__ unsigned long __DEFAULT_FN_ATTRS __riscv_cv_bitmanip_ror(unsigned long a, unsigned long b) {
61-
return __builtin_riscv_cv_bitmanip_ror(a, b);
61+
return __builtin_rotateright32(a, b);
6262
}
6363

6464
#define __riscv_cv_bitmanip_bitrev(rs1, PTS, RADIX) \

clang/test/CodeGen/RISCV/corev-intrinsics/bitmanip-c-api.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ uint32_t test_cnt(uint32_t a) {
9090
}
9191

9292
// CHECK-LABEL: @test_ror
93-
// CHECK: @llvm.riscv.cv.bitmanip.ror
93+
// CHECK: @llvm.fshr.i32
9494
uint32_t test_ror(uint32_t a, uint32_t b) {
9595
return __riscv_cv_bitmanip_ror(a, b);
9696
}

clang/test/CodeGen/RISCV/corev-intrinsics/bitmanip.c

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -199,21 +199,6 @@ uint32_t test_cnt(uint32_t a) {
199199
return __builtin_riscv_cv_bitmanip_cnt(a);
200200
}
201201

202-
// CHECK-LABEL: @test_ror(
203-
// CHECK-NEXT: entry:
204-
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
205-
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4
206-
// CHECK-NEXT: store i32 [[A:%.*]], ptr [[A_ADDR]], align 4
207-
// CHECK-NEXT: store i32 [[B:%.*]], ptr [[B_ADDR]], align 4
208-
// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
209-
// CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[B_ADDR]], align 4
210-
// CHECK-NEXT: [[TMP2:%.*]] = call i32 @llvm.riscv.cv.bitmanip.ror(i32 [[TMP0]], i32 [[TMP1]])
211-
// CHECK-NEXT: ret i32 [[TMP2]]
212-
//
213-
uint32_t test_ror(uint32_t a, uint32_t b) {
214-
return __builtin_riscv_cv_bitmanip_ror(a, b);
215-
}
216-
217202
// CHECK-LABEL: @test_bitrev(
218203
// CHECK-NEXT: entry:
219204
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4

llvm/include/llvm/IR/IntrinsicsRISCV.td

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1730,8 +1730,6 @@ def int_riscv_cv_bitmanip_fl1 : ScalarCoreVBitManipGprIntrinsic;
17301730
def int_riscv_cv_bitmanip_clb : ScalarCoreVBitManipGprIntrinsic;
17311731
def int_riscv_cv_bitmanip_cnt : ScalarCoreVBitManipGprIntrinsic;
17321732

1733-
def int_riscv_cv_bitmanip_ror : ScalarCoreVBitManipGprGprIntrinsic;
1734-
17351733
def int_riscv_cv_bitmanip_bitrev
17361734
: Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
17371735
[IntrNoMem, IntrWillReturn, IntrSpeculatable, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>;

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -272,13 +272,15 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
272272
setOperationAction({ISD::SHL_PARTS, ISD::SRL_PARTS, ISD::SRA_PARTS}, XLenVT,
273273
Custom);
274274

275-
if (Subtarget.hasStdExtZbb() || Subtarget.hasStdExtZbkb()) {
276-
if (Subtarget.is64Bit())
277-
setOperationAction({ISD::ROTL, ISD::ROTR}, MVT::i32, Custom);
278-
} else {
279-
setOperationAction({ISD::ROTL, ISD::ROTR}, XLenVT, Expand);
275+
276+
if (!Subtarget.hasExtXcvbitmanip()) {
277+
if (Subtarget.hasStdExtZbb() || Subtarget.hasStdExtZbkb()) {
278+
if (Subtarget.is64Bit())
279+
setOperationAction({ISD::ROTL, ISD::ROTR}, MVT::i32, Custom);
280+
} else {
281+
setOperationAction({ISD::ROTL, ISD::ROTR}, XLenVT, Expand);
282+
}
280283
}
281-
282284
// With Zbb we have an XLen rev8 instruction, but not GREVI. So we'll
283285
// pattern match it directly in isel.
284286
setOperationAction(ISD::BSWAP, XLenVT,

llvm/lib/Target/RISCV/RISCVInstrInfoCOREV.td

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,8 +1222,10 @@ let Predicates = [HasExtXcvbitmanip, IsRV32] in {
12221222
def : PatGpr<int_riscv_cv_bitmanip_clb, CV_CLB>;
12231223
def : PatGpr<int_riscv_cv_bitmanip_cnt, CV_CNT>;
12241224

1225-
def : PatGprGpr<int_riscv_cv_bitmanip_ror, CV_ROR>;
1226-
1225+
//def : PatGprGpr<int_riscv_cv_bitmanip_ror, CV_ROR>;
1226+
def : Pat<(rotr i32:$rs1, i32:$rs2),
1227+
(CV_ROR GPR:$rs1, GPR:$rs2)>;
1228+
12271229
def : Pat<(int_riscv_cv_bitmanip_bitrev GPR:$rs1, cv_tuimm5:$pts, cv_tuimm2:$radix),
12281230
(CV_BITREV GPR:$rs1, cv_tuimm2:$radix, cv_tuimm5:$pts)>;
12291231
}

llvm/test/CodeGen/RISCV/corev/bitmanip.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,14 @@ define i32 @test.cv.cnt(i32 %a) {
155155
ret i32 %1
156156
}
157157

158-
declare i32 @llvm.riscv.cv.bitmanip.ror(i32, i32)
158+
declare i32 @llvm.fshr.i32(i32, i32, i32)
159159

160160
define i32 @test.cv.ror(i32 %a, i32 %b) {
161161
; CHECK-LABEL: test.cv.ror:
162162
; CHECK: # %bb.0:
163163
; CHECK-NEXT: cv.ror a0, a0, a1
164164
; CHECK-NEXT: ret
165-
%1 = call i32 @llvm.riscv.cv.bitmanip.ror(i32 %a, i32 %b)
165+
%1 = call i32 @llvm.fshr.i32(i32 %a, i32 %a , i32 %b)
166166
ret i32 %1
167167
}
168168

0 commit comments

Comments
 (0)