From 5eb64110d241cf2506f54ade3c2693beed42dd8f Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Fri, 2 Mar 2018 20:39:30 +0000 Subject: [SystemZ] Support stackmaps and patchpoints This adds back-end support for the @llvm.experimental.stackmap and @llvm.experimental.patchpoint intrinsics. llvm-svn: 326611 --- llvm/test/CodeGen/SystemZ/stackmap-nops.ll | 140 +++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 llvm/test/CodeGen/SystemZ/stackmap-nops.ll (limited to 'llvm/test/CodeGen/SystemZ/stackmap-nops.ll') diff --git a/llvm/test/CodeGen/SystemZ/stackmap-nops.ll b/llvm/test/CodeGen/SystemZ/stackmap-nops.ll new file mode 100644 index 00000000000..066d7f61324 --- /dev/null +++ b/llvm/test/CodeGen/SystemZ/stackmap-nops.ll @@ -0,0 +1,140 @@ +; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s + +define void @nop_test() { +entry: +; CHECK-LABEL: nop_test: + +; 2 +; CHECK: bcr 0, %r0 + +; 4 +; CHECK: bc 0, 0 + +; 6 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: + +; 8 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: bcr 0, %r0 + +; 10 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: bc 0, 0 + +; 12 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: + +; 14 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: bcr 0, %r0 + +; 16 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: bc 0, 0 + +; 18 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: + +; 20 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: bcr 0, %r0 + +; 22 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: bc 0, 0 + +; 24 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: + +; 26 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: bcr 0, %r0 + +; 28 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: bc 0, 0 + +; 30 +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: +; CHECK: brcl 0, [[LAB:.Ltmp[0-9]+]] +; CHECK-NEXT: [[LAB]]: + + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 2, i32 2) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4, i32 4) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 6, i32 6) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 8, i32 8) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 10, i32 10) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 12, i32 12) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 14, i32 14) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 16) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 18, i32 18) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 20, i32 20) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 22, i32 22) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 24, i32 24) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 26, i32 26) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 28, i32 28) + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 30, i32 30) +; Add an extra stackmap with a zero-length shadow to thwart the shadow +; optimization. This will force all bytes of the previous shadow to be +; padded with nops. + tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 31, i32 0) + ret void +} + +declare void @llvm.experimental.stackmap(i64, i32, ...) -- cgit v1.2.3