[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-06 Thread Sam Elliott via cfe-commits
https://github.com/lenary closed https://github.com/llvm/llvm-project/pull/129957 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Craig Topper via cfe-commits
https://github.com/topperc approved this pull request. LGTM https://github.com/llvm/llvm-project/pull/129957 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Craig Topper via cfe-commits
@@ -382,6 +410,10 @@ void RISCVFrameLowering::determineFrameLayout(MachineFunction &MF) const { // Get the number of bytes to allocate from the FrameInfo. uint64_t FrameSize = MFI.getStackSize(); + // QCI Interrupts use at least 96 bytes of stack space + if (RVFI->useQC

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Sam Elliott via cfe-commits
@@ -382,6 +410,10 @@ void RISCVFrameLowering::determineFrameLayout(MachineFunction &MF) const { // Get the number of bytes to allocate from the FrameInfo. uint64_t FrameSize = MFI.getStackSize(); + // QCI Interrupts use at least 96 bytes of stack space + if (RVFI->useQC

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Sam Elliott via cfe-commits
@@ -2116,6 +2214,11 @@ bool RISCVFrameLowering::canUseAsEpilogue(const MachineBasicBlock &MBB) const { MachineBasicBlock *TmpMBB = const_cast(&MBB); const auto *RVFI = MF->getInfo(); + // Qe do not want QC.C.MILEAVERET to be subject to shrink-wrapping - it must -

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Sam Elliott via cfe-commits
@@ -2828,8 +2828,17 @@ targets. This attribute may be attached to a function definition and instructs the backend to generate appropriate function entry/exit code so that it can be used directly as an interrupt service routine. -Permissible values for this parameter are ``sup

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Craig Topper via cfe-commits
@@ -2116,6 +2214,11 @@ bool RISCVFrameLowering::canUseAsEpilogue(const MachineBasicBlock &MBB) const { MachineBasicBlock *TmpMBB = const_cast(&MBB); const auto *RVFI = MF->getInfo(); + // Qe do not want QC.C.MILEAVERET to be subject to shrink-wrapping - it must -

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Craig Topper via cfe-commits
@@ -1892,9 +1970,23 @@ bool RISCVFrameLowering::spillCalleeSavedRegisters( if (MI != MBB.end() && !MI->isDebugInstr()) DL = MI->getDebugLoc(); - // Emit CM.PUSH with base SPimm & evaluate Push stack RISCVMachineFunctionInfo *RVFI = MF->getInfo(); - if (RVFI->isPusha

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Sam Elliott via cfe-commits
@@ -20831,9 +20831,20 @@ SDValue RISCVTargetLowering::LowerFormalArguments( StringRef Kind = MF.getFunction().getFnAttribute("interrupt").getValueAsString(); -if (!(Kind == "supervisor" || Kind == "machine")) +constexpr StringRef SupportedInterruptKinds[] = {

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Sam Elliott via cfe-commits
@@ -1892,9 +1970,23 @@ bool RISCVFrameLowering::spillCalleeSavedRegisters( if (MI != MBB.end() && !MI->isDebugInstr()) DL = MI->getDebugLoc(); - // Emit CM.PUSH with base SPimm & evaluate Push stack RISCVMachineFunctionInfo *RVFI = MF->getInfo(); - if (RVFI->isPusha

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Craig Topper via cfe-commits
@@ -20831,9 +20831,20 @@ SDValue RISCVTargetLowering::LowerFormalArguments( StringRef Kind = MF.getFunction().getFnAttribute("interrupt").getValueAsString(); -if (!(Kind == "supervisor" || Kind == "machine")) +constexpr StringRef SupportedInterruptKinds[] = {

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread Craig Topper via cfe-commits
@@ -2828,8 +2828,17 @@ targets. This attribute may be attached to a function definition and instructs the backend to generate appropriate function entry/exit code so that it can be used directly as an interrupt service routine. -Permissible values for this parameter are ``sup

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread via cfe-commits
llvmbot wrote: @llvm/pr-subscribers-clang Author: Sam Elliott (lenary) Changes This change adds support for `qci-nest` and `qci-nonest` interrupt attribute values. Both of these are machine-mode interrupts, which use instructions in Xqciint to push and pop A- and T-registers (and a few o

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread via cfe-commits
llvmbot wrote: @llvm/pr-subscribers-clang-codegen Author: Sam Elliott (lenary) Changes This change adds support for `qci-nest` and `qci-nonest` interrupt attribute values. Both of these are machine-mode interrupts, which use instructions in Xqciint to push and pop A- and T-registers (and

[clang] [llvm] [RISCV] QCI Interrupt Support (PR #129957)

2025-03-05 Thread via cfe-commits
llvmbot wrote: @llvm/pr-subscribers-backend-risc-v Author: Sam Elliott (lenary) Changes This change adds support for `qci-nest` and `qci-nonest` interrupt attribute values. Both of these are machine-mode interrupts, which use instructions in Xqciint to push and pop A- and T-registers (an