Skip to content

Commit 7ee760d

Browse files
committed
Remove unused intrinsics, fix sle[u] issue by zext instruction.
1 parent 1b56a7f commit 7ee760d

File tree

4 files changed

+14
-26
lines changed

4 files changed

+14
-26
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22371,9 +22371,11 @@ Value *CodeGenFunction::EmitRISCVBuiltinExpr(unsigned BuiltinID,
2237122371
return Builder.CreateZExt(Builder.CreateTrunc(Ops[0], Int16Ty), Int32Ty,
2237222372
"exthz");
2237322373
case RISCV::BI__builtin_riscv_cv_alu_slet:
22374-
return Builder.CreateICmpSLE(Ops[0], Ops[1], "sle");
22374+
return Builder.CreateZExt(Builder.CreateICmpSLE(Ops[0], Ops[1]), Int32Ty,
22375+
"sle");
2237522376
case RISCV::BI__builtin_riscv_cv_alu_sletu:
22376-
return Builder.CreateICmpULE(Ops[0], Ops[1], "sleu");
22377+
return Builder.CreateZExt(Builder.CreateICmpULE(Ops[0], Ops[1]), Int32Ty,
22378+
"sleu");
2237722379
case RISCV::BI__builtin_riscv_cv_alu_subN:
2237822380
ID = Intrinsic::riscv_cv_alu_subN;
2237922381
break;

clang/test/CodeGen/RISCV/riscv-xcvalu-c-api.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
// CHECK-NEXT: store i32 [[TMP1]], ptr [[B_ADDR_I]], align 4
2020
// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[A_ADDR_I]], align 4
2121
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[B_ADDR_I]], align 4
22-
// CHECK-NEXT: [[SLE_I:%.*]] = icmp sle i32 [[TMP2]], [[TMP3]]
23-
// CHECK-NEXT: [[CONV_I:%.*]] = sext i1 [[SLE_I]] to i32
22+
// CHECK-NEXT: [[TMP4:%.*]] = icmp sle i32 [[TMP2]], [[TMP3]]
23+
// CHECK-NEXT: [[CONV_I:%.*]] = sext i1 [[TMP4]] to i32
2424
// CHECK-NEXT: ret i32 [[CONV_I]]
2525
//
2626
int test_alu_slet(int32_t a, int32_t b) {
@@ -41,8 +41,8 @@ int test_alu_slet(int32_t a, int32_t b) {
4141
// CHECK-NEXT: store i32 [[TMP1]], ptr [[B_ADDR_I]], align 4
4242
// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[A_ADDR_I]], align 4
4343
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[B_ADDR_I]], align 4
44-
// CHECK-NEXT: [[SLEU_I:%.*]] = icmp ule i32 [[TMP2]], [[TMP3]]
45-
// CHECK-NEXT: [[CONV_I:%.*]] = sext i1 [[SLEU_I]] to i32
44+
// CHECK-NEXT: [[TMP4:%.*]] = icmp ule i32 [[TMP2]], [[TMP3]]
45+
// CHECK-NEXT: [[CONV_I:%.*]] = sext i1 [[TMP4]] to i32
4646
// CHECK-NEXT: ret i32 [[CONV_I]]
4747
//
4848
int test_alu_sletu(uint32_t a, uint32_t b) {

clang/test/CodeGen/RISCV/riscv-xcvalu.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,35 +18,31 @@ int test_abs(int a) {
1818

1919
// CHECK-LABEL: @test_alu_slet(
2020
// CHECK-NEXT: entry:
21-
// CHECK-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
2221
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
2322
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4
2423
// CHECK-NEXT: store i32 [[A:%.*]], ptr [[A_ADDR]], align 4
2524
// CHECK-NEXT: store i32 [[B:%.*]], ptr [[B_ADDR]], align 4
2625
// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
2726
// CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[B_ADDR]], align 4
28-
// CHECK-NEXT: [[SLE:%.*]] = icmp sle i32 [[TMP0]], [[TMP1]]
29-
// CHECK-NEXT: store i1 [[SLE]], ptr [[RETVAL]], align 4
30-
// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[RETVAL]], align 4
31-
// CHECK-NEXT: ret i32 [[TMP2]]
27+
// CHECK-NEXT: [[TMP2:%.*]] = icmp sle i32 [[TMP0]], [[TMP1]]
28+
// CHECK-NEXT: [[SLE:%.*]] = zext i1 [[TMP2]] to i32
29+
// CHECK-NEXT: ret i32 [[SLE]]
3230
//
3331
int test_alu_slet(int32_t a, int32_t b) {
3432
return __builtin_riscv_cv_alu_slet(a, b);
3533
}
3634

3735
// CHECK-LABEL: @test_alu_sletu(
3836
// CHECK-NEXT: entry:
39-
// CHECK-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
4037
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
4138
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4
4239
// CHECK-NEXT: store i32 [[A:%.*]], ptr [[A_ADDR]], align 4
4340
// CHECK-NEXT: store i32 [[B:%.*]], ptr [[B_ADDR]], align 4
4441
// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
4542
// CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[B_ADDR]], align 4
46-
// CHECK-NEXT: [[SLEU:%.*]] = icmp ule i32 [[TMP0]], [[TMP1]]
47-
// CHECK-NEXT: store i1 [[SLEU]], ptr [[RETVAL]], align 4
48-
// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[RETVAL]], align 4
49-
// CHECK-NEXT: ret i32 [[TMP2]]
43+
// CHECK-NEXT: [[TMP2:%.*]] = icmp ule i32 [[TMP0]], [[TMP1]]
44+
// CHECK-NEXT: [[SLEU:%.*]] = zext i1 [[TMP2]] to i32
45+
// CHECK-NEXT: ret i32 [[SLEU]]
5046
//
5147
int test_alu_sletu(uint32_t a, uint32_t b) {
5248
return __builtin_riscv_cv_alu_sletu(a, b);

llvm/include/llvm/IR/IntrinsicsRISCVXCV.td

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,6 @@ let TargetPrefix = "riscv" in {
5959
[IntrNoMem, IntrWillReturn, IntrSpeculatable,
6060
ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>;
6161

62-
def int_riscv_cv_alu_slet : ScalarCoreVAluGprGprIntrinsic;
63-
def int_riscv_cv_alu_sletu : ScalarCoreVAluGprGprIntrinsic;
64-
def int_riscv_cv_alu_min : ScalarCoreVAluGprGprIntrinsic;
65-
def int_riscv_cv_alu_minu : ScalarCoreVAluGprGprIntrinsic;
66-
def int_riscv_cv_alu_max : ScalarCoreVAluGprGprIntrinsic;
67-
def int_riscv_cv_alu_maxu : ScalarCoreVAluGprGprIntrinsic;
68-
def int_riscv_cv_alu_exths : ScalarCoreVAluGprIntrinsic;
69-
def int_riscv_cv_alu_exthz : ScalarCoreVAluGprIntrinsic;
70-
def int_riscv_cv_alu_extbs : ScalarCoreVAluGprIntrinsic;
71-
def int_riscv_cv_alu_extbz : ScalarCoreVAluGprIntrinsic;
7262
def int_riscv_cv_alu_clip : ScalarCoreVAluGprGprIntrinsic;
7363
def int_riscv_cv_alu_clipu : ScalarCoreVAluGprGprIntrinsic;
7464
def int_riscv_cv_alu_addN : ScalarCoreVAluGprGprGprIntrinsic;

0 commit comments

Comments
 (0)