[VE] Support STACKSAVE and STACKRESTORE

Change to use default expanded code.  Add regression tests also.

Reviewed By: simoll

Differential Revision: https://reviews.llvm.org/D93539
This commit is contained in:
Kazushi (Jam) Marukawa 2020-12-18 23:21:10 +09:00
parent d99e4a4840
commit 5e273b845b
2 changed files with 30 additions and 0 deletions

View File

@ -135,6 +135,10 @@ void VETargetLowering::initSPUActions() {
/// Stack {
setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i32, Custom);
setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i64, Custom);
// Use the default implementation.
setOperationAction(ISD::STACKSAVE, MVT::Other, Expand);
setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
/// } Stack
/// Branch {

View File

@ -0,0 +1,26 @@
; RUN: llc < %s -mtriple=ve | FileCheck %s
; Function Attrs: noinline nounwind optnone
define i8* @stacksave() {
; CHECK-LABEL: stacksave:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: or %s0, 0, %s11
; CHECK-NEXT: or %s11, 0, %s9
%ret = call i8* @llvm.stacksave()
ret i8* %ret
}
; Function Attrs: noinline nounwind optnone
define void @stackrestore(i8* %ptr) {
; CHECK-LABEL: stackrestore:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: or %s11, 0, %s0
; CHECK-NEXT: or %s11, 0, %s9
call void @llvm.stackrestore(i8* %ptr)
ret void
}
; Function Attrs: nounwind
declare i8* @llvm.stacksave()
; Function Attrs: nounwind
declare void @llvm.stackrestore(i8*)