// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fno-builtin-memset -fclangir -emit-cir %s -o %t.cir // RUN: FileCheck --input-file=%t.cir %s -check-prefixes=CIR,CIR-STD // // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fno-builtin-memset -fclangir -emit-llvm %s -o %t.ll // RUN: FileCheck --input-file=%t.ll %s -check-prefixes=LLVM,LLVM-STD // // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fno-builtin-memset -emit-llvm %s -o %t.ll // RUN: FileCheck --input-file=%t.ll %s -check-prefixes=LLVM,LLVM-STD // // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fno-builtin-memset -fno-builtin -fclangir -emit-cir %s -o %t.cir // RUN: FileCheck --input-file=%t.cir %s -check-prefixes=CIR,CIR-NB // // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fno-builtin-memset -fno-builtin -fclangir -emit-llvm %s -o %t.ll // RUN: FileCheck --input-file=%t.ll %s -check-prefixes=LLVM,LLVM-NB // // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fno-builtin-memset -fno-builtin -emit-llvm %s -o %t.ll // RUN: FileCheck --input-file=%t.ll %s -check-prefixes=LLVM,LLVM-NB extern "C" { __attribute__((hot)) __attribute__((no_builtin)) void no_builtin() {} // CIR: cir.func{{.*}}@no_builtin() // CIR-SAME: nobuiltins = [] // LLVM: define{{.*}}@no_builtin() #[[NO_BUILTIN_ATTRS:.*]] { __attribute__((cold)) __attribute__((no_builtin("memcpy"))) void no_memcpy() {} // CIR: cir.func{{.*}}@no_memcpy() // CIR-STD-SAME: nobuiltins = ["memset", "memcpy"] // CIR-NB-SAME: nobuiltins = [] // LLVM: define{{.*}}@no_memcpy() #[[NO_MEMCPY_ATTRS:.*]] { __attribute__((noduplicate)) void memset() {} // CIR: cir.func{{.*}}@memset() // CIR-STD-SAME: nobuiltins = ["memset"] // CIR-NB-SAME: nobuiltins = [] // LLVM: define{{.*}}@memset() #[[MEMSET_ATTRS:.*]] { void caller() { no_builtin(); // CIR: cir.call @no_builtin() // CIR-NB-SAME: nobuiltin // CIR-SAME: nobuiltins = [] // LLVM: call void @no_builtin() #[[NO_BUILTIN_CALL_ATTRS:.*]] no_memcpy(); // CIR: cir.call @no_memcpy() // CIR-STD-SAME: nobuiltins = ["memset", "memcpy"] // CIR-NB-SAME: nobuiltin // CIR-NB-SAME: nobuiltins = [] // LLVM: call void @no_memcpy() #[[NO_MEMCPY_CALL_ATTRS:.*]] memset(); // CIR: cir.call @memset() // CIR-STD-SAME: nobuiltins = ["memset"] // CIR-NB-SAME: nobuiltin // CIR-NB-SAME: nobuiltins = [] // LLVM: call void @memset() #[[MEMSET_CALL_ATTRS:.*]] } } // LLVM: attributes #[[NO_BUILTIN_ATTRS]] // LLVM-SAME: no-builtins // LLVM: attributes #[[NO_MEMCPY_ATTRS]] // LLVM-STD-SAME: no-builtin-memcpy // LLVM-STD-SAME: no-builtin-memset // LLVM-NB-SAME: no-builtins // LLVM: attributes #[[MEMSET_ATTRS]] // LLVM-STD-SAME: no-builtin-memset // LLVM-NB-SAME: no-builtins // LLVM: attributes #[[NO_BUILTIN_CALL_ATTRS]] // LLVM-NB-SAME: nobuiltin // LLVM-SAME: no-builtins // LLVM: attributes #[[NO_MEMCPY_CALL_ATTRS]] // LLVM-STD-SAME: no-builtin-memcpy // LLVM-STD-SAME: no-builtin-memset // LLVM-NB-SAME: nobuiltin // LLVM-NB-SAME: no-builtins // LLVM: attributes #[[MEMSET_CALL_ATTRS]] // LLVM-STD-SAME: no-builtin-memset // LLVM-NB-SAME: nobuiltin // LLVM-NB-SAME: no-builtins