
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
98 lines
1.7 KiB
CMake
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
|
|
)
|