llvm-project/clang/lib/CodeGen
Levy Hsu 8cf54c7ff5 [RISCV] [1/2] Add IR intrinsic for Zbe extension
RV32/64:
bcompress
bdecompress

RV64 ONLY:
bcompressw
bdecompressw

Reviewed By: craig.topper

Differential Revision: https://reviews.llvm.org/D101143
2021-04-25 19:14:34 -07:00
..
ABIInfo.h
Address.h
BackendUtil.cpp [NewPM] Redesign of PreserveCFG Checker 2021-04-06 12:35:49 +07:00
CGAtomic.cpp Let clang atomic builtins fetch add/sub support floating point types 2021-04-06 15:44:00 -04:00
CGBlocks.cpp [clang] NFC: Fix range-based for loop warnings related to decl lookup 2021-04-19 18:31:31 +02:00
CGBlocks.h
CGBuilder.h [OpaquePtrs] Remove some uses of type-less CreateGEP() (NFC) 2021-03-12 21:01:16 +01:00
CGBuiltin.cpp [RISCV] [1/2] Add IR intrinsic for Zbe extension 2021-04-25 19:14:34 -07:00
CGCUDANV.cpp [clang] NFC: Fix range-based for loop warnings related to decl lookup 2021-04-19 18:31:31 +02:00
CGCUDARuntime.cpp
CGCUDARuntime.h [HIP] Emit kernel symbol 2021-03-01 16:31:40 -05:00
CGCXX.cpp [OpaquePtrs] Remove some uses of type-less CreateLoad APIs (NFC) 2021-03-11 14:40:57 +01:00
CGCXXABI.cpp
CGCXXABI.h [clang][aarch64] Precondition isHomogeneousAggregate on isCXX14Aggregate 2021-01-12 19:44:01 +00:00
CGCall.cpp Reland "[Clang] Propagate guaranteed alignment for malloc and others" 2021-04-23 14:05:57 +02:00
CGCall.h
CGClass.cpp Implemented [[clang::musttail]] attribute for guaranteed tail calls. 2021-04-15 17:12:21 -07:00
CGCleanup.cpp
CGCleanup.h
CGCoroutine.cpp Revert "[Coroutines] Set presplit attribute in Clang instead of CoroEarly pass" 2021-04-18 17:22:28 -07:00
CGDebugInfo.cpp Reland [DebugInfo] Fix the mismatching between C++ language tags and Dwarf versions."" 2021-04-12 11:05:55 +00:00
CGDebugInfo.h [Clang][Coroutine][DebugInfo] In c++ coroutine, clang will emit different debug info variables for parameters and move-parameters. 2021-04-12 11:10:47 +08:00
CGDecl.cpp Implemented [[clang::musttail]] attribute for guaranteed tail calls. 2021-04-15 17:12:21 -07:00
CGDeclCXX.cpp [AIX] Support init priority attribute 2021-04-08 15:40:09 -04:00
CGException.cpp [CGBuilder] Remove type-less CreateAlignedLoad() APIs (NFC) 2021-03-11 10:41:23 +01:00
CGExpr.cpp Implemented [[clang::musttail]] attribute for guaranteed tail calls. 2021-04-15 17:12:21 -07:00
CGExprAgg.cpp [Matrix] Implement C-style explicit type conversions for matrix types. 2021-04-10 11:48:41 +01:00
CGExprCXX.cpp Implemented [[clang::musttail]] attribute for guaranteed tail calls. 2021-04-15 17:12:21 -07:00
CGExprComplex.cpp [Matrix] Implement C-style explicit type conversions for matrix types. 2021-04-10 11:48:41 +01:00
CGExprConstant.cpp [Matrix] Implement C-style explicit type conversions for matrix types. 2021-04-10 11:48:41 +01:00
CGExprScalar.cpp [Matrix] Support #pragma clang fp 2021-04-22 11:45:34 +01:00
CGGPUBuiltin.cpp
CGLoopInfo.cpp [Clang] Ensure vector predication loop metadata is always emitted when pragma is specified. 2021-02-13 17:35:54 -06:00
CGLoopInfo.h [SVE] Add support to vectorize_width loop pragma for scalable vectors 2021-01-08 11:37:27 +00:00
CGNonTrivialStruct.cpp [OpaquePtrs] Remove some uses of type-less CreateGEP() (NFC) 2021-03-12 21:01:16 +01:00
CGObjC.cpp [CGBuilder] Remove type-less CreateAlignedLoad() APIs (NFC) 2021-03-11 10:41:23 +01:00
CGObjCGNU.cpp [clang] NFC: Fix range-based for loop warnings related to decl lookup 2021-04-19 18:31:31 +02:00
CGObjCMac.cpp [clang] NFC: Fix range-based for loop warnings related to decl lookup 2021-04-19 18:31:31 +02:00
CGObjCRuntime.cpp [OpaquePtrs] Remove some uses of type-less CreateGEP() (NFC) 2021-03-12 21:01:16 +01:00
CGObjCRuntime.h
CGOpenCLRuntime.cpp
CGOpenCLRuntime.h
CGOpenMPRuntime.cpp [OPENMP]Fix PR49698: OpenMP declare mapper causes segmentation fault. 2021-04-21 10:38:31 -07:00
CGOpenMPRuntime.h [OpenMP] Fix -Wdeprecated-copy 2021-04-23 10:49:19 -07:00
CGOpenMPRuntimeAMDGCN.cpp
CGOpenMPRuntimeAMDGCN.h
CGOpenMPRuntimeGPU.cpp [OpenMP] Simplify offloading parallel call codegen 2021-04-21 18:46:07 -07:00
CGOpenMPRuntimeGPU.h
CGOpenMPRuntimeNVPTX.cpp
CGOpenMPRuntimeNVPTX.h
CGRecordLayout.h
CGRecordLayoutBuilder.cpp [CodeGen] Use getCharWidth() more consistently in CGRecordLowering. NFC 2021-01-22 21:12:17 +01:00
CGStmt.cpp Implemented [[clang::musttail]] attribute for guaranteed tail calls. 2021-04-15 17:12:21 -07:00
CGStmtOpenMP.cpp [OPENMP]Fix PR49115: Incorrect results for scan directive. 2021-04-16 06:25:35 -07:00
CGVTT.cpp
CGVTables.cpp
CGVTables.h
CGValue.h
CMakeLists.txt
CodeGenABITypes.cpp
CodeGenAction.cpp [Diagnose] Unify MCContext and LLVMContext diagnosing 2021-03-01 15:58:37 -08:00
CodeGenFunction.cpp Normalize interaction with boolean attributes 2021-04-17 08:17:33 +02:00
CodeGenFunction.h Implemented [[clang::musttail]] attribute for guaranteed tail calls. 2021-04-15 17:12:21 -07:00
CodeGenModule.cpp [IR][sanitizer] Add module flag "frame-pointer" and set it for cc1 -mframe-pointer={non-leaf,all} 2021-04-22 18:07:30 -07:00
CodeGenModule.h [AIX] Support init priority attribute 2021-04-08 15:40:09 -04:00
CodeGenPGO.cpp Don't emit coverage mapping for excluded functions 2021-02-05 13:03:57 -08:00
CodeGenPGO.h
CodeGenTBAA.cpp
CodeGenTBAA.h
CodeGenTypeCache.h [CGExpr] Use getCharWidth() more consistently in CCGExprConstant. NFC 2021-01-22 21:12:17 +01:00
CodeGenTypes.cpp [Clang][RISCV] Define RISC-V V builtin types 2021-02-18 10:17:31 +08:00
CodeGenTypes.h
ConstantEmitter.h
ConstantInitBuilder.cpp
CoverageMappingGen.cpp Revert "Revert "[Coverage] Emit gap region between statements if first statements contains terminate statements."" 2021-03-04 11:52:43 -08:00
CoverageMappingGen.h [Driver] Rename -fprofile-{prefix-map,compilation-dir} to -fcoverage-{prefix-map,compilation-dir} 2021-02-25 21:40:12 -08:00
EHScopeStack.h Implemented [[clang::musttail]] attribute for guaranteed tail calls. 2021-04-15 17:12:21 -07:00
ItaniumCXXABI.cpp Temporarily revert the code part of D100981 "Delete le32/le64 targets" 2021-04-22 10:18:44 -07:00
MacroPPCallbacks.cpp
MacroPPCallbacks.h
MicrosoftCXXABI.cpp [OpaquePtrs] Remove some uses of type-less CreateGEP() (NFC) 2021-03-12 21:01:16 +01:00
ModuleBuilder.cpp
ObjectFilePCHContainerOperations.cpp
PatternInit.cpp
PatternInit.h
README.txt
SanitizerMetadata.cpp [clang][patch] Inclusive language, modify filename SanitizerBlacklist.h to NoSanitizeList.h 2021-02-22 15:11:37 -05:00
SanitizerMetadata.h
SwiftCallingConv.cpp
TargetInfo.cpp Temporarily revert the code part of D100981 "Delete le32/le64 targets" 2021-04-22 10:18:44 -07:00
TargetInfo.h [CFE, SystemZ] New target hook testFPKind() for checks of FP values. 2021-02-18 12:36:46 -06:00
VarBypassDetector.cpp [clang,NFC] Fix typos in file headers 2021-02-25 12:47:02 -08:00
VarBypassDetector.h [clang,NFC] Fix typos in file headers 2021-02-25 12:47:02 -08:00

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!

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