]> granicus.if.org Git - clang/commitdiff
[WebAssembly] Add a __builtin_wasm_resize_memory() intrinsic.
authorDan Gohman <dan433584@gmail.com>
Fri, 2 Oct 2015 20:20:01 +0000 (20:20 +0000)
committerDan Gohman <dan433584@gmail.com>
Fri, 2 Oct 2015 20:20:01 +0000 (20:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249179 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/BuiltinsWebAssembly.def
lib/CodeGen/CGBuiltin.cpp
test/CodeGen/builtins-wasm.c

index 060d5548e4f9c25f8d4bafd82f827db1a1cd68ba..2f48d5d2b19426320082d8372aa36f09d6eb5189 100644 (file)
@@ -18,5 +18,6 @@
 
 BUILTIN(__builtin_wasm_page_size, "z", "nc")
 BUILTIN(__builtin_wasm_memory_size, "z", "nc")
+BUILTIN(__builtin_wasm_resize_memory, "vz", "n")
 
 #undef BUILTIN
index ff2cef9b02c6a6a470d608fbedfd5285206ef855..1de59d568d20a0051fb8d09d10d9cc320a837e01 100644 (file)
@@ -7053,6 +7053,11 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_memory_size, ResultType);
     return Builder.CreateCall(Callee);
   }
+  case WebAssembly::BI__builtin_wasm_resize_memory: {
+    Value *X = EmitScalarExpr(E->getArg(0));
+    Value *Callee = CGM.getIntrinsic(Intrinsic::wasm_resize_memory, X->getType());
+    return Builder.CreateCall(Callee, X);
+  }
 
   default:
     return nullptr;
index d8da8d73a27c6e39b5fb4467cf8a1660bb90646c..2de08c71c8334f2a77551548e022fc1e46454905 100644 (file)
@@ -14,3 +14,9 @@ __SIZE_TYPE__ f1(void) {
 // WEBASSEMBLY32: call {{i.*}} @llvm.wasm.memory.size.i32()
 // WEBASSEMBLY64: call {{i.*}} @llvm.wasm.memory.size.i64()
 }
+
+void f2(long delta) {
+  __builtin_wasm_resize_memory(delta);
+// WEBASSEMBLY32: call void @llvm.wasm.resize.memory.i32(i32 %{{.*}})
+// WEBASSEMBLY64: call void @llvm.wasm.resize.memory.i64(i64 %{{.*}})
+}