Skip to content

Commit 6d65d1b

Browse files
committed
Only flush the part of the trampoline buffer containing instructions
1 parent 63d0daa commit 6d65d1b

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7521,11 +7521,12 @@ SDValue RISCVTargetLowering::lowerINIT_TRAMPOLINE(SDValue Op,
75217521

75227522
SDValue StoreToken = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
75237523

7524-
// Compute end of trampoline.
7525-
SDValue EndOfTrmp = DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
7526-
DAG.getConstant(32, dl, MVT::i64));
7524+
// Compute end of instructions of trampoline.
7525+
SDValue EndOfTrmp =
7526+
DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
7527+
DAG.getConstant(StaticChainOffset, dl, MVT::i64));
75277528

7528-
// Call clear cache on the trampoline buffer.
7529+
// Call clear cache on the trampoline instructions.
75297530
SDValue Chain = DAG.getNode(ISD::CLEAR_CACHE, dl, MVT::Other, StoreToken,
75307531
Trmp, EndOfTrmp);
75317532

llvm/test/CodeGen/RISCV/rv64-trampoline.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ define i64 @test0(i64 %n, ptr %p) nounwind {
2828
; RV64-NEXT: slli a0, a0, 32
2929
; RV64-NEXT: addi a0, a0, 919
3030
; RV64-NEXT: sd a0, 8(sp)
31-
; RV64-NEXT: addi a1, sp, 40
31+
; RV64-NEXT: addi a1, sp, 24
3232
; RV64-NEXT: addi a0, sp, 8
3333
; RV64-NEXT: addi s1, sp, 8
3434
; RV64-NEXT: call __clear_cache
@@ -59,7 +59,7 @@ define i64 @test0(i64 %n, ptr %p) nounwind {
5959
; RV64-LINUX-NEXT: slli a0, a0, 32
6060
; RV64-LINUX-NEXT: addi a0, a0, 919
6161
; RV64-LINUX-NEXT: sd a0, 8(sp)
62-
; RV64-LINUX-NEXT: addi a1, sp, 40
62+
; RV64-LINUX-NEXT: addi a1, sp, 24
6363
; RV64-LINUX-NEXT: addi a0, sp, 8
6464
; RV64-LINUX-NEXT: addi s1, sp, 8
6565
; RV64-LINUX-NEXT: li a2, 0

0 commit comments

Comments
 (0)