Let Clang emit `llvm.tbaa.errno` metadata in order to let LLVM carry out optimizations around errno-writing libcalls to, as long as it is proved the involved memory location does not alias `errno`. Previous discussion: https://discourse.llvm.org/t/rfc-modelling-errno-memory-effects/82972.
13 lines
720 B
C
13 lines
720 B
C
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -O0 -o - %s | FileCheck %s --check-prefix=NOTBAA
|
|
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -O1 -o - %s | FileCheck %s --check-prefix=ERRNO-TBAA
|
|
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -x c++ -emit-llvm -O1 -o - %s | FileCheck %s --check-prefix=ERRNO-TBAA
|
|
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -O1 -relaxed-aliasing -o - %s | FileCheck %s --check-prefix=NOSTRICT
|
|
|
|
// Ensure !llvm.errno.tbaa metadata is emitted upon integer accesses, if TBAA is available.
|
|
|
|
int int_access(int *ptr) { return ptr ? *ptr : 0; }
|
|
|
|
// NOTBAA-NOT: !llvm.errno.tbaa
|
|
// ERRNO-TBAA: !llvm.errno.tbaa
|
|
// NOSTRICT-NOT: !llvm.errno.tbaa
|