Skip to content

Commit 5a54950

Browse files
committed
Add align test and fix types
1 parent 68e37b2 commit 5a54950

File tree

3 files changed

+72
-13
lines changed

3 files changed

+72
-13
lines changed

llvm/lib/Target/RISCV/RISCVFrameLowering.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2081,10 +2081,9 @@ TargetStackID::Value RISCVFrameLowering::getStackIDForScalableVectors() const {
20812081
}
20822082

20832083
// Synthesize the probe loop.
2084-
MachineBasicBlock *RISCVFrameLowering::emitStackProbeInline(
2085-
MachineFunction &MF, MachineBasicBlock &MBB,
2086-
MachineBasicBlock::iterator MBBI, DebugLoc DL, Register TargetReg,
2087-
bool IsRVV) const {
2084+
static void emitStackProbeInline(MachineFunction &MF, MachineBasicBlock &MBB,
2085+
MachineBasicBlock::iterator MBBI, DebugLoc DL,
2086+
Register TargetReg, bool IsRVV) {
20882087
assert(TargetReg != RISCV::X2 && "New top of stack cannot already be in SP");
20892088

20902089
auto &Subtarget = MF.getSubtarget<RISCVSubtarget>();
@@ -2152,8 +2151,6 @@ MachineBasicBlock *RISCVFrameLowering::emitStackProbeInline(
21522151
MBB.addSuccessor(LoopTestMBB);
21532152
// Update liveins.
21542153
fullyRecomputeLiveIns({ExitMBB, LoopTestMBB});
2155-
2156-
return ExitMBB;
21572154
}
21582155

21592156
void RISCVFrameLowering::inlineStackProbe(MachineFunction &MF,
@@ -2163,7 +2160,7 @@ void RISCVFrameLowering::inlineStackProbe(MachineFunction &MF,
21632160
// to traverse the block while potentially creating more blocks.
21642161
SmallVector<MachineInstr *, 4> ToReplace;
21652162
for (MachineInstr &MI : MBB) {
2166-
int Opc = MI.getOpcode();
2163+
unsigned Opc = MI.getOpcode();
21672164
if (Opc == RISCV::PROBED_STACKALLOC ||
21682165
Opc == RISCV::PROBED_STACKALLOC_RVV) {
21692166
ToReplace.push_back(&MI);

llvm/lib/Target/RISCV/RISCVFrameLowering.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,6 @@ class RISCVFrameLowering : public TargetFrameLowering {
8383
uint64_t RealStackSize, bool EmitCFI, bool NeedProbe,
8484
uint64_t ProbeSize) const;
8585

86-
MachineBasicBlock *emitStackProbeInline(MachineFunction &MF,
87-
MachineBasicBlock &MBB,
88-
MachineBasicBlock::iterator MBBI,
89-
DebugLoc DL, Register TargetReg,
90-
bool IsRVV) const;
91-
9286
protected:
9387
const RISCVSubtarget &STI;
9488

llvm/test/CodeGen/RISCV/stack-clash-prologue.ll

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,4 +538,72 @@ define i32 @f9(i64 %i) local_unnamed_addr #0 {
538538
ret i32 %c
539539
}
540540

541+
; alloca < probe_size, align < probe_size, alloca + align > probe_size
542+
define i32 @f10(i64 %i) local_unnamed_addr #0 {
543+
; RV64I-LABEL: f10:
544+
; RV64I: # %bb.0:
545+
; RV64I-NEXT: addi sp, sp, -2032
546+
; RV64I-NEXT: .cfi_def_cfa_offset 2032
547+
; RV64I-NEXT: sd ra, 2024(sp) # 8-byte Folded Spill
548+
; RV64I-NEXT: sd s0, 2016(sp) # 8-byte Folded Spill
549+
; RV64I-NEXT: .cfi_offset ra, -8
550+
; RV64I-NEXT: .cfi_offset s0, -16
551+
; RV64I-NEXT: addi s0, sp, 2032
552+
; RV64I-NEXT: .cfi_def_cfa s0, 0
553+
; RV64I-NEXT: addi sp, sp, -2048
554+
; RV64I-NEXT: addi sp, sp, -1040
555+
; RV64I-NEXT: andi sp, sp, -1024
556+
; RV64I-NEXT: sd zero, 0(sp)
557+
; RV64I-NEXT: slli a0, a0, 2
558+
; RV64I-NEXT: addi a1, sp, 1024
559+
; RV64I-NEXT: add a0, a1, a0
560+
; RV64I-NEXT: li a1, 1
561+
; RV64I-NEXT: sw a1, 0(a0)
562+
; RV64I-NEXT: lw a0, 1024(sp)
563+
; RV64I-NEXT: addi sp, s0, -2032
564+
; RV64I-NEXT: .cfi_def_cfa sp, 2032
565+
; RV64I-NEXT: ld ra, 2024(sp) # 8-byte Folded Reload
566+
; RV64I-NEXT: ld s0, 2016(sp) # 8-byte Folded Reload
567+
; RV64I-NEXT: .cfi_restore ra
568+
; RV64I-NEXT: .cfi_restore s0
569+
; RV64I-NEXT: addi sp, sp, 2032
570+
; RV64I-NEXT: .cfi_def_cfa_offset 0
571+
; RV64I-NEXT: ret
572+
;
573+
; RV32I-LABEL: f10:
574+
; RV32I: # %bb.0:
575+
; RV32I-NEXT: addi sp, sp, -2032
576+
; RV32I-NEXT: .cfi_def_cfa_offset 2032
577+
; RV32I-NEXT: sw ra, 2028(sp) # 4-byte Folded Spill
578+
; RV32I-NEXT: sw s0, 2024(sp) # 4-byte Folded Spill
579+
; RV32I-NEXT: .cfi_offset ra, -4
580+
; RV32I-NEXT: .cfi_offset s0, -8
581+
; RV32I-NEXT: addi s0, sp, 2032
582+
; RV32I-NEXT: .cfi_def_cfa s0, 0
583+
; RV32I-NEXT: addi sp, sp, -2048
584+
; RV32I-NEXT: addi sp, sp, -1040
585+
; RV32I-NEXT: andi sp, sp, -1024
586+
; RV32I-NEXT: sw zero, 0(sp)
587+
; RV32I-NEXT: slli a0, a0, 2
588+
; RV32I-NEXT: addi a1, sp, 1024
589+
; RV32I-NEXT: add a0, a1, a0
590+
; RV32I-NEXT: li a1, 1
591+
; RV32I-NEXT: sw a1, 0(a0)
592+
; RV32I-NEXT: lw a0, 1024(sp)
593+
; RV32I-NEXT: addi sp, s0, -2032
594+
; RV32I-NEXT: .cfi_def_cfa sp, 2032
595+
; RV32I-NEXT: lw ra, 2028(sp) # 4-byte Folded Reload
596+
; RV32I-NEXT: lw s0, 2024(sp) # 4-byte Folded Reload
597+
; RV32I-NEXT: .cfi_restore ra
598+
; RV32I-NEXT: .cfi_restore s0
599+
; RV32I-NEXT: addi sp, sp, 2032
600+
; RV32I-NEXT: .cfi_def_cfa_offset 0
601+
; RV32I-NEXT: ret
602+
%a = alloca i32, i32 1000, align 1024
603+
%b = getelementptr inbounds i32, ptr %a, i64 %i
604+
store volatile i32 1, ptr %b
605+
%c = load volatile i32, ptr %a
606+
ret i32 %c
607+
}
608+
541609
attributes #0 = { "probe-stack"="inline-asm" }

0 commit comments

Comments
 (0)