summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/WebAssembly
diff options
context:
space:
mode:
authorDan Gohman <dan433584@gmail.com>2016-02-16 23:48:04 +0000
committerDan Gohman <dan433584@gmail.com>2016-02-16 23:48:04 +0000
commit94c6566055b856c9580a2b27bf4dd3aa8ac61482 (patch)
treeea3a0b8565018a7b4d96ada0c27b1b2806f86b21 /llvm/test/CodeGen/WebAssembly
parent0520929231d9517a13ec66da6675485aa649b312 (diff)
downloadbcm5719-llvm-94c6566055b856c9580a2b27bf4dd3aa8ac61482.tar.gz
bcm5719-llvm-94c6566055b856c9580a2b27bf4dd3aa8ac61482.zip
[WebAssembly] Implement __builtin_frame_address.
Differential Revision: http://reviews.llvm.org/D17307 llvm-svn: 261032
Diffstat (limited to 'llvm/test/CodeGen/WebAssembly')
-rw-r--r--llvm/test/CodeGen/WebAssembly/userstack.ll31
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/userstack.ll b/llvm/test/CodeGen/WebAssembly/userstack.ll
index b5e711f6efb..203250717f5 100644
--- a/llvm/test/CodeGen/WebAssembly/userstack.ll
+++ b/llvm/test/CodeGen/WebAssembly/userstack.ll
@@ -181,4 +181,35 @@ exit:
ret void
}
+declare void @use_i8_star(i8*)
+declare i8* @llvm.frameaddress(i32)
+
+; Test __builtin_frame_address(0).
+; TODO: When the prolog/epilog sequences are optimized, refine these checks to
+; be more specific.
+
+; CHECK-LABEL: frameaddress_0:
+; CHECK: __stack_pointer
+; CHECK: load
+; CHECK: call use_i8_star
+; CHECK: __stack_pointer
+; CHECK: store
+define void @frameaddress_0() {
+ %t = call i8* @llvm.frameaddress(i32 0)
+ call void @use_i8_star(i8* %t)
+ ret void
+}
+
+; Test __builtin_frame_address(1).
+
+; CHECK-LABEL: frameaddress_1:
+; CHECK-NEXT: i32.const $push0=, 0{{$}}
+; CHECK-NEXT: call use_i8_star@FUNCTION, $pop0{{$}}
+; CHECK-NEXT: return{{$}}
+define void @frameaddress_1() {
+ %t = call i8* @llvm.frameaddress(i32 1)
+ call void @use_i8_star(i8* %t)
+ ret void
+}
+
; TODO: test over-aligned alloca
OpenPOWER on IntegriCloud