Skip to content

Commit ceba0c1

Browse files
committed
Add a runtime call for __riscv_flush_icache
This allows us to make the code much simpler.
1 parent 6f5598b commit ceba0c1

File tree

2 files changed

+5
-25
lines changed

2 files changed

+5
-25
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,7 @@ HANDLE_LIBCALL(RETURN_ADDRESS, nullptr)
623623

624624
// Clear cache
625625
HANDLE_LIBCALL(CLEAR_CACHE, "__clear_cache")
626+
HANDLE_LIBCALL(RISCV_FLUSH_ICACHE, "__riscv_flush_icache")
626627

627628
HANDLE_LIBCALL(UNKNOWN_LIBCALL, nullptr)
628629

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7171,31 +7171,10 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
71717171
SDValue RISCVTargetLowering::emitFlushICache(SelectionDAG &DAG, SDValue InChain,
71727172
SDValue Start, SDValue End,
71737173
SDValue Flags, SDLoc DL) const {
7174-
TargetLowering::ArgListTy Args;
7175-
TargetLowering::ArgListEntry Entry;
7176-
7177-
// start
7178-
Entry.Node = Start;
7179-
Entry.Ty = PointerType::getUnqual(*DAG.getContext());
7180-
Args.push_back(Entry);
7181-
7182-
// end
7183-
Entry.Node = End;
7184-
Entry.Ty = PointerType::getUnqual(*DAG.getContext());
7185-
Args.push_back(Entry);
7186-
7187-
// flags
7188-
Entry.Node = Flags;
7189-
Entry.Ty = Type::getIntNTy(*DAG.getContext(), Subtarget.getXLen());
7190-
Args.push_back(Entry);
7191-
7192-
TargetLowering::CallLoweringInfo CLI(DAG);
7193-
EVT Ty = getPointerTy(DAG.getDataLayout());
7194-
CLI.setDebugLoc(DL).setChain(InChain).setLibCallee(
7195-
CallingConv::C, Type::getVoidTy(*DAG.getContext()),
7196-
DAG.getExternalSymbol("__riscv_flush_icache", Ty), std::move(Args));
7197-
7198-
std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI);
7174+
MakeLibCallOptions CallOptions;
7175+
std::pair<SDValue, SDValue> CallResult =
7176+
makeLibCall(DAG, RTLIB::RISCV_FLUSH_ICACHE, MVT::isVoid,
7177+
{Start, End, Flags}, CallOptions, DL, InChain);
71997178

72007179
// This function returns void so only the out chain matters.
72017180
return CallResult.second;

0 commit comments

Comments
 (0)