Skip to content

Commit 04aebba

Browse files
committed
Made the following changes
a)make NOP for Prefetch INST. b)updated the testcase.
1 parent 49e4656 commit 04aebba

File tree

3 files changed

+36
-12
lines changed

3 files changed

+36
-12
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -683,9 +683,10 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
683683
if (Subtarget.is64Bit())
684684
setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::i32, Custom);
685685

686-
if (Subtarget.hasStdExtZicbop() || Subtarget.hasVendorXMIPSCBOP()) {
686+
if (Subtarget.hasVendorXMIPSCBOP())
687+
setOperationAction(ISD::PREFETCH, MVT::Other, Custom);
688+
else if (Subtarget.hasStdExtZicbop())
687689
setOperationAction(ISD::PREFETCH, MVT::Other, Legal);
688-
}
689690

690691
if (Subtarget.hasStdExtA()) {
691692
setMaxAtomicSizeInBitsSupported(Subtarget.getXLen());
@@ -6596,6 +6597,17 @@ SDValue RISCVTargetLowering::lowerConstantFP(SDValue Op,
65966597
return DAG.getNode(ISD::FNEG, DL, VT, Const);
65976598
}
65986599

6600+
static SDValue LowerPREFETCH(SDValue Op, const RISCVSubtarget &Subtarget,
6601+
SelectionDAG &DAG) {
6602+
6603+
unsigned IsData = Op.getConstantOperandVal(4);
6604+
6605+
// mips-p8700 we support data prefetch for now.
6606+
if (Subtarget.hasVendorXMIPSCBOP() && !IsData)
6607+
return Op.getOperand(0);
6608+
return Op;
6609+
}
6610+
65996611
static SDValue LowerATOMIC_FENCE(SDValue Op, SelectionDAG &DAG,
66006612
const RISCVSubtarget &Subtarget) {
66016613
SDLoc dl(Op);
@@ -7164,6 +7176,8 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
71647176
switch (Op.getOpcode()) {
71657177
default:
71667178
report_fatal_error("unimplemented operand");
7179+
case ISD::PREFETCH:
7180+
return LowerPREFETCH(Op, Subtarget, DAG);
71677181
case ISD::ATOMIC_FENCE:
71687182
return LowerATOMIC_FENCE(Op, DAG, Subtarget);
71697183
case ISD::GlobalAddress:

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2766,7 +2766,8 @@ bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI,
27662766
CASE_OPERAND_UIMM(6)
27672767
CASE_OPERAND_UIMM(7)
27682768
CASE_OPERAND_UIMM(8)
2769-
CASE_OPERAND_UIMM(10)
2769+
CASE_OPERAND_UIMM(9)
2770+
CASE_OPERAND_UIMM(10)
27702771
CASE_OPERAND_UIMM(12)
27712772
CASE_OPERAND_UIMM(16)
27722773
CASE_OPERAND_UIMM(20)
@@ -2807,9 +2808,6 @@ bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI,
28072808
case RISCVOp::OPERAND_UIMM9_LSB000:
28082809
Ok = isShiftedUInt<6, 3>(Imm);
28092810
break;
2810-
case RISCVOp::OPERAND_UIMM9:
2811-
Ok = isUInt<9>(Imm);
2812-
break;
28132811
case RISCVOp::OPERAND_SIMM10_LSB0000_NONZERO:
28142812
Ok = isShiftedInt<6, 4>(Imm) && (Imm != 0);
28152813
break;

llvm/test/CodeGen/RISCV/xmips-cbop.ll

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
; RUN: llc -mtriple=riscv64 -mattr=+xmipscbop -mattr=+m -verify-machineinstrs < %s \
55
; RUN: | FileCheck %s -check-prefix=RV64XMIPSPREFETCH
66

7-
define void @prefetch_read(ptr noundef %ptr) nounwind {
8-
; RV32XMIPSPREFETCH-LABEL: prefetch_read:
7+
define void @prefetch_data_read(ptr noundef %ptr) nounwind {
8+
; RV32XMIPSPREFETCH-LABEL: prefetch_data_read:
99
; RV32XMIPSPREFETCH: # %bb.0: # %entry
1010
; RV32XMIPSPREFETCH-NEXT: mips.pref 8, 1(a0)
1111
; RV32XMIPSPREFETCH-NEXT: ret
1212
;
13-
; RV64XMIPSPREFETCH-LABEL: prefetch_read:
13+
; RV64XMIPSPREFETCH-LABEL: prefetch_data_read:
1414
; RV64XMIPSPREFETCH: # %bb.0: # %entry
1515
; RV64XMIPSPREFETCH-NEXT: mips.pref 8, 1(a0)
1616
; RV64XMIPSPREFETCH-NEXT: ret
@@ -20,14 +20,14 @@ entry:
2020
ret void
2121
}
2222

23-
define void @prefetch_write(ptr noundef %ptr) nounwind {
24-
; RV32XMIPSPREFETCH-LABEL: prefetch_write:
23+
define void @prefetch_data_write(ptr noundef %ptr) nounwind {
24+
; RV32XMIPSPREFETCH-LABEL: prefetch_data_write:
2525
; RV32XMIPSPREFETCH: # %bb.0:
2626
; RV32XMIPSPREFETCH-NEXT: addi a0, a0, 512
2727
; RV32XMIPSPREFETCH-NEXT: mips.pref 9, 0(a0)
2828
; RV32XMIPSPREFETCH-NEXT: ret
2929
;
30-
; RV64XMIPSPREFETCH-LABEL: prefetch_write:
30+
; RV64XMIPSPREFETCH-LABEL: prefetch_data_write:
3131
; RV64XMIPSPREFETCH: # %bb.0:
3232
; RV64XMIPSPREFETCH-NEXT: addi a0, a0, 512
3333
; RV64XMIPSPREFETCH-NEXT: mips.pref 9, 0(a0)
@@ -37,3 +37,15 @@ define void @prefetch_write(ptr noundef %ptr) nounwind {
3737
ret void
3838
}
3939

40+
define void @prefetch_inst_read(ptr noundef %ptr) nounwind {
41+
; RV32XMIPSPREFETCH-LABEL: prefetch_inst_read:
42+
; RV32XMIPSPREFETCH: # %bb.0:
43+
; RV32XMIPSPREFETCH-NEXT: ret
44+
;
45+
; RV64XMIPSPREFETCH-LABEL: prefetch_inst_read:
46+
; RV64XMIPSPREFETCH: # %bb.0:
47+
; RV64XMIPSPREFETCH-NEXT: ret
48+
%arrayidx = getelementptr inbounds nuw i8, ptr %ptr, i64 512
49+
tail call void @llvm.prefetch.p0(ptr nonnull %arrayidx, i32 0, i32 0, i32 0)
50+
ret void
51+
}

0 commit comments

Comments
 (0)