You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sandy 99da0f2c72 pl286 release code 4 years ago
..
ABIInfo.h pl286 release code 4 years ago
Address.h pl286 release code 4 years ago
Android.bp pl286 release code 4 years ago
BackendUtil.cpp pl286 release code 4 years ago
CGAtomic.cpp pl286 release code 4 years ago
CGBlocks.cpp pl286 release code 4 years ago
CGBlocks.h pl286 release code 4 years ago
CGBuilder.h pl286 release code 4 years ago
CGBuiltin.cpp pl286 release code 4 years ago
CGCUDABuiltin.cpp pl286 release code 4 years ago
CGCUDANV.cpp pl286 release code 4 years ago
CGCUDARuntime.cpp pl286 release code 4 years ago
CGCUDARuntime.h pl286 release code 4 years ago
CGCXX.cpp pl286 release code 4 years ago
CGCXXABI.cpp pl286 release code 4 years ago
CGCXXABI.h pl286 release code 4 years ago
CGCall.cpp pl286 release code 4 years ago
CGCall.h pl286 release code 4 years ago
CGClass.cpp pl286 release code 4 years ago
CGCleanup.cpp pl286 release code 4 years ago
CGCleanup.h pl286 release code 4 years ago
CGDebugInfo.cpp pl286 release code 4 years ago
CGDebugInfo.h pl286 release code 4 years ago
CGDecl.cpp pl286 release code 4 years ago
CGDeclCXX.cpp pl286 release code 4 years ago
CGException.cpp pl286 release code 4 years ago
CGExpr.cpp pl286 release code 4 years ago
CGExprAgg.cpp pl286 release code 4 years ago
CGExprCXX.cpp pl286 release code 4 years ago
CGExprComplex.cpp pl286 release code 4 years ago
CGExprConstant.cpp pl286 release code 4 years ago
CGExprScalar.cpp pl286 release code 4 years ago
CGLoopInfo.cpp pl286 release code 4 years ago
CGLoopInfo.h pl286 release code 4 years ago
CGObjC.cpp pl286 release code 4 years ago
CGObjCGNU.cpp pl286 release code 4 years ago
CGObjCMac.cpp pl286 release code 4 years ago
CGObjCRuntime.cpp pl286 release code 4 years ago
CGObjCRuntime.h pl286 release code 4 years ago
CGOpenCLRuntime.cpp pl286 release code 4 years ago
CGOpenCLRuntime.h pl286 release code 4 years ago
CGOpenMPRuntime.cpp pl286 release code 4 years ago
CGOpenMPRuntime.h pl286 release code 4 years ago
CGOpenMPRuntimeNVPTX.cpp pl286 release code 4 years ago
CGOpenMPRuntimeNVPTX.h pl286 release code 4 years ago
CGRecordLayout.h pl286 release code 4 years ago
CGRecordLayoutBuilder.cpp pl286 release code 4 years ago
CGStmt.cpp pl286 release code 4 years ago
CGStmtOpenMP.cpp pl286 release code 4 years ago
CGVTT.cpp pl286 release code 4 years ago
CGVTables.cpp pl286 release code 4 years ago
CGVTables.h pl286 release code 4 years ago
CGValue.h pl286 release code 4 years ago
CMakeLists.txt pl286 release code 4 years ago
CodeGenABITypes.cpp pl286 release code 4 years ago
CodeGenAction.cpp pl286 release code 4 years ago
CodeGenFunction.cpp pl286 release code 4 years ago
CodeGenFunction.h pl286 release code 4 years ago
CodeGenModule.cpp pl286 release code 4 years ago
CodeGenModule.h pl286 release code 4 years ago
CodeGenPGO.cpp pl286 release code 4 years ago
CodeGenPGO.h pl286 release code 4 years ago
CodeGenTBAA.cpp pl286 release code 4 years ago
CodeGenTBAA.h pl286 release code 4 years ago
CodeGenTypeCache.h pl286 release code 4 years ago
CodeGenTypes.cpp pl286 release code 4 years ago
CodeGenTypes.h pl286 release code 4 years ago
CoverageMappingGen.cpp pl286 release code 4 years ago
CoverageMappingGen.h pl286 release code 4 years ago
EHScopeStack.h pl286 release code 4 years ago
ItaniumCXXABI.cpp pl286 release code 4 years ago
MicrosoftCXXABI.cpp pl286 release code 4 years ago
ModuleBuilder.cpp pl286 release code 4 years ago
ObjectFilePCHContainerOperations.cpp pl286 release code 4 years ago
README.txt pl286 release code 4 years ago
SanitizerMetadata.cpp pl286 release code 4 years ago
SanitizerMetadata.h pl286 release code 4 years ago
SwiftCallingConv.cpp pl286 release code 4 years ago
TargetInfo.cpp pl286 release code 4 years ago
TargetInfo.h pl286 release code 4 years ago

README.txt

IRgen optimization opportunities.

//===---------------------------------------------------------------------===//

The common pattern of
--
short x; // or char, etc
(x == 10)
--
generates an zext/sext of x which can easily be avoided.

//===---------------------------------------------------------------------===//

Bitfields accesses can be shifted to simplify masking and sign
extension. For example, if the bitfield width is 8 and it is
appropriately aligned then is is a lot shorter to just load the char
directly.

//===---------------------------------------------------------------------===//

It may be worth avoiding creation of alloca's for formal arguments
for the common situation where the argument is never written to or has
its address taken. The idea would be to begin generating code by using
the argument directly and if its address is taken or it is stored to
then generate the alloca and patch up the existing code.

In theory, the same optimization could be a win for block local
variables as long as the declaration dominates all statements in the
block.

NOTE: The main case we care about this for is for -O0 -g compile time
performance, and in that scenario we will need to emit the alloca
anyway currently to emit proper debug info. So this is blocked by
being able to emit debug information which refers to an LLVM
temporary, not an alloca.

//===---------------------------------------------------------------------===//

We should try and avoid generating basic blocks which only contain
jumps. At -O0, this penalizes us all the way from IRgen (malloc &
instruction overhead), all the way down through code generation and
assembly time.

On 176.gcc:expr.ll, it looks like over 12% of basic blocks are just
direct branches!

//===---------------------------------------------------------------------===//