Skip to content

Commit cd75676

Browse files
authored
[RISCV] Prefer li over pli in RISCVMatInt. (llvm#172778)
li is compressible, pli is not.
1 parent 35b2b24 commit cd75676

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

llvm/lib/Target/RISCV/MCTargetDesc/RISCVMatInt.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ static void generateInstSeqImpl(int64_t Val, const MCSubtargetInfo &STI,
7979
}
8080
}
8181

82-
if (STI.hasFeature(RISCV::FeatureStdExtP)) {
82+
if (STI.hasFeature(RISCV::FeatureStdExtP) && !isInt<12>(Val)) {
8383
// Check if the immediate is packed i8 or i10
8484
int32_t Bit63To32 = Val >> 32;
8585
int32_t Bit31To0 = Val;

llvm/test/CodeGen/RISCV/rv32p.ll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,12 @@ define i64 @abs_i64(i64 %x) {
2525
%abs = tail call i64 @llvm.abs.i64(i64 %x, i1 true)
2626
ret i64 %abs
2727
}
28+
29+
; Make sure we prefer li over pli
30+
define i32 @li_imm() {
31+
; CHECK-LABEL: li_imm:
32+
; CHECK: # %bb.0:
33+
; CHECK-NEXT: li a0, -1
34+
; CHECK-NEXT: ret
35+
ret i32 -1
36+
}

llvm/test/CodeGen/RISCV/rv64p.ll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,12 @@ define i64 @pack_i64_imm() {
3838
; CHECK-NEXT: ret
3939
ret i64 u0x0403020104030201
4040
}
41+
42+
; Make sure we prefer li over pli
43+
define i64 @li_imm() {
44+
; CHECK-LABEL: li_imm:
45+
; CHECK: # %bb.0:
46+
; CHECK-NEXT: li a0, -1
47+
; CHECK-NEXT: ret
48+
ret i64 -1
49+
}

0 commit comments

Comments
 (0)