llvm-project/clang/lib/CodeGen/CMakeLists.txt
Vitaly Buka 64c80b4e39 [CodeGen] Don't emit lifetime intrinsics for some local variables
Summary:
Current generation of lifetime intrinsics does not handle cases like:

```
  {
    char x;
  l1:
    bar(&x, 1);
  }
  goto l1;

```
We will get code like this:

```
  %x = alloca i8, align 1
  call void @llvm.lifetime.start(i64 1, i8* nonnull %x)
  br label %l1
l1:
  %call = call i32 @bar(i8* nonnull %x, i32 1)
  call void @llvm.lifetime.end(i64 1, i8* nonnull %x)
  br label %l1
```

So the second time bar was called for x which is marked as dead.
Lifetime markers here are misleading so it's better to remove them at all.
This type of bypasses are rare, e.g. code detects just 8 functions building
clang (2329 targets).

PR28267

Reviewers: eugenis

Subscribers: beanz, mgorny, cfe-commits

Differential Revision: https://reviews.llvm.org/D24693

llvm-svn: 285176
2016-10-26 05:42:30 +00:00

98 lines
1.7 KiB
CMake

set(LLVM_LINK_COMPONENTS
Analysis
BitReader
BitWriter
Core
Coroutines
Coverage
IPO
IRReader
InstCombine
Instrumentation
LTO
Linker
MC
ObjCARCOpts
Object
ProfileData
ScalarOpts
Support
Target
TransformUtils
)
# In a standard Clang+LLVM build, we need to generate intrinsics before
# building codegen. In a standalone build, LLVM is already built and we don't
# need this dependency. Furthermore, LLVM doesn't export it so we can't have
# this dependency.
set(codegen_deps intrinsics_gen)
if (CLANG_BUILT_STANDALONE)
set(codegen_deps)
endif()
add_clang_library(clangCodeGen
BackendUtil.cpp
CGAtomic.cpp
CGBlocks.cpp
CGBuiltin.cpp
CGCUDABuiltin.cpp
CGCUDANV.cpp
CGCUDARuntime.cpp
CGCXX.cpp
CGCXXABI.cpp
CGCall.cpp
CGClass.cpp
CGCleanup.cpp
CGCoroutine.cpp
CGDebugInfo.cpp
CGDecl.cpp
CGDeclCXX.cpp
CGException.cpp
CGExpr.cpp
CGExprAgg.cpp
CGExprCXX.cpp
CGExprComplex.cpp
CGExprConstant.cpp
CGExprScalar.cpp
CGLoopInfo.cpp
CGObjC.cpp
CGObjCGNU.cpp
CGObjCMac.cpp
CGObjCRuntime.cpp
CGOpenCLRuntime.cpp
CGOpenMPRuntime.cpp
CGOpenMPRuntimeNVPTX.cpp
CGRecordLayoutBuilder.cpp
CGStmt.cpp
CGStmtOpenMP.cpp
CGVTT.cpp
CGVTables.cpp
CodeGenABITypes.cpp
CodeGenAction.cpp
CodeGenFunction.cpp
CodeGenModule.cpp
CodeGenPGO.cpp
CodeGenTBAA.cpp
CodeGenTypes.cpp
CoverageMappingGen.cpp
ItaniumCXXABI.cpp
MicrosoftCXXABI.cpp
ModuleBuilder.cpp
ObjectFilePCHContainerOperations.cpp
SanitizerMetadata.cpp
SwiftCallingConv.cpp
TargetInfo.cpp
VarBypassDetector.cpp
DEPENDS
${codegen_deps}
LINK_LIBS
clangAnalysis
clangAST
clangAnalysis
clangBasic
clangFrontend
clangLex
)