llvm-project/llvm/lib/Transforms/Utils
Elena Demikhovsky 945b7e5aa6 Adding a width of the GEP index to the Data Layout.
Making a width of GEP Index, which is used for address calculation, to be one of the pointer properties in the Data Layout.
p[address space]:size:memory_size:alignment:pref_alignment:index_size_in_bits.
The index size parameter is optional, if not specified, it is equal to the pointer size.

Till now, the InstCombiner normalized GEPs and extended the Index operand to the pointer width.
It works fine if you can convert pointer to integer for address calculation and all registered targets do this.
But some ISAs have very restricted instruction set for the pointer calculation. During discussions were desided to retrieve information for GEP index from the Data Layout.
http://lists.llvm.org/pipermail/llvm-dev/2018-January/120416.html

I added an interface to the Data Layout and I changed the InstCombiner and some other passes to take the Index width into account.
This change does not affect any in-tree target. I added tests to cover data layouts with explicitly specified index size.

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

llvm-svn: 325102
2018-02-14 06:58:08 +00:00
..
ASanStackFrameLayout.cpp [asan] Add a full redzone after every stack variable 2017-11-18 01:13:18 +00:00
AddDiscriminators.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-17 21:27:42 +00:00
BasicBlockUtils.cpp Utils: Fix DomTree update for entry block 2018-01-31 22:54:37 +00:00
BreakCriticalEdges.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
BuildLibCalls.cpp [InstCombine] Missed optimization in math expression: sin(x) / cos(x) => tan(x) 2018-01-11 06:33:00 +00:00
BypassSlowDivision.cpp [BypassSlowDivision] Improve our handling of divisions by constants 2017-12-04 19:21:58 +00:00
CMakeLists.txt [PGO] Make indirect call promotion a utility 2017-12-06 21:22:54 +00:00
CallPromotionUtils.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
CloneFunction.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
CloneModule.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00
CodeExtractor.cpp Add a ProfileCount class to represent entry counts. 2018-01-17 22:24:23 +00:00
CtorUtils.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00
DemoteRegToStack.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
EntryExitInstrumenter.cpp EntryExitInstrumenter: set DebugLocs on the inserted call instructions (PR35412) 2017-11-28 18:44:26 +00:00
EscapeEnumerator.cpp Suppress all uses of LLVM_END_WITH_NULL. NFC. 2017-05-09 19:31:13 +00:00
Evaluator.cpp Add an @llvm.sideeffect intrinsic 2017-11-08 21:59:51 +00:00
FlattenCFG.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-26 00:55:39 +00:00
FunctionComparator.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-11 21:41:43 +00:00
FunctionImportUtils.cpp LTO: Include dso-local bit in ThinLTO cache key. 2018-02-05 17:17:51 +00:00
GlobalStatus.cpp [GlobalOpt] Fix exponential compile-time with selects. 2018-01-31 20:42:25 +00:00
ImportedFunctionsInliningStatistics.cpp [ThinLTO] Correct counting of functions in inliner stats 2017-03-24 17:59:06 +00:00
InlineFunction.cpp [InlineFunction] Update deprecated use of IRBuilder CreateMemCpy (NFC) 2018-02-06 19:14:31 +00:00
InstructionNamer.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
IntegerDivision.cpp
LCSSA.cpp Revert r323472 "[Debug] Add dbg.value intrinsics for PHIs created during LCSSA." 2018-02-05 16:10:42 +00:00
LLVMBuild.txt
LibCallsShrinkWrap.cpp [LibCallsShrinkWrap] Remove an unnecessary class member variable. 2017-04-26 21:28:40 +00:00
Local.cpp Adding a width of the GEP index to the Data Layout. 2018-02-14 06:58:08 +00:00
LoopSimplify.cpp Use a BumpPtrAllocator for Loop objects 2017-09-28 02:45:42 +00:00
LoopUnroll.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
LoopUnrollPeel.cpp [NFC] fix trivial typos in comments 2018-01-19 10:55:29 +00:00
LoopUnrollRuntime.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
LoopUtils.cpp [LV] Use Demanded Bits and ValueTracking for reduction type-shrinking 2018-02-04 15:42:24 +00:00
LoopVersioning.cpp
LowerInvoke.cpp
LowerMemIntrinsics.cpp [LowerMemIntrinsics] Update uses of deprecated MemIntrinsic::getAlignment API (NFC) 2018-02-05 22:23:58 +00:00
LowerSwitch.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-21 00:57:46 +00:00
Mem2Reg.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-26 00:55:39 +00:00
MetaRenamer.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-27 01:09:08 +00:00
ModuleUtils.cpp ModuleUtils: Stop using comdat members to generate unique module ids. 2017-10-05 21:54:53 +00:00
NameAnonGlobals.cpp
OrderedInstructions.cpp Remove unneeded else from OrderedInstructions::dominates. 2017-06-29 17:01:03 +00:00
PredicateInfo.cpp [PredicateInfo] Add comment about why we require stable sort 2017-11-17 00:43:24 +00:00
PromoteMemoryToRegister.cpp This reverts commit r319096 and r319097. 2017-11-28 01:25:38 +00:00
SSAUpdater.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
SanitizerStats.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
SimplifyCFG.cpp [SimplifyCFG] Re-apply Relax restriction for folding unconditional branches 2018-02-08 07:16:29 +00:00
SimplifyIndVar.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00
SimplifyInstructions.cpp Rename OptimizationDiagnosticInfo.* to OptimizationRemarkEmitter.* 2017-10-09 23:19:02 +00:00
SimplifyLibCalls.cpp [SimplifyLibCalls] Update from deprecated IRBuilder API for creating memory intrinsics (NFC) 2018-02-05 21:23:22 +00:00
SplitModule.cpp Fix more inconsistent line endings. NFC. 2017-12-18 19:46:56 +00:00
StripGCRelocates.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
StripNonLineTableDebugInfo.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
SymbolRewriter.cpp Mark all library options as hidden. 2017-12-01 00:53:10 +00:00
UnifyFunctionExitNodes.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00
Utils.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
VNCoercion.cpp [IR] Make use of Type::isPtrOrPtrVectorTy/isIntOrIntVectorTy/isFPOrFPVectorTy to shorten code. NFC 2017-07-09 07:04:00 +00:00
ValueMapper.cpp Teach ValueMapper to use ODR uniqued types when available 2018-01-30 20:16:32 +00:00