summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/SystemZ/stackmap-shadow-optimization.ll
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2018-03-02 20:39:30 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2018-03-02 20:39:30 +0000
commit5eb64110d241cf2506f54ade3c2693beed42dd8f (patch)
tree7ae56e435fdaeb9440ac5068e1317ad465f6130a /llvm/test/CodeGen/SystemZ/stackmap-shadow-optimization.ll
parent32063888700f57bf57ede4f24efb727fd3f284c5 (diff)
downloadbcm5719-llvm-5eb64110d241cf2506f54ade3c2693beed42dd8f.tar.gz
bcm5719-llvm-5eb64110d241cf2506f54ade3c2693beed42dd8f.zip
[SystemZ] Support stackmaps and patchpoints
This adds back-end support for the @llvm.experimental.stackmap and @llvm.experimental.patchpoint intrinsics. llvm-svn: 326611
Diffstat (limited to 'llvm/test/CodeGen/SystemZ/stackmap-shadow-optimization.ll')
-rw-r--r--llvm/test/CodeGen/SystemZ/stackmap-shadow-optimization.ll27
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/SystemZ/stackmap-shadow-optimization.ll b/llvm/test/CodeGen/SystemZ/stackmap-shadow-optimization.ll
new file mode 100644
index 00000000000..5b828e73eb9
--- /dev/null
+++ b/llvm/test/CodeGen/SystemZ/stackmap-shadow-optimization.ll
@@ -0,0 +1,27 @@
+; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
+
+; Check that the stackmap shadow optimization is only outputting a 2-byte
+; nop here. 8-bytes are requested, but 6 are covered by the code for the call to
+; bar. However, the frame teardown and the return do not count towards the
+; stackmap shadow as the call return counts as a branch target so must flush
+; the shadow.
+; Note that in order for a thread to not return in to the patched space
+; the call must be at the end of the shadow, so the required nop must be
+; before the call, not after.
+define void @shadow_optimization_test() {
+entry:
+; CHECK-LABEL: shadow_optimization_test:
+; CHECK: brasl %r14, bar@PLT
+; CHECK-NEXT: .Ltmp
+; CHECK-NEXT: bcr 0, %r0
+; CHECK-NEXT: brasl %r14, bar@PLT
+; CHECK-NEXT: brasl %r14, bar@PLT
+ call void @bar()
+ tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 8)
+ call void @bar()
+ call void @bar()
+ ret void
+}
+declare void @bar()
+
+declare void @llvm.experimental.stackmap(i64, i32, ...)
OpenPOWER on IntegriCloud