diff --git a/llvm/test/CodeGen/PowerPC/aix32-vector-pair-cc-spills.ll b/llvm/test/CodeGen/PowerPC/aix32-vector-pair-cc-spills.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/aix32-vector-pair-cc-spills.ll @@ -0,0 +1,121 @@ +; RUN: llc -O0 -mtriple=powerpc-ibm-aix-xcoff -mcpu=pwr10 -stop-after=prologepilog -verify-machineinstrs < %s | \ +; RUN: FileCheck --check-prefix=CHECK %s +; RUN: llc -O0 -mtriple=powerpc-ibm-aix-xcoff -mcpu=pwr10 -vec-extabi -stop-after=prologepilog -verify-machineinstrs < %s | \ +; RUN: FileCheck --check-prefix=CHECK-VEXT %s + +; CHECK: name: foo +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v31' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v30' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v29' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v28' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v27' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v26' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v25' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v24' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v23' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v22' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v21' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v20' + +; CHECK-VEXT: name: foo +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v31' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v30' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v29' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v28' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v27' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v26' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v25' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v24' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v23' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v22' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v21' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v20' +define void @foo() { +entry: + call void @bar(i32 0) + ret void +} + +; CHECK: name: spill +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v31' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v30' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v29' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v28' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v27' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v26' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v25' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v24' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v23' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v22' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v21' +; CHECK-NOT: spill-slot +; CHECK-NOT: callee-saved-register: '$v20' + +; CHECK-VEXT: name: spill +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v31' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v30' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v29' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v28' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v27' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v26' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v25' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v24' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v23' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v22' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v21' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v20' +define void @spill() { +entry: + call void asm sideeffect "nop", "~{v20},~{v21},~{v22},~{v23},~{v24},~{v25},~{v26},~{v27},~{v28},~{v29},~{v30},~{v31}"() + call void @bar(i32 0) + ret void +} + +declare void @bar(i32) diff --git a/llvm/test/CodeGen/PowerPC/aix64-vector-pair-cc-spills.ll b/llvm/test/CodeGen/PowerPC/aix64-vector-pair-cc-spills.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/aix64-vector-pair-cc-spills.ll @@ -0,0 +1,183 @@ +; RUN: llc -O0 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr10 -stop-after=prologepilog -verify-machineinstrs < %s | \ +; RUN: FileCheck --check-prefix=CHECK %s +; RUN: llc -O0 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr10 -vec-extabi -stop-after=prologepilog -verify-machineinstrs < %s | \ +; RUN: FileCheck --check-prefix=CHECK-VEXT %s + +; Error pattern will be fixed in https://reviews.llvm.org/D133466 +; CHECK: name: foo +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v31' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v30' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v29' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v28' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v27' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v26' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v25' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v24' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v23' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v22' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v21' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v20' + +; CHECK-VEXT: name: foo +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v31' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v30' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v29' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v28' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v27' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v26' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v25' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v24' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v23' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v22' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v21' +; CHECK-VEXT-NOT: spill-slot +; CHECK-VEXT-NOT: callee-saved-register: '$v20' +define void @foo() { +entry: + call void @bar(i32 0) + ret void +} + +; Error pattern will be fixed in https://reviews.llvm.org/D133466 +; CHECK: name: spill +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v31' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v30' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v29' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v28' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v27' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v26' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v25' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v24' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v23' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v22' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v21' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v20' + +; CHECK-VEXT: name: spill +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v31' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v30' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v29' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v28' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v27' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v26' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v25' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v24' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v23' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v22' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v21' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v20' +define void @spill() { +entry: + call void asm sideeffect "nop", "~{v20},~{v21},~{v22},~{v23},~{v24},~{v25},~{v26},~{v27},~{v28},~{v29},~{v30},~{v31}"() + call void @bar(i32 0) + ret void +} + +; Error pattern will be fixed in https://reviews.llvm.org/D133466 +; CHECK: name: spill2 +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v31' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v30' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v29' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v28' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v27' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v26' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v25' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v24' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v23' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v22' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v21' +; CHECK: spill-slot +; CHECK-NEXT: callee-saved-register: '$v20' + +; CHECK-VEXT: name: spill2 +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v31' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v30' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v29' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v28' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v27' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v26' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v25' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v24' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v23' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v22' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v21' +; CHECK-VEXT: spill-slot +; CHECK-VEXT-NEXT: callee-saved-register: '$v20' +define void @spill2(i64 %p1, i64 %p2, i64 %p3, i64 %p4) { +entry: + call void asm sideeffect "nop", "~{v20},~{v21},~{v22},~{v23},~{v24},~{v25},~{v26},~{v27},~{v28},~{v29},~{v30},~{v31}"() + call anyregcc void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 13, i32 40, ptr inttoptr (i64 0 to ptr), i32 2, i64 %p1, i64 %p2, i64 %p3, i64 %p4) + ret void +} + +declare void @bar(i32) +declare void @llvm.experimental.patchpoint.void(i64, i32, ptr, i32, ...)