compiler: use builtin memset for non-pointer memclr

For zeroing a range of memory that doesn't contain pointer, we
can use builtin memset directly.

Corresponding change in the GCC backend:

Index: gcc/go/go-gcc.cc
===================================================================
--- gcc/go/go-gcc.cc	(revision 272617)
+++ gcc/go/go-gcc.cc	(working copy)
@@ -613,6 +613,15 @@
 						NULL_TREE),
 		       false, false);

+  // We use __builtin_memset for zeroing data.
+  this->define_builtin(BUILT_IN_MEMSET, "__builtin_memset", "memset",
+		       build_function_type_list(void_type_node,
+						ptr_type_node,
+						integer_type_node,
+						size_type_node,
+						NULL_TREE),
+		       false, false);
+
   // Used by runtime/internal/sys and math/bits.
   this->define_builtin(BUILT_IN_CTZ, "__builtin_ctz", "ctz",
 		       build_function_type_list(integer_type_node,

Change-Id: Ide6ca5e285545f0d166ff25828fd7c0380767e0c
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/184438
Reviewed-by: Ian Lance Taylor <iant@golang.org>
3 files changed