Skip to content

Commit 2cbd8cc

Browse files
committed
Only flush the part of the trampoline buffer containing instructions
1 parent 0852715 commit 2cbd8cc

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
@@ -7236,11 +7236,12 @@ SDValue RISCVTargetLowering::lowerINIT_TRAMPOLINE(SDValue Op,
72367236

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

7239-
// Compute end of trampoline.
7240-
SDValue EndOfTrmp = DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
7241-
DAG.getConstant(32, dl, MVT::i64));
7239+
// Compute end of instructions of trampoline.
7240+
SDValue EndOfTrmp =
7241+
DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
7242+
DAG.getConstant(StaticChainOffset, dl, MVT::i64));
72427243

7243-
// Call clear cache on the trampoline buffer.
7244+
// Call clear cache on the trampoline instructions.
72447245
SDValue Chain = DAG.getNode(ISD::CLEAR_CACHE, dl, MVT::Other, StoreToken,
72457246
Trmp, EndOfTrmp);
72467247

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)