builtin-memfns.c revision d6e73569ccf09369f9bd2021d53c88e7bded06e3
13ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang// RUN: %clang_cc1 -triple i386-pc-linux-gnu -emit-llvm < %s| FileCheck %s
21caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar
3a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// CHECK: @test1
43ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang// CHECK: call void @llvm.memset.p0i8.i32
53ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang// CHECK: call void @llvm.memset.p0i8.i32
63ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang// CHECK: call void @llvm.memcpy.p0i8.p0i8.i32
73ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang// CHECK: call void @llvm.memmove.p0i8.p0i8.i32
83ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang// CHECK-NOT: __builtin
93ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang// CHECK: ret
10a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattnerint test1(int argc, char **argv) {
111caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  unsigned char a = 0x11223344;
121caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  unsigned char b = 0x11223344;
131caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  __builtin_bzero(&a, sizeof(a));
141caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  __builtin_memset(&a, 0, sizeof(a));
151caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  __builtin_memcpy(&a, &b, sizeof(a));
161caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  __builtin_memmove(&a, &b, sizeof(a));
171caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  return 0;
181caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar}
19a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
20a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// rdar://9289468
21a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
22a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// CHECK: @test2
23a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// CHECK: call void @llvm.memcpy.p0i8.p0i8.i32
24a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattnerchar* test2(char* a, char* b) {
25a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  return __builtin_memcpy(a, b, 4);
26a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner}
27a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
28a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// CHECK: @test3
29a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// CHECK: call void @llvm.memset
30a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattnervoid test3(char *P) {
31a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  __builtin___memset_chk(P, 42, 128, 128);
32a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner}
33a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
34a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// CHECK: @test4
35a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// CHECK: call void @llvm.memcpy
36a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattnervoid test4(char *P, char *Q) {
37a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  __builtin___memcpy_chk(P, Q, 128, 128);
38a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner}
39a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
40a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// CHECK: @test5
41a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner// CHECK: call void @llvm.memmove
42a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattnervoid test5(char *P, char *Q) {
43a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  __builtin___memmove_chk(P, Q, 128, 128);
44a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner}
4542f681b83378de1541919c7f72e7555e35158867Chris Lattner
4642f681b83378de1541919c7f72e7555e35158867Chris Lattner// CHECK: @test6
4742f681b83378de1541919c7f72e7555e35158867Chris Lattner// CHECK: call void @llvm.memcpy
4842f681b83378de1541919c7f72e7555e35158867Chris Lattnerint test6(char *X) {
4942f681b83378de1541919c7f72e7555e35158867Chris Lattner  return __builtin___memcpy_chk(X, X, 42, 42) != 0;
5042f681b83378de1541919c7f72e7555e35158867Chris Lattner}
51d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner
52d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner// CHECK: @test7
53d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner// PR12094
54d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattnerint test7(int *p) {
55d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner  // CHECK: call void @llvm.memset{{.*}}256, i32 4, i1 false)
56d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner  __builtin_memset(p, 0, 256);  // Should be alignment = 4
57d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner  struct snd_pcm_hw_params_t* hwparams;  // incomplete type.
58d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner
59d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner  __builtin_memset(hwparams, 0, 256);  // No crash alignment = 1
60d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner  // CHECK: call void @llvm.memset{{.*}}256, i32 1, i1 false)
61d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner}
62