diff options
author | Dan Gohman <dan433584@gmail.com> | 2016-02-16 23:48:04 +0000 |
---|---|---|
committer | Dan Gohman <dan433584@gmail.com> | 2016-02-16 23:48:04 +0000 |
commit | 94c6566055b856c9580a2b27bf4dd3aa8ac61482 (patch) | |
tree | ea3a0b8565018a7b4d96ada0c27b1b2806f86b21 /llvm/test/CodeGen/WebAssembly | |
parent | 0520929231d9517a13ec66da6675485aa649b312 (diff) | |
download | bcm5719-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.ll | 31 |
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 |