<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 4, 2015 at 1:02 PM, Mehdi Amini <span dir="ltr"><<a href="mailto:mehdi.amini@apple.com" target="_blank">mehdi.amini@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
> On Mar 4, 2015, at 12:41 PM, H.J. Lu <<a href="mailto:hjl.tools@gmail.com">hjl.tools@gmail.com</a>> wrote:<br>
><br>
> I got<br>
><br>
> lib/Transforms/Instrumentation/DataFlowSanitizer.cpp:593:  Blank line<br>
> at the start of a code block.  Is this needed?<br>
> [whitespace/blank_line] [2]<br>
> projects/compiler-rt/lib/CMakeFiles/SanitizerLintCheck.dir/build.make:49:<br>
> recipe for target<br>
> 'projects/compiler-rt/lib/CMakeFiles/SanitizerLintCheck' failed<br>
> gmake[6]: *** [projects/compiler-rt/lib/CMakeFiles/SanitizerLintCheck] Error 1<br>
<br>
Reid fixed it in the meantime.<br>
<br>
Thanks for reporting it though.<br>
<br>
How do I run these lint test, I need to get this part of my workflow.<br>
I haven’t seen any reference to lint in the programmer manual or the other documentations on <a href="http://llvm.org" target="_blank">llvm.org</a></blockquote><div><br></div><div>These failures should no longer be present after r231289.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
Thanks,<br>
<br>
Mehdi<br>
<br>
<br>
<br>
<br>
><br>
> On Wed, Mar 4, 2015 at 10:43 AM, Mehdi Amini <<a href="mailto:mehdi.amini@apple.com">mehdi.amini@apple.com</a>> wrote:<br>
>> Author: mehdi_amini<br>
>> Date: Wed Mar  4 12:43:29 2015<br>
>> New Revision: 231270<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=231270&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=231270&view=rev</a><br>
>> Log:<br>
>> Make DataLayout Non-Optional in the Module<br>
>><br>
>> Summary:<br>
>> DataLayout keeps the string used for its creation.<br>
>><br>
>> As a side effect it is no longer needed in the Module.<br>
>> This is "almost" NFC, the string is no longer<br>
>> canonicalized, you can't rely on two "equals" DataLayout<br>
>> having the same string returned by getStringRepresentation().<br>
>><br>
>> Get rid of DataLayoutPass: the DataLayout is in the Module<br>
>><br>
>> The DataLayout is "per-module", let's enforce this by not<br>
>> duplicating it more than necessary.<br>
>> One more step toward non-optionality of the DataLayout in the<br>
>> module.<br>
>><br>
>> Make DataLayout Non-Optional in the Module<br>
>><br>
>> Module->getDataLayout() will never returns nullptr anymore.<br>
>><br>
>> Reviewers: echristo<br>
>><br>
>> Subscribers: resistor, llvm-commits, jholewinski<br>
>><br>
>> Differential Revision: <a href="http://reviews.llvm.org/D7992" target="_blank">http://reviews.llvm.org/D7992</a><br>
>><br>
>> From: Mehdi Amini <<a href="mailto:mehdi.amini@apple.com">mehdi.amini@apple.com</a>><br>
>><br>
>> Removed:<br>
>>    llvm/trunk/test/Linker/comdat3.ll<br>
>>    llvm/trunk/test/Transforms/Inline/alloca-merge-align-nodl.ll<br>
>>    llvm/trunk/test/Transforms/InstCombine/2012-09-24-MemcpyFromGlobalCrash.ll<br>
>>    llvm/trunk/test/Transforms/Scalarizer/no-data-layout.ll<br>
>> Modified:<br>
>>    llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp<br>
>>    llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp<br>
>>    llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp<br>
>>    llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp<br>
>>    llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp<br>
>>    llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp<br>
>>    llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp<br>
>>    llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp<br>
>>    llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp<br>
>>    llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp<br>
>>    llvm/trunk/include/llvm/Analysis/AliasAnalysis.h<br>
>>    llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h<br>
>>    llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h<br>
>>    llvm/trunk/include/llvm/IR/DataLayout.h<br>
>>    llvm/trunk/include/llvm/IR/Module.h<br>
>>    llvm/trunk/include/llvm/Transforms/Utils/Cloning.h<br>
>>    llvm/trunk/lib/Analysis/AliasAnalysis.cpp<br>
>>    llvm/trunk/lib/Analysis/AliasAnalysisCounter.cpp<br>
>>    llvm/trunk/lib/Analysis/AliasDebugger.cpp<br>
>>    llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp<br>
>>    llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp<br>
>>    llvm/trunk/lib/Analysis/IPA/GlobalsModRef.cpp<br>
>>    llvm/trunk/lib/Analysis/IPA/InlineCost.cpp<br>
>>    llvm/trunk/lib/Analysis/IVUsers.cpp<br>
>>    llvm/trunk/lib/Analysis/LazyValueInfo.cpp<br>
>>    llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp<br>
>>    llvm/trunk/lib/Analysis/Lint.cpp<br>
>>    llvm/trunk/lib/Analysis/Loads.cpp<br>
>>    llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp<br>
>>    llvm/trunk/lib/Analysis/MemDerefPrinter.cpp<br>
>>    llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp<br>
>>    llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp<br>
>>    llvm/trunk/lib/Analysis/ScalarEvolution.cpp<br>
>>    llvm/trunk/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp<br>
>>    llvm/trunk/lib/Analysis/ScopedNoAliasAA.cpp<br>
>>    llvm/trunk/lib/Analysis/TargetTransformInfo.cpp<br>
>>    llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp<br>
>>    llvm/trunk/lib/CodeGen/WinEHPrepare.cpp<br>
>>    llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp<br>
>>    llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h<br>
>>    llvm/trunk/lib/IR/DataLayout.cpp<br>
>>    llvm/trunk/lib/IR/Module.cpp<br>
>>    llvm/trunk/lib/LTO/LTOCodeGenerator.cpp<br>
>>    llvm/trunk/lib/LTO/LTOModule.cpp<br>
>>    llvm/trunk/lib/Linker/LinkModules.cpp<br>
>>    llvm/trunk/lib/Object/IRObjectFile.cpp<br>
>>    llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp<br>
>>    llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h<br>
>>    llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp<br>
>>    llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h<br>
>>    llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp<br>
>>    llvm/trunk/lib/Target/PowerPC/PPCLoopDataPrefetch.cpp<br>
>>    llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp<br>
>>    llvm/trunk/lib/Target/R600/AMDGPUPromoteAlloca.cpp<br>
>>    llvm/trunk/lib/Target/Target.cpp<br>
>>    llvm/trunk/lib/Target/TargetMachineC.cpp<br>
>>    llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp<br>
>>    llvm/trunk/lib/Transforms/IPO/ConstantMerge.cpp<br>
>>    llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp<br>
>>    llvm/trunk/lib/Transforms/IPO/Inliner.cpp<br>
>>    llvm/trunk/lib/Transforms/IPO/LowerBitSets.cpp<br>
>>    llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp<br>
>>    llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp<br>
>>    llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp<br>
>>    llvm/trunk/lib/Transforms/Instrumentation/BoundsChecking.cpp<br>
>>    llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp<br>
>>    llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp<br>
>>    llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp<br>
>>    llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br>
>>    llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.cpp<br>
>>    llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.h<br>
>>    llvm/trunk/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/BDCE.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/GVN.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/LICM.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/LoopRerollPass.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/SCCP.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/Sink.cpp<br>
>>    llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp<br>
>>    llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp<br>
>>    llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp<br>
>>    llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp<br>
>>    llvm/trunk/lib/Transforms/Utils/SimplifyInstructions.cpp<br>
>>    llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp<br>
>>    llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp<br>
>>    llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp<br>
>>    llvm/trunk/test/Analysis/Delinearization/a.ll<br>
>>    llvm/trunk/test/Analysis/Delinearization/himeno_1.ll<br>
>>    llvm/trunk/test/Analysis/Delinearization/himeno_2.ll<br>
>>    llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll<br>
>>    llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_3d.ll<br>
>>    llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_nts_3d.ll<br>
>>    llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_parameteric_offsets_3d.ll<br>
>>    llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_2d.ll<br>
>>    llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_3d.ll<br>
>>    llvm/trunk/test/Analysis/ScalarEvolution/max-trip-count.ll<br>
>>    llvm/trunk/test/Bitcode/highLevelStructure.3.2.ll<br>
>>    llvm/trunk/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll<br>
>>    llvm/trunk/test/Linker/datalayout.ll<br>
>>    llvm/trunk/test/Other/constant-fold-gep.ll<br>
>>    llvm/trunk/test/Transforms/ConstantMerge/merge-both.ll<br>
>>    llvm/trunk/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/2008-09-02-IVType.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/2009-04-27-Floating.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/iv-widen.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/lftr-extend-const.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/lftr_simple.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/pr20680.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/preserve-signed-wrap.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/promote-iv-to-eliminate-casts.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/signed-trip-count.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll<br>
>>    llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll<br>
>>    llvm/trunk/test/Transforms/Inline/alloca-merge-align.ll<br>
>>    llvm/trunk/test/Transforms/Inline/lifetime-no-datalayout.ll<br>
>>    llvm/trunk/test/Transforms/InstCombine/extractvalue.ll<br>
>>    llvm/trunk/test/Transforms/InstCombine/gc.relocate.ll<br>
>>    llvm/trunk/test/Transforms/InstCombine/load-cmp.ll<br>
>>    llvm/trunk/test/Transforms/InstCombine/overflow-mul.ll<br>
>>    llvm/trunk/test/Transforms/InstCombine/pr21651.ll<br>
>>    llvm/trunk/test/Transforms/InstCombine/simplify-libcalls.ll<br>
>>    llvm/trunk/test/Transforms/InstCombine/store.ll<br>
>>    llvm/trunk/test/Transforms/InstCombine/type_pun.ll<br>
>>    llvm/trunk/test/Transforms/LoopSimplify/preserve-scev.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/2008-08-13-CmpStride.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/2008-09-09-Overflow.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-03-CritEdgeMerge.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-06-ReusePhi.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/2012-07-18-LimitReassociate.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2008-08-14-ShadowIV.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2011-07-20-DoubleIV.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/count-to-zero.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/dont_reverse.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/ivchain.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/nested-reduce.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/pr12691.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/remove_indvar.ll<br>
>>    llvm/trunk/test/Transforms/LoopStrengthReduce/variable_stride.ll<br>
>>    llvm/trunk/test/Transforms/PhaseOrdering/scev.ll<br>
>>    llvm/trunk/test/Transforms/ScalarRepl/2007-11-03-bigendian_apint.ll<br>
>>    llvm/trunk/tools/llc/llc.cpp<br>
>>    llvm/trunk/tools/llvm-extract/llvm-extract.cpp<br>
>>    llvm/trunk/tools/opt/opt.cpp<br>
>>    llvm/trunk/unittests/IR/IRBuilderTest.cpp<br>
>>    llvm/trunk/unittests/IR/LegacyPassManagerTest.cpp<br>
>><br>
>> Modified: llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp (original)<br>
>> +++ llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1973,7 +1973,6 @@ int main(int argc, char *argv[]) {<br>
>>     // Start with registering info about how the<br>
>>     // target lays out data structures.<br>
>>     module->setDataLayout(executionEngine->getDataLayout());<br>
>> -    fpm.add(new llvm::DataLayoutPass());<br>
>><br>
>>     // Optimizations turned on<br>
>> #ifdef ADD_OPT_PASSES<br>
>><br>
>> Modified: llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp (original)<br>
>> +++ llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -561,7 +561,6 @@ void *MCJITHelper::getPointerToFunction(<br>
>>     // Set up the optimizer pipeline.  Start with registering info about how the<br>
>>     // target lays out data structures.<br>
>>     OpenModule->setDataLayout(NewEngine->getDataLayout());<br>
>> -    FPM->add(new DataLayoutPass());<br>
>>     // Provide basic AliasAnalysis support for GVN.<br>
>>     FPM->add(createBasicAliasAnalysisPass());<br>
>>     // Promote allocas to registers.<br>
>><br>
>> Modified: llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp (original)<br>
>> +++ llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -914,7 +914,6 @@ int main() {<br>
>>   // Set up the optimizer pipeline.  Start with registering info about how the<br>
>>   // target lays out data structures.<br>
>>   TheModule->setDataLayout(TheExecutionEngine->getDataLayout());<br>
>> -  OurFPM.add(new DataLayoutPass());<br>
>>   // Provide basic AliasAnalysis support for GVN.<br>
>>   OurFPM.add(createBasicAliasAnalysisPass());<br>
>>   // Do simple "peephole" optimizations and bit-twiddling optzns.<br>
>><br>
>> Modified: llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp (original)<br>
>> +++ llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1035,7 +1035,6 @@ int main() {<br>
>>   // Set up the optimizer pipeline.  Start with registering info about how the<br>
>>   // target lays out data structures.<br>
>>   TheModule->setDataLayout(TheExecutionEngine->getDataLayout());<br>
>> -  OurFPM.add(new DataLayoutPass());<br>
>>   // Provide basic AliasAnalysis support for GVN.<br>
>>   OurFPM.add(createBasicAliasAnalysisPass());<br>
>>   // Do simple "peephole" optimizations and bit-twiddling optzns.<br>
>><br>
>> Modified: llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp (original)<br>
>> +++ llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1209,7 +1209,6 @@ int main() {<br>
>>   // Set up the optimizer pipeline.  Start with registering info about how the<br>
>>   // target lays out data structures.<br>
>>   TheModule->setDataLayout(TheExecutionEngine->getDataLayout());<br>
>> -  OurFPM.add(new DataLayoutPass());<br>
>>   // Provide basic AliasAnalysis support for GVN.<br>
>>   OurFPM.add(createBasicAliasAnalysisPass());<br>
>>   // Promote allocas to registers.<br>
>><br>
>> Modified: llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp (original)<br>
>> +++ llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1460,7 +1460,6 @@ int main() {<br>
>>   // Set up the optimizer pipeline.  Start with registering info about how the<br>
>>   // target lays out data structures.<br>
>>   TheModule->setDataLayout(TheExecutionEngine->getDataLayout());<br>
>> -  OurFPM.add(new DataLayoutPass());<br>
>> #if 0<br>
>>   // Provide basic AliasAnalysis support for GVN.<br>
>>   OurFPM.add(createBasicAliasAnalysisPass());<br>
>><br>
>> Modified: llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp (original)<br>
>> +++ llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -716,7 +716,7 @@ public:<br>
>>       M(new Module(GenerateUniqueName("jit_module_"),<br>
>>                    Session.getLLVMContext())),<br>
>>       Builder(Session.getLLVMContext()) {<br>
>> -    M->setDataLayout(Session.getTarget().getDataLayout());<br>
>> +    M->setDataLayout(*Session.getTarget().getDataLayout());<br>
>>   }<br>
>><br>
>>   SessionContext& getSession() { return Session; }<br>
>><br>
>> Modified: llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp (original)<br>
>> +++ llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -715,7 +715,7 @@ public:<br>
>>       M(new Module(GenerateUniqueName("jit_module_"),<br>
>>                    Session.getLLVMContext())),<br>
>>       Builder(Session.getLLVMContext()) {<br>
>> -    M->setDataLayout(Session.getTarget().getDataLayout());<br>
>> +    M->setDataLayout(*Session.getTarget().getDataLayout());<br>
>>   }<br>
>><br>
>>   SessionContext& getSession() { return Session; }<br>
>><br>
>> Modified: llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp (original)<br>
>> +++ llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -715,7 +715,7 @@ public:<br>
>>       M(new Module(GenerateUniqueName("jit_module_"),<br>
>>                    Session.getLLVMContext())),<br>
>>       Builder(Session.getLLVMContext()) {<br>
>> -    M->setDataLayout(Session.getTarget().getDataLayout());<br>
>> +    M->setDataLayout(*Session.getTarget().getDataLayout());<br>
>>   }<br>
>><br>
>>   SessionContext& getSession() { return Session; }<br>
>><br>
>> Modified: llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp (original)<br>
>> +++ llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -715,7 +715,7 @@ public:<br>
>>       M(new Module(GenerateUniqueName("jit_module_"),<br>
>>                    Session.getLLVMContext())),<br>
>>       Builder(Session.getLLVMContext()) {<br>
>> -    M->setDataLayout(Session.getTarget().getDataLayout());<br>
>> +    M->setDataLayout(*Session.getTarget().getDataLayout());<br>
>>   }<br>
>><br>
>>   SessionContext& getSession() { return Session; }<br>
>><br>
>> Modified: llvm/trunk/include/llvm/Analysis/AliasAnalysis.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/AliasAnalysis.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/AliasAnalysis.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/include/llvm/Analysis/AliasAnalysis.h (original)<br>
>> +++ llvm/trunk/include/llvm/Analysis/AliasAnalysis.h Wed Mar  4 12:43:29 2015<br>
>> @@ -68,7 +68,7 @@ protected:<br>
>>   /// typically called by the run* methods of these subclasses.  This may be<br>
>>   /// called multiple times.<br>
>>   ///<br>
>> -  void InitializeAliasAnalysis(Pass *P);<br>
>> +  void InitializeAliasAnalysis(Pass *P, const DataLayout *DL);<br>
>><br>
>>   /// getAnalysisUsage - All alias analysis implementations should invoke this<br>
>>   /// directly (using AliasAnalysis::getAnalysisUsage(AU)).<br>
>><br>
>> Modified: llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h (original)<br>
>> +++ llvm/trunk/include/llvm/Analysis/LibCallAliasAnalysis.h Wed Mar  4 12:43:29 2015<br>
>> @@ -15,6 +15,7 @@<br>
>> #define LLVM_ANALYSIS_LIBCALLALIASANALYSIS_H<br>
>><br>
>> #include "llvm/Analysis/AliasAnalysis.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/Pass.h"<br>
>><br>
>> namespace llvm {<br>
>> @@ -48,11 +49,8 @@ namespace llvm {<br>
>><br>
>>     void getAnalysisUsage(AnalysisUsage &AU) const override;<br>
>><br>
>> -    bool runOnFunction(Function &F) override {<br>
>> -      InitializeAliasAnalysis(this);                 // set up super class<br>
>> -      return false;<br>
>> -    }<br>
>> -<br>
>> +    bool runOnFunction(Function &F) override;<br>
>> +<br>
>>     /// getAdjustedAnalysisPointer - This method is used when a pass implements<br>
>>     /// an analysis interface through multiple inheritance.  If needed, it<br>
>>     /// should override this to adjust the this pointer as needed for the<br>
>><br>
>> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h (original)<br>
>> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h Wed Mar  4 12:43:29 2015<br>
>> @@ -183,7 +183,7 @@ private:<br>
>>       auto Names = llvm::make_unique<StringMap<bool>>();<br>
>><br>
>>       for (const auto &M : Ms) {<br>
>> -        Mangler Mang(M->getDataLayout());<br>
>> +        Mangler Mang(&M->getDataLayout());<br>
>><br>
>>         for (const auto &GV : M->globals())<br>
>>           if (addGlobalValue(*Names, GV, Mang, SearchName, ExportedSymbolsOnly))<br>
>><br>
>> Modified: llvm/trunk/include/llvm/IR/DataLayout.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DataLayout.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DataLayout.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/include/llvm/IR/DataLayout.h (original)<br>
>> +++ llvm/trunk/include/llvm/IR/DataLayout.h Wed Mar  4 12:43:29 2015<br>
>> @@ -116,6 +116,9 @@ private:<br>
>>   /// \brief Primitive type alignment data.<br>
>>   SmallVector<LayoutAlignElem, 16> Alignments;<br>
>><br>
>> +  /// \brief The string representation used to create this DataLayout<br>
>> +  std::string StringRepresentation;<br>
>> +<br>
>>   typedef SmallVector<PointerAlignElem, 8> PointersTy;<br>
>>   PointersTy Pointers;<br>
>><br>
>> @@ -185,6 +188,7 @@ public:<br>
>><br>
>>   DataLayout &operator=(const DataLayout &DL) {<br>
>>     clear();<br>
>> +    StringRepresentation = DL.StringRepresentation;<br>
>>     BigEndian = DL.isBigEndian();<br>
>>     StackNaturalAlign = DL.StackNaturalAlign;<br>
>>     ManglingMode = DL.ManglingMode;<br>
>> @@ -209,8 +213,12 @@ public:<br>
>>   /// \brief Returns the string representation of the DataLayout.<br>
>>   ///<br>
>>   /// This representation is in the same format accepted by the string<br>
>> -  /// constructor above.<br>
>> -  std::string getStringRepresentation() const;<br>
>> +  /// constructor above. This should not be used to compare two DataLayout as<br>
>> +  /// different string can represent the same layout.<br>
>> +  std::string getStringRepresentation() const { return StringRepresentation; }<br>
>> +<br>
>> +  /// \brief Test if the DataLayout was constructed from an empty string.<br>
>> +  bool isDefault() const { return StringRepresentation.empty(); }<br>
>><br>
>>   /// \brief Returns true if the specified type is known to be a native integer<br>
>>   /// type supported by the CPU.<br>
>> @@ -451,22 +459,6 @@ inline LLVMTargetDataRef wrap(const Data<br>
>>   return reinterpret_cast<LLVMTargetDataRef>(const_cast<DataLayout *>(P));<br>
>> }<br>
>><br>
>> -class DataLayoutPass : public ImmutablePass {<br>
>> -  DataLayout DL;<br>
>> -<br>
>> -public:<br>
>> -  /// This has to exist, because this is a pass, but it should never be used.<br>
>> -  DataLayoutPass();<br>
>> -  ~DataLayoutPass();<br>
>> -<br>
>> -  const DataLayout &getDataLayout() const { return DL; }<br>
>> -<br>
>> -  static char ID; // Pass identification, replacement for typeid<br>
>> -<br>
>> -  bool doFinalization(Module &M) override;<br>
>> -  bool doInitialization(Module &M) override;<br>
>> -};<br>
>> -<br>
>> /// Used to lazily calculate structure layout information for a target machine,<br>
>> /// based on the DataLayout structure.<br>
>> class StructLayout {<br>
>><br>
>> Modified: llvm/trunk/include/llvm/IR/Module.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Module.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Module.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/include/llvm/IR/Module.h (original)<br>
>> +++ llvm/trunk/include/llvm/IR/Module.h Wed Mar  4 12:43:29 2015<br>
>> @@ -219,14 +219,7 @@ private:<br>
>>   std::string TargetTriple;       ///< Platform target triple Module compiled on<br>
>>                                   ///< Format: (arch)(sub)-(vendor)-(sys0-(abi)<br>
>>   void *NamedMDSymTab;            ///< NamedMDNode names.<br>
>> -<br>
>> -  // We need to keep the string because the C API expects us to own the string<br>
>> -  // representation.<br>
>> -  // Since we have it, we also use an empty string to represent a module without<br>
>> -  // a DataLayout. If it has a DataLayout, these variables are in sync and the<br>
>> -  // string is just a cache of getDataLayout()->getStringRepresentation().<br>
>> -  std::string DataLayoutStr;<br>
>> -  DataLayout DL;<br>
>> +  DataLayout DL;                  ///< DataLayout associated with the module<br>
>><br>
>>   friend class Constant;<br>
>><br>
>> @@ -256,10 +249,12 @@ public:<br>
>><br>
>>   /// Get the data layout string for the module's target platform. This is<br>
>>   /// equivalent to getDataLayout()->getStringRepresentation().<br>
>> -  const std::string &getDataLayoutStr() const { return DataLayoutStr; }<br>
>> +  const std::string getDataLayoutStr() const {<br>
>> +    return DL.getStringRepresentation();<br>
>> +  }<br>
>><br>
>>   /// Get the data layout for the module's target platform.<br>
>> -  const DataLayout *getDataLayout() const;<br>
>> +  const DataLayout &getDataLayout() const;<br>
>><br>
>>   /// Get the target triple which is a string describing the target host.<br>
>>   /// @returns a string containing the target triple.<br>
>> @@ -293,7 +288,7 @@ public:<br>
>><br>
>>   /// Set the data layout<br>
>>   void setDataLayout(StringRef Desc);<br>
>> -  void setDataLayout(const DataLayout *Other);<br>
>> +  void setDataLayout(const DataLayout &Other);<br>
>><br>
>>   /// Set the target triple.<br>
>>   void setTargetTriple(StringRef T) { TargetTriple = T; }<br>
>><br>
>> Modified: llvm/trunk/include/llvm/Transforms/Utils/Cloning.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/Cloning.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/Cloning.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/include/llvm/Transforms/Utils/Cloning.h (original)<br>
>> +++ llvm/trunk/include/llvm/Transforms/Utils/Cloning.h Wed Mar  4 12:43:29 2015<br>
>> @@ -192,15 +192,13 @@ void CloneAndPruneFunctionInto(Function<br>
>> class InlineFunctionInfo {<br>
>> public:<br>
>>   explicit InlineFunctionInfo(CallGraph *cg = nullptr,<br>
>> -                              const DataLayout *DL = nullptr,<br>
>>                               AliasAnalysis *AA = nullptr,<br>
>>                               AssumptionCacheTracker *ACT = nullptr)<br>
>> -      : CG(cg), DL(DL), AA(AA), ACT(ACT) {}<br>
>> +      : CG(cg), AA(AA), ACT(ACT) {}<br>
>><br>
>>   /// CG - If non-null, InlineFunction will update the callgraph to reflect the<br>
>>   /// changes it makes.<br>
>>   CallGraph *CG;<br>
>> -  const DataLayout *DL;<br>
>>   AliasAnalysis *AA;<br>
>>   AssumptionCacheTracker *ACT;<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/AliasAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/AliasAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/AliasAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -462,9 +462,8 @@ AliasAnalysis::~AliasAnalysis() {}<br>
>> /// InitializeAliasAnalysis - Subclasses must call this method to initialize the<br>
>> /// AliasAnalysis interface before any other methods are called.<br>
>> ///<br>
>> -void AliasAnalysis::InitializeAliasAnalysis(Pass *P) {<br>
>> -  DataLayoutPass *DLP = P->getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +void AliasAnalysis::InitializeAliasAnalysis(Pass *P, const DataLayout *NewDL) {<br>
>> +  DL = NewDL;<br>
>>   auto *TLIP = P->getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();<br>
>>   TLI = TLIP ? &TLIP->getTLI() : nullptr;<br>
>>   AA = &P->getAnalysis<AliasAnalysis>();<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/AliasAnalysisCounter.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AliasAnalysisCounter.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AliasAnalysisCounter.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/AliasAnalysisCounter.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/AliasAnalysisCounter.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -14,6 +14,7 @@<br>
>><br>
>> #include "llvm/Analysis/Passes.h"<br>
>> #include "llvm/Analysis/AliasAnalysis.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/Pass.h"<br>
>> #include "llvm/Support/CommandLine.h"<br>
>> #include "llvm/Support/Debug.h"<br>
>> @@ -76,7 +77,7 @@ namespace {<br>
>><br>
>>     bool runOnModule(Module &M) override {<br>
>>       this->M = &M;<br>
>> -      InitializeAliasAnalysis(this);<br>
>> +      InitializeAliasAnalysis(this, &M.getDataLayout());<br>
>>       return false;<br>
>>     }<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/AliasDebugger.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AliasDebugger.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AliasDebugger.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/AliasDebugger.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/AliasDebugger.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -44,7 +44,7 @@ namespace {<br>
>>     }<br>
>><br>
>>     bool runOnModule(Module &M) override {<br>
>> -      InitializeAliasAnalysis(this);                 // set up super class<br>
>> +      InitializeAliasAnalysis(this, &M.getDataLayout()); // set up super class<br>
>><br>
>>       for(Module::global_iterator I = M.global_begin(),<br>
>>             E = M.global_end(); I != E; ++I) {<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -461,9 +461,7 @@ namespace {<br>
>>       initializeBasicAliasAnalysisPass(*PassRegistry::getPassRegistry());<br>
>>     }<br>
>><br>
>> -    void initializePass() override {<br>
>> -      InitializeAliasAnalysis(this);<br>
>> -    }<br>
>> +    bool doInitialization(Module &M) override;<br>
>><br>
>>     void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>>       AU.addRequired<AliasAnalysis>();<br>
>> @@ -815,6 +813,11 @@ static bool isAssumeIntrinsic(ImmutableC<br>
>>   return false;<br>
>> }<br>
>><br>
>> +bool BasicAliasAnalysis::doInitialization(Module &M) {<br>
>> +  InitializeAliasAnalysis(this, &M.getDataLayout());<br>
>> +  return true;<br>
>> +}<br>
>> +<br>
>> /// getModRefInfo - Check to see if the specified callsite can clobber the<br>
>> /// specified memory object.  Since we only look at local properties of this<br>
>> /// function, we really can't say much about this query.  We do, however, use<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -240,7 +240,7 @@ public:<br>
>>     return QueryResult;<br>
>>   }<br>
>><br>
>> -  void initializePass() override { InitializeAliasAnalysis(this); }<br>
>> +  bool doInitialization(Module &M) override;<br>
>> };<br>
>><br>
>> void FunctionHandle::removeSelfFromCache() {<br>
>> @@ -1034,3 +1034,8 @@ CFLAliasAnalysis::query(const AliasAnaly<br>
>><br>
>>   return AliasAnalysis::NoAlias;<br>
>> }<br>
>> +<br>
>> +bool CFLAliasAnalysis::doInitialization(Module &M) {<br>
>> +  InitializeAliasAnalysis(this, &M.getDataLayout());<br>
>> +  return true;<br>
>> +}<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/IPA/GlobalsModRef.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/GlobalsModRef.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/GlobalsModRef.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/IPA/GlobalsModRef.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/IPA/GlobalsModRef.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -96,7 +96,7 @@ namespace {<br>
>>     }<br>
>><br>
>>     bool runOnModule(Module &M) override {<br>
>> -      InitializeAliasAnalysis(this);<br>
>> +      InitializeAliasAnalysis(this, &M.getDataLayout());<br>
>><br>
>>       // Find non-addr taken globals.<br>
>>       AnalyzeGlobals(M);<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/IPA/InlineCost.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/InlineCost.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/InlineCost.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/IPA/InlineCost.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/IPA/InlineCost.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -396,7 +396,6 @@ bool CallAnalyzer::visitBitCast(BitCastI<br>
>> }<br>
>><br>
>> bool CallAnalyzer::visitPtrToInt(PtrToIntInst &I) {<br>
>> -  const DataLayout *DL = I.getModule()->getDataLayout();<br>
>>   // Propagate constants through ptrtoint.<br>
>>   Constant *COp = dyn_cast<Constant>(I.getOperand(0));<br>
>>   if (!COp)<br>
>> @@ -410,7 +409,8 @@ bool CallAnalyzer::visitPtrToInt(PtrToIn<br>
>>   // Track base/offset pairs when converted to a plain integer provided the<br>
>>   // integer is large enough to represent the pointer.<br>
>>   unsigned IntegerSize = I.getType()->getScalarSizeInBits();<br>
>> -  if (DL && IntegerSize >= DL->getPointerSizeInBits()) {<br>
>> +  const DataLayout &DL = I.getModule()->getDataLayout();<br>
>> +  if (IntegerSize >= DL.getPointerSizeInBits()) {<br>
>>     std::pair<Value *, APInt> BaseAndOffset<br>
>>       = ConstantOffsetPtrs.lookup(I.getOperand(0));<br>
>>     if (BaseAndOffset.first)<br>
>> @@ -433,7 +433,6 @@ bool CallAnalyzer::visitPtrToInt(PtrToIn<br>
>> }<br>
>><br>
>> bool CallAnalyzer::visitIntToPtr(IntToPtrInst &I) {<br>
>> -  const DataLayout *DL = I.getModule()->getDataLayout();<br>
>>   // Propagate constants through ptrtoint.<br>
>>   Constant *COp = dyn_cast<Constant>(I.getOperand(0));<br>
>>   if (!COp)<br>
>> @@ -448,7 +447,8 @@ bool CallAnalyzer::visitIntToPtr(IntToPt<br>
>>   // modifications provided the integer is not too large.<br>
>>   Value *Op = I.getOperand(0);<br>
>>   unsigned IntegerSize = Op->getType()->getScalarSizeInBits();<br>
>> -  if (DL && IntegerSize <= DL->getPointerSizeInBits()) {<br>
>> +  const DataLayout &DL = I.getModule()->getDataLayout();<br>
>> +  if (IntegerSize <= DL.getPointerSizeInBits()) {<br>
>>     std::pair<Value *, APInt> BaseAndOffset = ConstantOffsetPtrs.lookup(Op);<br>
>>     if (BaseAndOffset.first)<br>
>>       ConstantOffsetPtrs[&I] = BaseAndOffset;<br>
>> @@ -1333,7 +1333,7 @@ InlineCost InlineCostAnalysis::getInline<br>
>>   DEBUG(llvm::dbgs() << "      Analyzing call of " << Callee->getName()<br>
>>         << "...\n");<br>
>><br>
>> -  CallAnalyzer CA(Callee->getParent()->getDataLayout(), TTIWP->getTTI(*Callee),<br>
>> +  CallAnalyzer CA(&Callee->getParent()->getDataLayout(), TTIWP->getTTI(*Callee),<br>
>>                   ACT, *Callee, Threshold);<br>
>>   bool ShouldInline = CA.analyzeCall(CS);<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/IVUsers.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IVUsers.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IVUsers.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/IVUsers.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/IVUsers.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -22,6 +22,7 @@<br>
>> #include "llvm/IR/DerivedTypes.h"<br>
>> #include "llvm/IR/Dominators.h"<br>
>> #include "llvm/IR/Instructions.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/IR/Type.h"<br>
>> #include "llvm/Support/Debug.h"<br>
>> #include "llvm/Support/raw_ostream.h"<br>
>> @@ -253,8 +254,7 @@ bool IVUsers::runOnLoop(Loop *l, LPPassM<br>
>>   LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>>   SE = &getAnalysis<ScalarEvolution>();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &L->getHeader()->getModule()->getDataLayout();<br>
>><br>
>>   // Find all uses of induction variables in this loop, and categorize<br>
>>   // them by stride.  Start by finding all of the PHI nodes in the header for<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/LazyValueInfo.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LazyValueInfo.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LazyValueInfo.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/LazyValueInfo.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/LazyValueInfo.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1117,8 +1117,7 @@ bool LazyValueInfo::runOnFunction(Functi<br>
>>       getAnalysisIfAvailable<DominatorTreeWrapperPass>();<br>
>>   DT = DTWP ? &DTWP->getDomTree() : nullptr;<br>
>><br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>><br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/LibCallAliasAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -36,7 +36,11 @@ void LibCallAliasAnalysis::getAnalysisUs<br>
>>   AU.setPreservesAll();                         // Does not transform code<br>
>> }<br>
>><br>
>> -<br>
>> +bool LibCallAliasAnalysis::runOnFunction(Function &F) {<br>
>> +  // set up super class<br>
>> +  InitializeAliasAnalysis(this, &F.getParent()->getDataLayout());<br>
>> +  return false;<br>
>> +}<br>
>><br>
>> /// AnalyzeLibCallDetails - Given a call to a function with the specified<br>
>> /// LibCallFunctionInfo, see if we can improve the mod/ref footprint of the call<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/Lint.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/Lint.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/Lint.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/Lint.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/Lint.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -184,8 +184,7 @@ bool Lint::runOnFunction(Function &F) {<br>
>>   AA = &getAnalysis<AliasAnalysis>();<br>
>>   AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>>   visit(F);<br>
>>   dbgs() << MessagesStr.str();<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/Loads.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/Loads.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/Loads.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/Loads.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/Loads.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -179,11 +179,10 @@ Value *llvm::FindAvailableLoadedValue(Va<br>
>><br>
>>   // Try to get the DataLayout for this module. This may be null, in which case<br>
>>   // the optimizations will be limited.<br>
>> -  const DataLayout *DL = ScanBB->getModule()->getDataLayout();<br>
>> +  const DataLayout &DL = ScanBB->getModule()->getDataLayout();<br>
>><br>
>>   // Try to get the store size for the type.<br>
>> -  uint64_t AccessSize = DL ? DL->getTypeStoreSize(AccessTy)<br>
>> -                           : AA ? AA->getTypeStoreSize(AccessTy) : 0;<br>
>> +  uint64_t AccessSize = DL.getTypeStoreSize(AccessTy);<br>
>><br>
>>   Value *StrippedPtr = Ptr->stripPointerCasts();<br>
>><br>
>> @@ -208,7 +207,7 @@ Value *llvm::FindAvailableLoadedValue(Va<br>
>>     if (LoadInst *LI = dyn_cast<LoadInst>(Inst))<br>
>>       if (AreEquivalentAddressValues(<br>
>>               LI->getPointerOperand()->stripPointerCasts(), StrippedPtr) &&<br>
>> -          CastInst::isBitOrNoopPointerCastable(LI->getType(), AccessTy, DL)) {<br>
>> +          CastInst::isBitOrNoopPointerCastable(LI->getType(), AccessTy, &DL)) {<br>
>>         if (AATags)<br>
>>           LI->getAAMetadata(*AATags);<br>
>>         return LI;<br>
>> @@ -221,7 +220,7 @@ Value *llvm::FindAvailableLoadedValue(Va<br>
>>       // those cases are unlikely.)<br>
>>       if (AreEquivalentAddressValues(StorePtr, StrippedPtr) &&<br>
>>           CastInst::isBitOrNoopPointerCastable(SI->getValueOperand()->getType(),<br>
>> -                                               AccessTy, DL)) {<br>
>> +                                               AccessTy, &DL)) {<br>
>>         if (AATags)<br>
>>           SI->getAAMetadata(*AATags);<br>
>>         return SI->getOperand(0);<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1360,7 +1360,7 @@ void LoopAccessAnalysis::print(raw_ostre<br>
>><br>
>> bool LoopAccessAnalysis::runOnFunction(Function &F) {<br>
>>   SE = &getAnalysis<ScalarEvolution>();<br>
>> -  DL = F.getParent()->getDataLayout();<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();<br>
>>   TLI = TLIP ? &TLIP->getTLI() : nullptr;<br>
>>   AA = &getAnalysis<AliasAnalysis>();<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/MemDerefPrinter.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemDerefPrinter.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemDerefPrinter.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/MemDerefPrinter.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/MemDerefPrinter.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -14,6 +14,7 @@<br>
>> #include "llvm/IR/DataLayout.h"<br>
>> #include "llvm/IR/InstIterator.h"<br>
>> #include "llvm/IR/LLVMContext.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/Support/ErrorHandling.h"<br>
>> #include "llvm/Support/raw_ostream.h"<br>
>> using namespace llvm;<br>
>> @@ -27,7 +28,6 @@ namespace {<br>
>>       initializeMemDerefPrinterPass(*PassRegistry::getPassRegistry());<br>
>>     }<br>
>>     void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>> -      AU.addRequired<DataLayoutPass>();<br>
>>       AU.setPreservesAll();<br>
>>     }<br>
>>     bool runOnFunction(Function &F) override;<br>
>> @@ -41,7 +41,6 @@ namespace {<br>
>> char MemDerefPrinter::ID = 0;<br>
>> INITIALIZE_PASS_BEGIN(MemDerefPrinter, "print-memderefs",<br>
>>                       "Memory Dereferenciblity of pointers in function", false, true)<br>
>> -INITIALIZE_PASS_DEPENDENCY(DataLayoutPass)<br>
>> INITIALIZE_PASS_END(MemDerefPrinter, "print-memderefs",<br>
>>                     "Memory Dereferenciblity of pointers in function", false, true)<br>
>><br>
>> @@ -50,11 +49,11 @@ FunctionPass *llvm::createMemDerefPrinte<br>
>> }<br>
>><br>
>> bool MemDerefPrinter::runOnFunction(Function &F) {<br>
>> -  const DataLayout *DL = &getAnalysis<DataLayoutPass>().getDataLayout();<br>
>> +  const DataLayout &DL = F.getParent()->getDataLayout();<br>
>>   for (auto &I: inst_range(F)) {<br>
>>     if (LoadInst *LI = dyn_cast<LoadInst>(&I)) {<br>
>>       Value *PO = LI->getPointerOperand();<br>
>> -      if (PO->isDereferenceablePointer(DL))<br>
>> +      if (PO->isDereferenceablePointer(&DL))<br>
>>         Vec.push_back(PO);<br>
>>     }<br>
>>   }<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -93,8 +93,7 @@ void MemoryDependenceAnalysis::getAnalys<br>
>> bool MemoryDependenceAnalysis::runOnFunction(Function &F) {<br>
>>   AA = &getAnalysis<AliasAnalysis>();<br>
>>   AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   DominatorTreeWrapperPass *DTWP =<br>
>>       getAnalysisIfAvailable<DominatorTreeWrapperPass>();<br>
>>   DT = DTWP ? &DTWP->getDomTree() : nullptr;<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/NoAliasAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -16,6 +16,7 @@<br>
>> #include "llvm/Analysis/AliasAnalysis.h"<br>
>> #include "llvm/IR/DataLayout.h"<br>
>> #include "llvm/IR/LLVMContext.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/Pass.h"<br>
>> using namespace llvm;<br>
>><br>
>> @@ -33,11 +34,11 @@ namespace {<br>
>><br>
>>     void getAnalysisUsage(AnalysisUsage &AU) const override {}<br>
>><br>
>> -    void initializePass() override {<br>
>> +    bool doInitialization(Module &M) override {<br>
>>       // Note: NoAA does not call InitializeAliasAnalysis because it's<br>
>>       // special and does not support chaining.<br>
>> -      DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -      DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +      DL = &M.getDataLayout();<br>
>> +      return true;<br>
>>     }<br>
>><br>
>>     AliasResult alias(const Location &LocA, const Location &LocB) override {<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -7956,8 +7956,7 @@ bool ScalarEvolution::runOnFunction(Func<br>
>>   this->F = &F;<br>
>>   AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>>   LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>>   return false;<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -22,6 +22,7 @@<br>
>> #include "llvm/Analysis/Passes.h"<br>
>> #include "llvm/Analysis/AliasAnalysis.h"<br>
>> #include "llvm/Analysis/ScalarEvolutionExpressions.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/Pass.h"<br>
>> using namespace llvm;<br>
>><br>
>> @@ -79,7 +80,7 @@ ScalarEvolutionAliasAnalysis::getAnalysi<br>
>><br>
>> bool<br>
>> ScalarEvolutionAliasAnalysis::runOnFunction(Function &F) {<br>
>> -  InitializeAliasAnalysis(this);<br>
>> +  InitializeAliasAnalysis(this, &F.getParent()->getDataLayout());<br>
>>   SE = &getAnalysis<ScalarEvolution>();<br>
>>   return false;<br>
>> }<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/ScopedNoAliasAA.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScopedNoAliasAA.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScopedNoAliasAA.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/ScopedNoAliasAA.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/ScopedNoAliasAA.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -80,7 +80,7 @@ public:<br>
>>     initializeScopedNoAliasAAPass(*PassRegistry::getPassRegistry());<br>
>>   }<br>
>><br>
>> -  void initializePass() override { InitializeAliasAnalysis(this); }<br>
>> +  bool doInitialization(Module &M) override;<br>
>><br>
>>   /// getAdjustedAnalysisPointer - This method is used when a pass implements<br>
>>   /// an analysis interface through multiple inheritance.  If needed, it<br>
>> @@ -119,6 +119,11 @@ ImmutablePass *llvm::createScopedNoAlias<br>
>>   return new ScopedNoAliasAA();<br>
>> }<br>
>><br>
>> +bool ScopedNoAliasAA::doInitialization(Module &M) {<br>
>> +  InitializeAliasAnalysis(this, &M.getDataLayout());<br>
>> +  return true;<br>
>> +}<br>
>> +<br>
>> void<br>
>> ScopedNoAliasAA::getAnalysisUsage(AnalysisUsage &AU) const {<br>
>>   AU.setPreservesAll();<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/TargetTransformInfo.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetTransformInfo.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetTransformInfo.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/TargetTransformInfo.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/TargetTransformInfo.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -277,7 +277,7 @@ TargetIRAnalysis::Result TargetIRAnalysi<br>
>> char TargetIRAnalysis::PassID;<br>
>><br>
>> TargetIRAnalysis::Result TargetIRAnalysis::getDefaultTTI(Function &F) {<br>
>> -  return Result(F.getParent()->getDataLayout());<br>
>> +  return Result(&F.getParent()->getDataLayout());<br>
>> }<br>
>><br>
>> // Register the basic pass.<br>
>><br>
>> Modified: llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Analysis/TypeBasedAliasAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -282,9 +282,7 @@ namespace {<br>
>>       initializeTypeBasedAliasAnalysisPass(*PassRegistry::getPassRegistry());<br>
>>     }<br>
>><br>
>> -    void initializePass() override {<br>
>> -      InitializeAliasAnalysis(this);<br>
>> -    }<br>
>> +    bool doInitialization(Module &M) override;<br>
>><br>
>>     /// getAdjustedAnalysisPointer - This method is used when a pass implements<br>
>>     /// an analysis interface through multiple inheritance.  If needed, it<br>
>> @@ -321,6 +319,11 @@ ImmutablePass *llvm::createTypeBasedAlia<br>
>>   return new TypeBasedAliasAnalysis();<br>
>> }<br>
>><br>
>> +bool TypeBasedAliasAnalysis::doInitialization(Module &M) {<br>
>> +  InitializeAliasAnalysis(this, &M.getDataLayout());<br>
>> +  return true;<br>
>> +}<br>
>> +<br>
>> void<br>
>> TypeBasedAliasAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {<br>
>>   AU.setPreservesAll();<br>
>><br>
>> Modified: llvm/trunk/lib/CodeGen/WinEHPrepare.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/WinEHPrepare.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/WinEHPrepare.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/CodeGen/WinEHPrepare.cpp (original)<br>
>> +++ llvm/trunk/lib/CodeGen/WinEHPrepare.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -369,7 +369,7 @@ bool WinEHPrepare::prepareCPPEHHandlers(<br>
>>   Builder.SetInsertPoint(Entry->getFirstInsertionPt());<br>
>>   Function *FrameAllocFn =<br>
>>       Intrinsic::getDeclaration(M, Intrinsic::frameallocate);<br>
>> -  uint64_t EHAllocSize = M->getDataLayout()->getTypeAllocSize(EHDataStructTy);<br>
>> +  uint64_t EHAllocSize = M->getDataLayout().getTypeAllocSize(EHDataStructTy);<br>
>>   Value *FrameAllocArgs[] = {<br>
>>       ConstantInt::get(Type::getInt32Ty(Context), EHAllocSize)};<br>
>>   CallInst *FrameAlloc =<br>
>> @@ -538,7 +538,7 @@ bool WinEHPrepare::outlineHandler(Handle<br>
>>   CloneAndPruneIntoFromInst(<br>
>>       Handler, SrcFn, ++II, VMap,<br>
>>       /*ModuleLevelChanges=*/false, Returns, "", &InlinedFunctionInfo,<br>
>> -      SrcFn->getParent()->getDataLayout(), Director.get());<br>
>> +      &SrcFn->getParent()->getDataLayout(), Director.get());<br>
>><br>
>>   // Move all the instructions in the first cloned block into our entry block.<br>
>>   BasicBlock *FirstClonedBB = std::next(Function::iterator(Entry));<br>
>><br>
>> Modified: llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp (original)<br>
>> +++ llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -137,8 +137,7 @@ std::unique_ptr<MemoryBuffer> MCJIT::emi<br>
>><br>
>>   legacy::PassManager PM;<br>
>><br>
>> -  M->setDataLayout(TM->getDataLayout());<br>
>> -  PM.add(new DataLayoutPass());<br>
>> +  M->setDataLayout(*TM->getDataLayout());<br>
>><br>
>>   // The RuntimeDyld will take ownership of this shortly<br>
>>   SmallVector<char, 4096> ObjBufferSV;<br>
>><br>
>> Modified: llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h (original)<br>
>> +++ llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h Wed Mar  4 12:43:29 2015<br>
>> @@ -133,8 +133,8 @@ public:<br>
>><br>
>>     // If this module doesn't have a DataLayout attached then attach the<br>
>>     // default.<br>
>> -    if (!M->getDataLayout())<br>
>> -      M->setDataLayout(getDataLayout());<br>
>> +    if (M->getDataLayout().isDefault())<br>
>> +      M->setDataLayout(*getDataLayout());<br>
>><br>
>>     Modules.push_back(std::move(M));<br>
>>     std::vector<Module *> Ms;<br>
>><br>
>> Modified: llvm/trunk/lib/IR/DataLayout.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DataLayout.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DataLayout.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/IR/DataLayout.cpp (original)<br>
>> +++ llvm/trunk/lib/IR/DataLayout.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -33,11 +33,6 @@<br>
>> #include <cstdlib><br>
>> using namespace llvm;<br>
>><br>
>> -// Handle the Pass registration stuff necessary to use DataLayout's.<br>
>> -<br>
>> -INITIALIZE_PASS(DataLayoutPass, "datalayout", "Data Layout", false, true)<br>
>> -char DataLayoutPass::ID = 0;<br>
>> -<br>
>> //===----------------------------------------------------------------------===//<br>
>> // Support for StructLayout<br>
>> //===----------------------------------------------------------------------===//<br>
>> @@ -221,6 +216,7 @@ static unsigned inBytes(unsigned Bits) {<br>
>> }<br>
>><br>
>> void DataLayout::parseSpecifier(StringRef Desc) {<br>
>> +  StringRepresentation = Desc;<br>
>>   while (!Desc.empty()) {<br>
>>     // Split at '-'.<br>
>>     std::pair<StringRef, StringRef> Split = split(Desc, '-');<br>
>> @@ -378,13 +374,7 @@ DataLayout::DataLayout(const Module *M)<br>
>>   init(M);<br>
>> }<br>
>><br>
>> -void DataLayout::init(const Module *M) {<br>
>> -  const DataLayout *Other = M->getDataLayout();<br>
>> -  if (Other)<br>
>> -    *this = *Other;<br>
>> -  else<br>
>> -    reset("");<br>
>> -}<br>
>> +void DataLayout::init(const Module *M) { *this = M->getDataLayout(); }<br>
>><br>
>> bool DataLayout::operator==(const DataLayout &Other) const {<br>
>>   bool Ret = BigEndian == Other.BigEndian &&<br>
>> @@ -392,7 +382,7 @@ bool DataLayout::operator==(const DataLa<br>
>>              ManglingMode == Other.ManglingMode &&<br>
>>              LegalIntWidths == Other.LegalIntWidths &&<br>
>>              Alignments == Other.Alignments && Pointers == Other.Pointers;<br>
>> -  assert(Ret == (getStringRepresentation() == Other.getStringRepresentation()));<br>
>> +  // Note: getStringRepresentation() might differs, it is not canonicalized<br>
>>   return Ret;<br>
>> }<br>
>><br>
>> @@ -567,68 +557,6 @@ const StructLayout *DataLayout::getStruc<br>
>>   return L;<br>
>> }<br>
>><br>
>> -std::string DataLayout::getStringRepresentation() const {<br>
>> -  std::string Result;<br>
>> -  raw_string_ostream OS(Result);<br>
>> -<br>
>> -  OS << (BigEndian ? "E" : "e");<br>
>> -<br>
>> -  switch (ManglingMode) {<br>
>> -  case MM_None:<br>
>> -    break;<br>
>> -  case MM_ELF:<br>
>> -    OS << "-m:e";<br>
>> -    break;<br>
>> -  case MM_MachO:<br>
>> -    OS << "-m:o";<br>
>> -    break;<br>
>> -  case MM_WINCOFF:<br>
>> -    OS << "-m:w";<br>
>> -    break;<br>
>> -  case MM_Mips:<br>
>> -    OS << "-m:m";<br>
>> -    break;<br>
>> -  }<br>
>> -<br>
>> -  for (const PointerAlignElem &PI : Pointers) {<br>
>> -    // Skip default.<br>
>> -    if (PI.AddressSpace == 0 && PI.ABIAlign == 8 && PI.PrefAlign == 8 &&<br>
>> -        PI.TypeByteWidth == 8)<br>
>> -      continue;<br>
>> -<br>
>> -    OS << "-p";<br>
>> -    if (PI.AddressSpace) {<br>
>> -      OS << PI.AddressSpace;<br>
>> -    }<br>
>> -    OS << ":" << PI.TypeByteWidth*8 << ':' << PI.ABIAlign*8;<br>
>> -    if (PI.PrefAlign != PI.ABIAlign)<br>
>> -      OS << ':' << PI.PrefAlign*8;<br>
>> -  }<br>
>> -<br>
>> -  for (const LayoutAlignElem &AI : Alignments) {<br>
>> -    if (std::find(std::begin(DefaultAlignments), std::end(DefaultAlignments),<br>
>> -                  AI) != std::end(DefaultAlignments))<br>
>> -      continue;<br>
>> -    OS << '-' << (char)AI.AlignType;<br>
>> -    if (AI.TypeBitWidth)<br>
>> -      OS << AI.TypeBitWidth;<br>
>> -    OS << ':' << AI.ABIAlign*8;<br>
>> -    if (AI.ABIAlign != AI.PrefAlign)<br>
>> -      OS << ':' << AI.PrefAlign*8;<br>
>> -  }<br>
>> -<br>
>> -  if (!LegalIntWidths.empty()) {<br>
>> -    OS << "-n" << (unsigned)LegalIntWidths[0];<br>
>> -<br>
>> -    for (unsigned i = 1, e = LegalIntWidths.size(); i != e; ++i)<br>
>> -      OS << ':' << (unsigned)LegalIntWidths[i];<br>
>> -  }<br>
>> -<br>
>> -  if (StackNaturalAlign)<br>
>> -    OS << "-S" << StackNaturalAlign*8;<br>
>> -<br>
>> -  return OS.str();<br>
>> -}<br>
>><br>
>> unsigned DataLayout::getPointerABIAlignment(unsigned AS) const {<br>
>>   PointersTy::const_iterator I = findPointerLowerBound(AS);<br>
>> @@ -844,18 +772,3 @@ unsigned DataLayout::getPreferredAlignme<br>
>>   return Log2_32(getPreferredAlignment(GV));<br>
>> }<br>
>><br>
>> -DataLayoutPass::DataLayoutPass() : ImmutablePass(ID), DL("") {<br>
>> -  initializeDataLayoutPassPass(*PassRegistry::getPassRegistry());<br>
>> -}<br>
>> -<br>
>> -DataLayoutPass::~DataLayoutPass() {}<br>
>> -<br>
>> -bool DataLayoutPass::doInitialization(Module &M) {<br>
>> -  DL.init(&M);<br>
>> -  return false;<br>
>> -}<br>
>> -<br>
>> -bool DataLayoutPass::doFinalization(Module &M) {<br>
>> -  DL.reset("");<br>
>> -  return false;<br>
>> -}<br>
>><br>
>> Modified: llvm/trunk/lib/IR/Module.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Module.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Module.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/IR/Module.cpp (original)<br>
>> +++ llvm/trunk/lib/IR/Module.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -365,31 +365,11 @@ void Module::addModuleFlag(MDNode *Node)<br>
>><br>
>> void Module::setDataLayout(StringRef Desc) {<br>
>>   DL.reset(Desc);<br>
>> -<br>
>> -  if (Desc.empty()) {<br>
>> -    DataLayoutStr = "";<br>
>> -  } else {<br>
>> -    DataLayoutStr = DL.getStringRepresentation();<br>
>> -    // DataLayoutStr is now equivalent to Desc, but since the representation<br>
>> -    // is not unique, they may not be identical.<br>
>> -  }<br>
>> }<br>
>><br>
>> -void Module::setDataLayout(const DataLayout *Other) {<br>
>> -  if (!Other) {<br>
>> -    DataLayoutStr = "";<br>
>> -    DL.reset("");<br>
>> -  } else {<br>
>> -    DL = *Other;<br>
>> -    DataLayoutStr = DL.getStringRepresentation();<br>
>> -  }<br>
>> -}<br>
>> +void Module::setDataLayout(const DataLayout &Other) { DL = Other; }<br>
>><br>
>> -const DataLayout *Module::getDataLayout() const {<br>
>> -  if (DataLayoutStr.empty())<br>
>> -    return nullptr;<br>
>> -  return &DL;<br>
>> -}<br>
>> +const DataLayout &Module::getDataLayout() const { return DL; }<br>
>><br>
>> //===----------------------------------------------------------------------===//<br>
>> // Methods to control the materialization of GlobalValues in the Module.<br>
>><br>
>> Modified: llvm/trunk/lib/LTO/LTOCodeGenerator.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/LTO/LTOCodeGenerator.cpp (original)<br>
>> +++ llvm/trunk/lib/LTO/LTOCodeGenerator.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -529,9 +529,8 @@ bool LTOCodeGenerator::optimize(bool Dis<br>
>>   legacy::PassManager passes;<br>
>><br>
>>   // Add an appropriate DataLayout instance for this module...<br>
>> -  mergedModule->setDataLayout(TargetMach->getDataLayout());<br>
>> +  mergedModule->setDataLayout(*TargetMach->getDataLayout());<br>
>><br>
>> -  passes.add(new DataLayoutPass());<br>
>>   passes.add(<br>
>>       createTargetTransformInfoWrapperPass(TargetMach->getTargetIRAnalysis()));<br>
>><br>
>> @@ -567,8 +566,6 @@ bool LTOCodeGenerator::compileOptimized(<br>
>><br>
>>   legacy::PassManager codeGenPasses;<br>
>><br>
>> -  codeGenPasses.add(new DataLayoutPass());<br>
>> -<br>
>>   formatted_raw_ostream Out(out);<br>
>><br>
>>   // If the bitcode files contain ARC code and were compiled with optimization,<br>
>><br>
>> Modified: llvm/trunk/lib/LTO/LTOModule.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOModule.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOModule.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/LTO/LTOModule.cpp (original)<br>
>> +++ llvm/trunk/lib/LTO/LTOModule.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -229,7 +229,7 @@ LTOModule *LTOModule::makeLTOModule(Memo<br>
>><br>
>>   TargetMachine *target = march->createTargetMachine(TripleStr, CPU, FeatureStr,<br>
>>                                                      options);<br>
>> -  M->setDataLayout(target->getDataLayout());<br>
>> +  M->setDataLayout(*target->getDataLayout());<br>
>><br>
>>   std::unique_ptr<object::IRObjectFile> IRObj(<br>
>>       new object::IRObjectFile(Buffer, std::move(M)));<br>
>><br>
>> Modified: llvm/trunk/lib/Linker/LinkModules.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Linker/LinkModules.cpp (original)<br>
>> +++ llvm/trunk/lib/Linker/LinkModules.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -672,17 +672,12 @@ bool ModuleLinker::computeResultingSelec<br>
>>         getComdatLeader(SrcM, ComdatName, SrcGV))<br>
>>       return true;<br>
>><br>
>> -    const DataLayout *DstDL = DstM->getDataLayout();<br>
>> -    const DataLayout *SrcDL = SrcM->getDataLayout();<br>
>> -    if (!DstDL || !SrcDL) {<br>
>> -      return emitError(<br>
>> -          "Linking COMDATs named '" + ComdatName +<br>
>> -          "': can't do size dependent selection without DataLayout!");<br>
>> -    }<br>
>> +    const DataLayout &DstDL = DstM->getDataLayout();<br>
>> +    const DataLayout &SrcDL = SrcM->getDataLayout();<br>
>>     uint64_t DstSize =<br>
>> -        DstDL->getTypeAllocSize(DstGV->getType()->getPointerElementType());<br>
>> +        DstDL.getTypeAllocSize(DstGV->getType()->getPointerElementType());<br>
>>     uint64_t SrcSize =<br>
>> -        SrcDL->getTypeAllocSize(SrcGV->getType()->getPointerElementType());<br>
>> +        SrcDL.getTypeAllocSize(SrcGV->getType()->getPointerElementType());<br>
>>     if (Result == Comdat::SelectionKind::ExactMatch) {<br>
>>       if (SrcGV->getInitializer() != DstGV->getInitializer())<br>
>>         return emitError("Linking COMDATs named '" + ComdatName +<br>
>> @@ -1482,11 +1477,10 @@ bool ModuleLinker::run() {<br>
>><br>
>>   // Inherit the target data from the source module if the destination module<br>
>>   // doesn't have one already.<br>
>> -  if (!DstM->getDataLayout() && SrcM->getDataLayout())<br>
>> +  if (DstM->getDataLayout().isDefault())<br>
>>     DstM->setDataLayout(SrcM->getDataLayout());<br>
>><br>
>> -  if (SrcM->getDataLayout() && DstM->getDataLayout() &&<br>
>> -      *SrcM->getDataLayout() != *DstM->getDataLayout()) {<br>
>> +  if (SrcM->getDataLayout() != DstM->getDataLayout()) {<br>
>>     emitWarning("Linking two modules of different data layouts: '" +<br>
>>                 SrcM->getModuleIdentifier() + "' is '" +<br>
>>                 SrcM->getDataLayoutStr() + "' whereas '" +<br>
>><br>
>> Modified: llvm/trunk/lib/Object/IRObjectFile.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/IRObjectFile.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/IRObjectFile.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Object/IRObjectFile.cpp (original)<br>
>> +++ llvm/trunk/lib/Object/IRObjectFile.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -36,12 +36,9 @@ using namespace object;<br>
>><br>
>> IRObjectFile::IRObjectFile(MemoryBufferRef Object, std::unique_ptr<Module> Mod)<br>
>>     : SymbolicFile(Binary::ID_IR, Object), M(std::move(Mod)) {<br>
>> -  // If we have a DataLayout, setup a mangler.<br>
>> -  const DataLayout *DL = M->getDataLayout();<br>
>> -  if (!DL)<br>
>> -    return;<br>
>> -<br>
>> -  Mang.reset(new Mangler(DL));<br>
>> +  // Setup a mangler with the DataLayout.<br>
>> +  const DataLayout &DL = M->getDataLayout();<br>
>> +  Mang.reset(new Mangler(&DL));<br>
>><br>
>>   const std::string &InlineAsm = M->getModuleInlineAsm();<br>
>>   if (InlineAsm.empty())<br>
>><br>
>> Modified: llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1981,7 +1981,8 @@ void CppWriter::printModule(const std::s<br>
>>   printEscapedString(mName);<br>
>>   Out << "\", getGlobalContext());";<br>
>>   if (!TheModule->getTargetTriple().empty()) {<br>
>> -    nl(Out) << "mod->setDataLayout(\"" << TheModule->getDataLayout() << "\");";<br>
>> +    nl(Out) << "mod->setDataLayout(\"" << TheModule->getDataLayoutStr()<br>
>> +            << "\");";<br>
>>   }<br>
>>   if (!TheModule->getTargetTriple().empty()) {<br>
>>     nl(Out) << "mod->setTargetTriple(\"" << TheModule->getTargetTriple()<br>
>><br>
>> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h (original)<br>
>> +++ llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h Wed Mar  4 12:43:29 2015<br>
>> @@ -32,7 +32,6 @@ public:<br>
>>   NVPTXAllocaHoisting() : FunctionPass(ID) {}<br>
>><br>
>>   void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>> -    AU.addRequired<DataLayoutPass>();<br>
>>     AU.addPreserved<MachineFunctionAnalysis>();<br>
>>     AU.addPreserved<StackProtector>();<br>
>>   }<br>
>><br>
>> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -22,6 +22,9 @@<br>
>> #include "llvm/IR/Intrinsics.h"<br>
>> #include "llvm/IR/LLVMContext.h"<br>
>> #include "llvm/IR/Module.h"<br>
>> +#include "llvm/Support/Debug.h"<br>
>> +<br>
>> +#define DEBUG_TYPE "nvptx"<br>
>><br>
>> using namespace llvm;<br>
>><br>
>> @@ -104,7 +107,7 @@ bool NVPTXLowerAggrCopies::runOnFunction<br>
>>   SmallVector<MemTransferInst *, 4> aggrMemcpys;<br>
>>   SmallVector<MemSetInst *, 4> aggrMemsets;<br>
>><br>
>> -  const DataLayout *DL = &getAnalysis<DataLayoutPass>().getDataLayout();<br>
>> +  const DataLayout &DL = F.getParent()->getDataLayout();<br>
>>   LLVMContext &Context = F.getParent()->getContext();<br>
>><br>
>>   //<br>
>> @@ -120,7 +123,7 @@ bool NVPTXLowerAggrCopies::runOnFunction<br>
>>         if (load->hasOneUse() == false)<br>
>>           continue;<br>
>><br>
>> -        if (DL->getTypeStoreSize(load->getType()) < MaxAggrCopySize)<br>
>> +        if (DL.getTypeStoreSize(load->getType()) < MaxAggrCopySize)<br>
>>           continue;<br>
>><br>
>>         User *use = load->user_back();<br>
>> @@ -166,7 +169,7 @@ bool NVPTXLowerAggrCopies::runOnFunction<br>
>>     StoreInst *store = dyn_cast<StoreInst>(*load->user_begin());<br>
>>     Value *srcAddr = load->getOperand(0);<br>
>>     Value *dstAddr = store->getOperand(1);<br>
>> -    unsigned numLoads = DL->getTypeStoreSize(load->getType());<br>
>> +    unsigned numLoads = DL.getTypeStoreSize(load->getType());<br>
>>     Value *len = ConstantInt::get(Type::getInt32Ty(Context), numLoads);<br>
>><br>
>>     convertTransferToLoop(store, srcAddr, dstAddr, len, load->isVolatile(),<br>
>><br>
>> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h (original)<br>
>> +++ llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h Wed Mar  4 12:43:29 2015<br>
>> @@ -29,7 +29,6 @@ struct NVPTXLowerAggrCopies : public Fun<br>
>>   NVPTXLowerAggrCopies() : FunctionPass(ID) {}<br>
>><br>
>>   void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>> -    AU.addRequired<DataLayoutPass>();<br>
>>     AU.addPreserved<MachineFunctionAnalysis>();<br>
>>     AU.addPreserved<StackProtector>();<br>
>>   }<br>
>><br>
>> Modified: llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -171,8 +171,7 @@ bool PPCCTRLoops::runOnFunction(Function<br>
>>   LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>>   SE = &getAnalysis<ScalarEvolution>();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();<br>
>>   LibInfo = TLIP ? &TLIP->getTLI() : nullptr;<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Target/PowerPC/PPCLoopDataPrefetch.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCLoopDataPrefetch.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCLoopDataPrefetch.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/PowerPC/PPCLoopDataPrefetch.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/PowerPC/PPCLoopDataPrefetch.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -104,7 +104,7 @@ FunctionPass *llvm::createPPCLoopDataPre<br>
>> bool PPCLoopDataPrefetch::runOnFunction(Function &F) {<br>
>>   LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>>   SE = &getAnalysis<ScalarEvolution>();<br>
>> -  DL = F.getParent()->getDataLayout();<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>>   TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -36,6 +36,7 @@<br>
>> #include "llvm/IR/Dominators.h"<br>
>> #include "llvm/IR/Function.h"<br>
>> #include "llvm/IR/IntrinsicInst.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/Support/CommandLine.h"<br>
>> #include "llvm/Support/Debug.h"<br>
>> #include "llvm/Transforms/Scalar.h"<br>
>> @@ -84,7 +85,6 @@ namespace {<br>
>>     PPCTargetMachine *TM;<br>
>>     LoopInfo *LI;<br>
>>     ScalarEvolution *SE;<br>
>> -    const DataLayout *DL;<br>
>>   };<br>
>> }<br>
>><br>
>> @@ -141,9 +141,6 @@ bool PPCLoopPreIncPrep::runOnFunction(Fu<br>
>>   LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>>   SE = &getAnalysis<ScalarEvolution>();<br>
>><br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : 0;<br>
>> -<br>
>>   bool MadeChange = false;<br>
>><br>
>>   for (LoopInfo::iterator I = LI->begin(), E = LI->end();<br>
>> @@ -158,9 +155,6 @@ bool PPCLoopPreIncPrep::runOnFunction(Fu<br>
>> bool PPCLoopPreIncPrep::runOnLoop(Loop *L) {<br>
>>   bool MadeChange = false;<br>
>><br>
>> -  if (!DL)<br>
>> -    return MadeChange;<br>
>> -<br>
>>   // Only prep. the inner-most loop<br>
>>   if (!L->empty())<br>
>>     return MadeChange;<br>
>><br>
>> Modified: llvm/trunk/lib/Target/R600/AMDGPUPromoteAlloca.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUPromoteAlloca.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUPromoteAlloca.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/R600/AMDGPUPromoteAlloca.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/R600/AMDGPUPromoteAlloca.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -87,7 +87,7 @@ bool AMDGPUPromoteAlloca::runOnFunction(<br>
>>           continue;<br>
>>         if (Use->getParent()->getParent() == &F)<br>
>>           LocalMemAvailable -=<br>
>> -              Mod->getDataLayout()->getTypeAllocSize(GVTy->getElementType());<br>
>> +              Mod->getDataLayout().getTypeAllocSize(GVTy->getElementType());<br>
>>       }<br>
>>     }<br>
>>   }<br>
>> @@ -276,8 +276,8 @@ void AMDGPUPromoteAlloca::visitAlloca(Al<br>
>>   // value from the reqd_work_group_size function attribute if it is<br>
>>   // available.<br>
>>   unsigned WorkGroupSize = 256;<br>
>> -  int AllocaSize = WorkGroupSize *<br>
>> -      Mod->getDataLayout()->getTypeAllocSize(AllocaTy);<br>
>> +  int AllocaSize =<br>
>> +      WorkGroupSize * Mod->getDataLayout().getTypeAllocSize(AllocaTy);<br>
>><br>
>>   if (AllocaSize > LocalMemAvailable) {<br>
>>     DEBUG(dbgs() << " Not enough local memory to promote alloca.\n");<br>
>><br>
>> Modified: llvm/trunk/lib/Target/Target.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Target.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Target.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/Target.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/Target.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -34,7 +34,6 @@ inline LLVMTargetLibraryInfoRef wrap(con<br>
>> }<br>
>><br>
>> void llvm::initializeTarget(PassRegistry &Registry) {<br>
>> -  initializeDataLayoutPassPass(Registry);<br>
>>   initializeTargetLibraryInfoWrapperPassPass(Registry);<br>
>>   initializeTargetTransformInfoWrapperPassPass(Registry);<br>
>> }<br>
>> @@ -48,9 +47,6 @@ LLVMTargetDataRef LLVMCreateTargetData(c<br>
>> }<br>
>><br>
>> void LLVMAddTargetData(LLVMTargetDataRef TD, LLVMPassManagerRef PM) {<br>
>> -  // The DataLayoutPass must now be in sync with the module. Unfortunatelly we<br>
>> -  // cannot enforce that from the C api.<br>
>> -  unwrap(PM)->add(new DataLayoutPass());<br>
>> }<br>
>><br>
>> void LLVMAddTargetLibraryInfo(LLVMTargetLibraryInfoRef TLI,<br>
>><br>
>> Modified: llvm/trunk/lib/Target/TargetMachineC.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachineC.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachineC.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/TargetMachineC.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/TargetMachineC.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -198,8 +198,7 @@ static LLVMBool LLVMTargetMachineEmit(LL<br>
>>     *ErrorMessage = strdup(error.c_str());<br>
>>     return true;<br>
>>   }<br>
>> -  Mod->setDataLayout(td);<br>
>> -  pass.add(new DataLayoutPass());<br>
>> +  Mod->setDataLayout(*td);<br>
>><br>
>>   TargetMachine::CodeGenFileType ft;<br>
>>   switch (codegen) {<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/IPO/ArgumentPromotion.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -109,9 +109,6 @@ Pass *llvm::createArgumentPromotionPass(<br>
>> bool ArgPromotion::runOnSCC(CallGraphSCC &SCC) {<br>
>>   bool Changed = false, LocalChange;<br>
>><br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> -<br>
>>   do {  // Iterate until we stop promoting from this SCC.<br>
>>     LocalChange = false;<br>
>>     // Attempt to promote arguments from all functions in this SCC.<br>
>> @@ -210,6 +207,8 @@ CallGraphNode *ArgPromotion::PromoteArgu<br>
>>   // Make sure that it is local to this module.<br>
>>   if (!F || !F->hasLocalLinkage()) return nullptr;<br>
>><br>
>> +  DL = &F->getParent()->getDataLayout();<br>
>> +<br>
>>   // First check: see if there are any pointer arguments!  If not, quick exit.<br>
>>   SmallVector<Argument*, 16> PointerArgs;<br>
>>   for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); I != E; ++I)<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/IPO/ConstantMerge.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ConstantMerge.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/ConstantMerge.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/IPO/ConstantMerge.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/IPO/ConstantMerge.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -103,8 +103,7 @@ unsigned ConstantMerge::getAlignment(Glo<br>
>> }<br>
>><br>
>> bool ConstantMerge::runOnModule(Module &M) {<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &M.getDataLayout();<br>
>><br>
>>   // Find all the globals that are marked "used".  These cannot be merged.<br>
>>   SmallPtrSet<const GlobalValue*, 8> UsedGlobals;<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -86,7 +86,7 @@ namespace {<br>
>>                                const GlobalStatus &GS);<br>
>>     bool OptimizeEmptyGlobalCXXDtors(Function *CXAAtExitFn);<br>
>><br>
>> -    const DataLayout *DL;<br>
>> +    //    const DataLayout *DL;<br>
>>     TargetLibraryInfo *TLI;<br>
>>     SmallSet<const Comdat *, 8> NotDiscardableComdats;<br>
>>   };<br>
>> @@ -269,7 +269,7 @@ static bool CleanupPointerRootUsers(Glob<br>
>> /// quick scan over the use list to clean up the easy and obvious cruft.  This<br>
>> /// returns true if it made a change.<br>
>> static bool CleanupConstantGlobalUsers(Value *V, Constant *Init,<br>
>> -                                       const DataLayout *DL,<br>
>> +                                       const DataLayout &DL,<br>
>>                                        TargetLibraryInfo *TLI) {<br>
>>   bool Changed = false;<br>
>>   // Note that we need to use a weak value handle for the worklist items. When<br>
>> @@ -318,8 +318,8 @@ static bool CleanupConstantGlobalUsers(V<br>
>>       // and will invalidate our notion of what Init is.<br>
>>       Constant *SubInit = nullptr;<br>
>>       if (!isa<ConstantExpr>(GEP->getOperand(0))) {<br>
>> -        ConstantExpr *CE =<br>
>> -          dyn_cast_or_null<ConstantExpr>(ConstantFoldInstruction(GEP, DL, TLI));<br>
>> +        ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(<br>
>> +            ConstantFoldInstruction(GEP, &DL, TLI));<br>
>>         if (Init && CE && CE->getOpcode() == Instruction::GetElementPtr)<br>
>>           SubInit = ConstantFoldLoadThroughGEPConstantExpr(Init, CE);<br>
>><br>
>> @@ -739,7 +739,7 @@ static bool OptimizeAwayTrappingUsesOfVa<br>
>> /// if the loaded value is dynamically null, then we know that they cannot be<br>
>> /// reachable with a null optimize away the load.<br>
>> static bool OptimizeAwayTrappingUsesOfLoads(GlobalVariable *GV, Constant *LV,<br>
>> -                                            const DataLayout *DL,<br>
>> +                                            const DataLayout &DL,<br>
>>                                             TargetLibraryInfo *TLI) {<br>
>>   bool Changed = false;<br>
>><br>
>> @@ -802,11 +802,11 @@ static bool OptimizeAwayTrappingUsesOfLo<br>
>><br>
>> /// ConstantPropUsersOf - Walk the use list of V, constant folding all of the<br>
>> /// instructions that are foldable.<br>
>> -static void ConstantPropUsersOf(Value *V, const DataLayout *DL,<br>
>> +static void ConstantPropUsersOf(Value *V, const DataLayout &DL,<br>
>>                                 TargetLibraryInfo *TLI) {<br>
>>   for (Value::user_iterator UI = V->user_begin(), E = V->user_end(); UI != E; )<br>
>>     if (Instruction *I = dyn_cast<Instruction>(*UI++))<br>
>> -      if (Constant *NewC = ConstantFoldInstruction(I, DL, TLI)) {<br>
>> +      if (Constant *NewC = ConstantFoldInstruction(I, &DL, TLI)) {<br>
>>         I->replaceAllUsesWith(NewC);<br>
>><br>
>>         // Advance UI to the next non-I use to avoid invalidating it!<br>
>> @@ -822,12 +822,10 @@ static void ConstantPropUsersOf(Value *V<br>
>> /// the specified malloc.  Because it is always the result of the specified<br>
>> /// malloc, there is no reason to actually DO the malloc.  Instead, turn the<br>
>> /// malloc into a global, and any loads of GV as uses of the new global.<br>
>> -static GlobalVariable *OptimizeGlobalAddressOfMalloc(GlobalVariable *GV,<br>
>> -                                                     CallInst *CI,<br>
>> -                                                     Type *AllocTy,<br>
>> -                                                     ConstantInt *NElements,<br>
>> -                                                     const DataLayout *DL,<br>
>> -                                                     TargetLibraryInfo *TLI) {<br>
>> +static GlobalVariable *<br>
>> +OptimizeGlobalAddressOfMalloc(GlobalVariable *GV, CallInst *CI, Type *AllocTy,<br>
>> +                              ConstantInt *NElements, const DataLayout &DL,<br>
>> +                              TargetLibraryInfo *TLI) {<br>
>>   DEBUG(errs() << "PROMOTING GLOBAL: " << *GV << "  CALL = " << *CI << '\n');<br>
>><br>
>>   Type *GlobalType;<br>
>> @@ -1271,7 +1269,7 @@ static void RewriteUsesOfLoadForHeapSRoA<br>
>> /// PerformHeapAllocSRoA - CI is an allocation of an array of structures.  Break<br>
>> /// it up into multiple allocations of arrays of the fields.<br>
>> static GlobalVariable *PerformHeapAllocSRoA(GlobalVariable *GV, CallInst *CI,<br>
>> -                                            Value *NElems, const DataLayout *DL,<br>
>> +                                            Value *NElems, const DataLayout &DL,<br>
>>                                             const TargetLibraryInfo *TLI) {<br>
>>   DEBUG(dbgs() << "SROA HEAP ALLOC: " << *GV << "  MALLOC = " << *CI << '\n');<br>
>>   Type *MAT = getMallocAllocatedType(CI, TLI);<br>
>> @@ -1301,10 +1299,10 @@ static GlobalVariable *PerformHeapAllocS<br>
>>                          GV->getThreadLocalMode());<br>
>>     FieldGlobals.push_back(NGV);<br>
>><br>
>> -    unsigned TypeSize = DL->getTypeAllocSize(FieldTy);<br>
>> +    unsigned TypeSize = DL.getTypeAllocSize(FieldTy);<br>
>>     if (StructType *ST = dyn_cast<StructType>(FieldTy))<br>
>> -      TypeSize = DL->getStructLayout(ST)->getSizeInBytes();<br>
>> -    Type *IntPtrTy = DL->getIntPtrType(CI->getType());<br>
>> +      TypeSize = DL.getStructLayout(ST)->getSizeInBytes();<br>
>> +    Type *IntPtrTy = DL.getIntPtrType(CI->getType());<br>
>>     Value *NMI = CallInst::CreateMalloc(CI, IntPtrTy, FieldTy,<br>
>>                                         ConstantInt::get(IntPtrTy, TypeSize),<br>
>>                                         NElems, nullptr,<br>
>> @@ -1459,16 +1457,12 @@ static GlobalVariable *PerformHeapAllocS<br>
>> /// TryToOptimizeStoreOfMallocToGlobal - This function is called when we see a<br>
>> /// pointer global variable with a single value stored it that is a malloc or<br>
>> /// cast of malloc.<br>
>> -static bool TryToOptimizeStoreOfMallocToGlobal(GlobalVariable *GV,<br>
>> -                                               CallInst *CI,<br>
>> +static bool TryToOptimizeStoreOfMallocToGlobal(GlobalVariable *GV, CallInst *CI,<br>
>>                                                Type *AllocTy,<br>
>>                                                AtomicOrdering Ordering,<br>
>>                                                Module::global_iterator &GVI,<br>
>> -                                               const DataLayout *DL,<br>
>> +                                               const DataLayout &DL,<br>
>>                                                TargetLibraryInfo *TLI) {<br>
>> -  if (!DL)<br>
>> -    return false;<br>
>> -<br>
>>   // If this is a malloc of an abstract type, don't touch it.<br>
>>   if (!AllocTy->isSized())<br>
>>     return false;<br>
>> @@ -1496,7 +1490,7 @@ static bool TryToOptimizeStoreOfMallocTo<br>
>>   // This eliminates dynamic allocation, avoids an indirection accessing the<br>
>>   // data, and exposes the resultant global to further GlobalOpt.<br>
>>   // We cannot optimize the malloc if we cannot determine malloc array size.<br>
>> -  Value *NElems = getMallocArraySize(CI, DL, TLI, true);<br>
>> +  Value *NElems = getMallocArraySize(CI, &DL, TLI, true);<br>
>>   if (!NElems)<br>
>>     return false;<br>
>><br>
>> @@ -1504,7 +1498,7 @@ static bool TryToOptimizeStoreOfMallocTo<br>
>>     // Restrict this transformation to only working on small allocations<br>
>>     // (2048 bytes currently), as we don't want to introduce a 16M global or<br>
>>     // something.<br>
>> -    if (NElements->getZExtValue() * DL->getTypeAllocSize(AllocTy) < 2048) {<br>
>> +    if (NElements->getZExtValue() * DL.getTypeAllocSize(AllocTy) < 2048) {<br>
>>       GVI = OptimizeGlobalAddressOfMalloc(GV, CI, AllocTy, NElements, DL, TLI);<br>
>>       return true;<br>
>>     }<br>
>> @@ -1534,8 +1528,8 @@ static bool TryToOptimizeStoreOfMallocTo<br>
>>     // If this is a fixed size array, transform the Malloc to be an alloc of<br>
>>     // structs.  malloc [100 x struct],1 -> malloc struct, 100<br>
>>     if (ArrayType *AT = dyn_cast<ArrayType>(getMallocAllocatedType(CI, TLI))) {<br>
>> -      Type *IntPtrTy = DL->getIntPtrType(CI->getType());<br>
>> -      unsigned TypeSize = DL->getStructLayout(AllocSTy)->getSizeInBytes();<br>
>> +      Type *IntPtrTy = DL.getIntPtrType(CI->getType());<br>
>> +      unsigned TypeSize = DL.getStructLayout(AllocSTy)->getSizeInBytes();<br>
>>       Value *AllocSize = ConstantInt::get(IntPtrTy, TypeSize);<br>
>>       Value *NumElements = ConstantInt::get(IntPtrTy, AT->getNumElements());<br>
>>       Instruction *Malloc = CallInst::CreateMalloc(CI, IntPtrTy, AllocSTy,<br>
>> @@ -1550,7 +1544,7 @@ static bool TryToOptimizeStoreOfMallocTo<br>
>>         CI = cast<CallInst>(Malloc);<br>
>>     }<br>
>><br>
>> -    GVI = PerformHeapAllocSRoA(GV, CI, getMallocArraySize(CI, DL, TLI, true),<br>
>> +    GVI = PerformHeapAllocSRoA(GV, CI, getMallocArraySize(CI, &DL, TLI, true),<br>
>>                                DL, TLI);<br>
>>     return true;<br>
>>   }<br>
>> @@ -1563,7 +1557,7 @@ static bool TryToOptimizeStoreOfMallocTo<br>
>> static bool OptimizeOnceStoredGlobal(GlobalVariable *GV, Value *StoredOnceVal,<br>
>>                                      AtomicOrdering Ordering,<br>
>>                                      Module::global_iterator &GVI,<br>
>> -                                     const DataLayout *DL,<br>
>> +                                     const DataLayout &DL,<br>
>>                                      TargetLibraryInfo *TLI) {<br>
>>   // Ignore no-op GEPs and bitcasts.<br>
>>   StoredOnceVal = StoredOnceVal->stripPointerCasts();<br>
>> @@ -1733,6 +1727,7 @@ bool GlobalOpt::ProcessGlobal(GlobalVari<br>
>> bool GlobalOpt::ProcessInternalGlobal(GlobalVariable *GV,<br>
>>                                       Module::global_iterator &GVI,<br>
>>                                       const GlobalStatus &GS) {<br>
>> +  auto &DL = GV->getParent()->getDataLayout();<br>
>>   // If this is a first class global and has only one accessing function<br>
>>   // and this function is main (which we know is not recursive), we replace<br>
>>   // the global with a local alloca in this function.<br>
>> @@ -1804,12 +1799,10 @@ bool GlobalOpt::ProcessInternalGlobal(Gl<br>
>>     ++NumMarked;<br>
>>     return true;<br>
>>   } else if (!GV->getInitializer()->getType()->isSingleValueType()) {<br>
>> -    if (DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>()) {<br>
>> -      const DataLayout &DL = DLP->getDataLayout();<br>
>> -      if (GlobalVariable *FirstNewGV = SRAGlobal(GV, DL)) {<br>
>> -        GVI = FirstNewGV;  // Don't skip the newly produced globals!<br>
>> -        return true;<br>
>> -      }<br>
>> +    const DataLayout &DL = GV->getParent()->getDataLayout();<br>
>> +    if (GlobalVariable *FirstNewGV = SRAGlobal(GV, DL)) {<br>
>> +      GVI = FirstNewGV; // Don't skip the newly produced globals!<br>
>> +      return true;<br>
>>     }<br>
>>   } else if (GS.StoredType == GlobalStatus::StoredOnce) {<br>
>>     // If the initial value for the global was an undef value, and if only<br>
>> @@ -1954,7 +1947,8 @@ bool GlobalOpt::OptimizeGlobalVars(Modul<br>
>>     // Simplify the initializer.<br>
>>     if (GV->hasInitializer())<br>
>>       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(GV->getInitializer())) {<br>
>> -        Constant *New = ConstantFoldConstantExpression(CE, DL, TLI);<br>
>> +        auto &DL = M.getDataLayout();<br>
>> +        Constant *New = ConstantFoldConstantExpression(CE, &DL, TLI);<br>
>>         if (New && New != CE)<br>
>>           GV->setInitializer(New);<br>
>>       }<br>
>> @@ -1971,9 +1965,8 @@ bool GlobalOpt::OptimizeGlobalVars(Modul<br>
>><br>
>> static inline bool<br>
>> isSimpleEnoughValueToCommit(Constant *C,<br>
>> -                            SmallPtrSetImpl<Constant*> &SimpleConstants,<br>
>> -                            const DataLayout *DL);<br>
>> -<br>
>> +                            SmallPtrSetImpl<Constant *> &SimpleConstants,<br>
>> +                            const DataLayout &DL);<br>
>><br>
>> /// isSimpleEnoughValueToCommit - Return true if the specified constant can be<br>
>> /// handled by the code generator.  We don't want to generate something like:<br>
>> @@ -1983,9 +1976,10 @@ isSimpleEnoughValueToCommit(Constant *C,<br>
>> /// This function should be called if C was not found (but just got inserted)<br>
>> /// in SimpleConstants to avoid having to rescan the same constants all the<br>
>> /// time.<br>
>> -static bool isSimpleEnoughValueToCommitHelper(Constant *C,<br>
>> -                                   SmallPtrSetImpl<Constant*> &SimpleConstants,<br>
>> -                                   const DataLayout *DL) {<br>
>> +static bool<br>
>> +isSimpleEnoughValueToCommitHelper(Constant *C,<br>
>> +                                  SmallPtrSetImpl<Constant *> &SimpleConstants,<br>
>> +                                  const DataLayout &DL) {<br>
>>   // Simple global addresses are supported, do not allow dllimport or<br>
>>   // thread-local globals.<br>
>>   if (auto *GV = dyn_cast<GlobalValue>(C))<br>
>> @@ -2019,8 +2013,8 @@ static bool isSimpleEnoughValueToCommitH<br>
>>   case Instruction::PtrToInt:<br>
>>     // int <=> ptr is fine if the int type is the same size as the<br>
>>     // pointer type.<br>
>> -    if (!DL || DL->getTypeSizeInBits(CE->getType()) !=<br>
>> -               DL->getTypeSizeInBits(CE->getOperand(0)->getType()))<br>
>> +    if (DL.getTypeSizeInBits(CE->getType()) !=<br>
>> +        DL.getTypeSizeInBits(CE->getOperand(0)->getType()))<br>
>>       return false;<br>
>>     return isSimpleEnoughValueToCommit(CE->getOperand(0), SimpleConstants, DL);<br>
>><br>
>> @@ -2042,8 +2036,8 @@ static bool isSimpleEnoughValueToCommitH<br>
>><br>
>> static inline bool<br>
>> isSimpleEnoughValueToCommit(Constant *C,<br>
>> -                            SmallPtrSetImpl<Constant*> &SimpleConstants,<br>
>> -                            const DataLayout *DL) {<br>
>> +                            SmallPtrSetImpl<Constant *> &SimpleConstants,<br>
>> +                            const DataLayout &DL) {<br>
>>   // If we already checked this constant, we win.<br>
>>   if (!SimpleConstants.insert(C).second)<br>
>>     return true;<br>
>> @@ -2174,8 +2168,8 @@ namespace {<br>
>> /// Once an evaluation call fails, the evaluation object should not be reused.<br>
>> class Evaluator {<br>
>> public:<br>
>> -  Evaluator(const DataLayout *DL, const TargetLibraryInfo *TLI)<br>
>> -    : DL(DL), TLI(TLI) {<br>
>> +  Evaluator(const DataLayout &DL, const TargetLibraryInfo *TLI)<br>
>> +      : DL(DL), TLI(TLI) {<br>
>>     ValueStack.emplace_back();<br>
>>   }<br>
>><br>
>> @@ -2249,7 +2243,7 @@ private:<br>
>>   /// simple enough to live in a static initializer of a global.<br>
>>   SmallPtrSet<Constant*, 8> SimpleConstants;<br>
>><br>
>> -  const DataLayout *DL;<br>
>> +  const DataLayout &DL;<br>
>>   const TargetLibraryInfo *TLI;<br>
>> };<br>
>><br>
>> @@ -2302,7 +2296,7 @@ bool Evaluator::EvaluateBlock(BasicBlock<br>
>>       Constant *Ptr = getVal(SI->getOperand(1));<br>
>>       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr)) {<br>
>>         DEBUG(dbgs() << "Folding constant ptr expression: " << *Ptr);<br>
>> -        Ptr = ConstantFoldConstantExpression(CE, DL, TLI);<br>
>> +        Ptr = ConstantFoldConstantExpression(CE, &DL, TLI);<br>
>>         DEBUG(dbgs() << "; To: " << *Ptr << "\n");<br>
>>       }<br>
>>       if (!isSimpleEnoughPointerToCommit(Ptr)) {<br>
>> @@ -2347,7 +2341,7 @@ bool Evaluator::EvaluateBlock(BasicBlock<br>
>><br>
>>               Ptr = ConstantExpr::getGetElementPtr(Ptr, IdxList);<br>
>>               if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr))<br>
>> -                Ptr = ConstantFoldConstantExpression(CE, DL, TLI);<br>
>> +                Ptr = ConstantFoldConstantExpression(CE, &DL, TLI);<br>
>><br>
>>             // If we can't improve the situation by introspecting NewTy,<br>
>>             // we have to give up.<br>
>> @@ -2422,7 +2416,7 @@ bool Evaluator::EvaluateBlock(BasicBlock<br>
>><br>
>>       Constant *Ptr = getVal(LI->getOperand(0));<br>
>>       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr)) {<br>
>> -        Ptr = ConstantFoldConstantExpression(CE, DL, TLI);<br>
>> +        Ptr = ConstantFoldConstantExpression(CE, &DL, TLI);<br>
>>         DEBUG(dbgs() << "Found a constant pointer expression, constant "<br>
>>               "folding: " << *Ptr << "\n");<br>
>>       }<br>
>> @@ -2498,9 +2492,9 @@ bool Evaluator::EvaluateBlock(BasicBlock<br>
>>           Value *Ptr = PtrArg->stripPointerCasts();<br>
>>           if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Ptr)) {<br>
>>             Type *ElemTy = cast<PointerType>(GV->getType())->getElementType();<br>
>> -            if (DL && !Size->isAllOnesValue() &&<br>
>> +            if (!Size->isAllOnesValue() &&<br>
>>                 Size->getValue().getLimitedValue() >=<br>
>> -                DL->getTypeStoreSize(ElemTy)) {<br>
>> +                    DL.getTypeStoreSize(ElemTy)) {<br>
>>               Invariants.insert(GV);<br>
>>               DEBUG(dbgs() << "Found a global var that is an invariant: " << *GV<br>
>>                     << "\n");<br>
>> @@ -2606,7 +2600,7 @@ bool Evaluator::EvaluateBlock(BasicBlock<br>
>><br>
>>     if (!CurInst->use_empty()) {<br>
>>       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(InstResult))<br>
>> -        InstResult = ConstantFoldConstantExpression(CE, DL, TLI);<br>
>> +        InstResult = ConstantFoldConstantExpression(CE, &DL, TLI);<br>
>><br>
>>       setVal(CurInst, InstResult);<br>
>>     }<br>
>> @@ -2689,7 +2683,7 @@ bool Evaluator::EvaluateFunction(Functio<br>
>><br>
>> /// EvaluateStaticConstructor - Evaluate static constructors in the function, if<br>
>> /// we can.  Return true if we can, false otherwise.<br>
>> -static bool EvaluateStaticConstructor(Function *F, const DataLayout *DL,<br>
>> +static bool EvaluateStaticConstructor(Function *F, const DataLayout &DL,<br>
>>                                       const TargetLibraryInfo *TLI) {<br>
>>   // Call the function.<br>
>>   Evaluator Eval(DL, TLI);<br>
>> @@ -3040,8 +3034,7 @@ bool GlobalOpt::OptimizeEmptyGlobalCXXDt<br>
>> bool GlobalOpt::runOnModule(Module &M) {<br>
>>   bool Changed = false;<br>
>><br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  auto &DL = M.getDataLayout();<br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>><br>
>>   bool LocalChange = true;<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -121,8 +121,7 @@ static void AdjustCallerSSPLevel(Functio<br>
>> /// any new allocas to the set if not possible.<br>
>> static bool InlineCallIfPossible(CallSite CS, InlineFunctionInfo &IFI,<br>
>>                                  InlinedArrayAllocasTy &InlinedArrayAllocas,<br>
>> -                                 int InlineHistory, bool InsertLifetime,<br>
>> -                                 const DataLayout *DL) {<br>
>> +                                 int InlineHistory, bool InsertLifetime) {<br>
>>   Function *Callee = CS.getCalledFunction();<br>
>>   Function *Caller = CS.getCaller();<br>
>><br>
>> @@ -198,11 +197,6 @@ static bool InlineCallIfPossible(CallSit<br>
>><br>
>>       unsigned Align1 = AI->getAlignment(),<br>
>>                Align2 = AvailableAlloca->getAlignment();<br>
>> -      // If we don't have data layout information, and only one alloca is using<br>
>> -      // the target default, then we can't safely merge them because we can't<br>
>> -      // pick the greater alignment.<br>
>> -      if (!DL && (!Align1 || !Align2) && Align1 != Align2)<br>
>> -        continue;<br>
>><br>
>>       // The available alloca has to be in the right function, not in some other<br>
>>       // function in this SCC.<br>
>> @@ -223,8 +217,8 @@ static bool InlineCallIfPossible(CallSit<br>
>><br>
>>       if (Align1 != Align2) {<br>
>>         if (!Align1 || !Align2) {<br>
>> -          assert(DL && "DataLayout required to compare default alignments");<br>
>> -          unsigned TypeAlign = DL->getABITypeAlignment(AI->getAllocatedType());<br>
>> +          const DataLayout &DL = Caller->getParent()->getDataLayout();<br>
>> +          unsigned TypeAlign = DL.getABITypeAlignment(AI->getAllocatedType());<br>
>><br>
>>           Align1 = Align1 ? Align1 : TypeAlign;<br>
>>           Align2 = Align2 ? Align2 : TypeAlign;<br>
>> @@ -432,8 +426,6 @@ static bool InlineHistoryIncludes(Functi<br>
>> bool Inliner::runOnSCC(CallGraphSCC &SCC) {<br>
>>   CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph();<br>
>>   AssumptionCacheTracker *ACT = &getAnalysis<AssumptionCacheTracker>();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>>   auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();<br>
>>   const TargetLibraryInfo *TLI = TLIP ? &TLIP->getTLI() : nullptr;<br>
>>   AliasAnalysis *AA = &getAnalysis<AliasAnalysis>();<br>
>> @@ -495,7 +487,7 @@ bool Inliner::runOnSCC(CallGraphSCC &SCC<br>
>><br>
>><br>
>>   InlinedArrayAllocasTy InlinedArrayAllocas;<br>
>> -  InlineFunctionInfo InlineInfo(&CG, DL, AA, ACT);<br>
>> +  InlineFunctionInfo InlineInfo(&CG, AA, ACT);<br>
>><br>
>>   // Now that we have all of the call sites, loop over them and inline them if<br>
>>   // it looks profitable to do so.<br>
>> @@ -553,7 +545,7 @@ bool Inliner::runOnSCC(CallGraphSCC &SCC<br>
>><br>
>>         // Attempt to inline the function.<br>
>>         if (!InlineCallIfPossible(CS, InlineInfo, InlinedArrayAllocas,<br>
>> -                                  InlineHistoryID, InsertLifetime, DL)) {<br>
>> +                                  InlineHistoryID, InsertLifetime)) {<br>
>>           emitOptimizationRemarkMissed(CallerCtx, DEBUG_TYPE, *Caller, DLoc,<br>
>>                                        Twine(Callee->getName() +<br>
>>                                              " will not be inlined into " +<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/IPO/LowerBitSets.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/LowerBitSets.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/LowerBitSets.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/IPO/LowerBitSets.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/IPO/LowerBitSets.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -234,10 +234,7 @@ ModulePass *llvm::createLowerBitSetsPass<br>
>><br>
>> bool LowerBitSets::doInitialization(Module &Mod) {<br>
>>   M = &Mod;<br>
>> -<br>
>> -  DL = M->getDataLayout();<br>
>> -  if (!DL)<br>
>> -    report_fatal_error("Data layout required");<br>
>> +  DL = &Mod.getDataLayout();<br>
>><br>
>>   Int1Ty = Type::getInt1Ty(M->getContext());<br>
>>   Int8Ty = Type::getInt8Ty(M->getContext());<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1212,8 +1212,7 @@ bool MergeFunctions::doSanityCheck(std::<br>
>><br>
>> bool MergeFunctions::runOnModule(Module &M) {<br>
>>   bool Changed = false;<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &M.getDataLayout();<br>
>><br>
>>   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {<br>
>>     if (!I->isDeclaration() && !I->hasAvailableExternallyLinkage())<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -2910,17 +2910,18 @@ static bool prepareICWorklistFromFunctio<br>
>>   return MadeIRChange;<br>
>> }<br>
>><br>
>> -static bool combineInstructionsOverFunction(<br>
>> -    Function &F, InstCombineWorklist &Worklist, AssumptionCache &AC,<br>
>> -    TargetLibraryInfo &TLI, DominatorTree &DT, const DataLayout *DL = nullptr,<br>
>> -    LoopInfo *LI = nullptr) {<br>
>> +static bool<br>
>> +combineInstructionsOverFunction(Function &F, InstCombineWorklist &Worklist,<br>
>> +                                AssumptionCache &AC, TargetLibraryInfo &TLI,<br>
>> +                                DominatorTree &DT, LoopInfo *LI = nullptr) {<br>
>>   // Minimizing size?<br>
>>   bool MinimizeSize = F.hasFnAttribute(Attribute::MinSize);<br>
>> +  const DataLayout &DL = F.getParent()->getDataLayout();<br>
>><br>
>>   /// Builder - This is an IRBuilder that automatically inserts new<br>
>>   /// instructions into the worklist when they are created.<br>
>>   IRBuilder<true, TargetFolder, InstCombineIRInserter> Builder(<br>
>> -      F.getContext(), TargetFolder(DL), InstCombineIRInserter(Worklist, &AC));<br>
>> +      F.getContext(), TargetFolder(&DL), InstCombineIRInserter(Worklist, &AC));<br>
>><br>
>>   // Lower dbg.declare intrinsics otherwise their value may be clobbered<br>
>>   // by instcombiner.<br>
>> @@ -2934,10 +2935,10 @@ static bool combineInstructionsOverFunct<br>
>>                  << F.getName() << "\n");<br>
>><br>
>>     bool Changed = false;<br>
>> -    if (prepareICWorklistFromFunction(F, DL, &TLI, Worklist))<br>
>> +    if (prepareICWorklistFromFunction(F, &DL, &TLI, Worklist))<br>
>>       Changed = true;<br>
>><br>
>> -    InstCombiner IC(Worklist, &Builder, MinimizeSize, &AC, &TLI, &DT, DL, LI);<br>
>> +    InstCombiner IC(Worklist, &Builder, MinimizeSize, &AC, &TLI, &DT, &DL, LI);<br>
>>     if (IC.run())<br>
>>       Changed = true;<br>
>><br>
>> @@ -2950,15 +2951,13 @@ static bool combineInstructionsOverFunct<br>
>><br>
>> PreservedAnalyses InstCombinePass::run(Function &F,<br>
>>                                        AnalysisManager<Function> *AM) {<br>
>> -  auto *DL = F.getParent()->getDataLayout();<br>
>> -<br>
>>   auto &AC = AM->getResult<AssumptionAnalysis>(F);<br>
>>   auto &DT = AM->getResult<DominatorTreeAnalysis>(F);<br>
>>   auto &TLI = AM->getResult<TargetLibraryAnalysis>(F);<br>
>><br>
>>   auto *LI = AM->getCachedResult<LoopAnalysis>(F);<br>
>><br>
>> -  if (!combineInstructionsOverFunction(F, Worklist, AC, TLI, DT, DL, LI))<br>
>> +  if (!combineInstructionsOverFunction(F, Worklist, AC, TLI, DT, LI))<br>
>>     // No changes, all analyses are preserved.<br>
>>     return PreservedAnalyses::all();<br>
>><br>
>> @@ -3007,12 +3006,10 @@ bool InstructionCombiningPass::runOnFunc<br>
>>   auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>><br>
>>   // Optional analyses.<br>
>> -  auto *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  auto *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>>   auto *LIWP = getAnalysisIfAvailable<LoopInfoWrapperPass>();<br>
>>   auto *LI = LIWP ? &LIWP->getLoopInfo() : nullptr;<br>
>><br>
>> -  return combineInstructionsOverFunction(F, Worklist, AC, TLI, DT, DL, LI);<br>
>> +  return combineInstructionsOverFunction(F, Worklist, AC, TLI, DT, LI);<br>
>> }<br>
>><br>
>> char InstructionCombiningPass::ID = 0;<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -392,7 +392,6 @@ struct AddressSanitizer : public Functio<br>
>>   }<br>
>>   void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>>     AU.addRequired<DominatorTreeWrapperPass>();<br>
>> -    AU.addRequired<DataLayoutPass>();<br>
>>     AU.addRequired<TargetLibraryInfoWrapperPass>();<br>
>>   }<br>
>>   uint64_t getAllocaSizeInBytes(AllocaInst *AI) const {<br>
>> @@ -1321,9 +1320,7 @@ bool AddressSanitizerModule::InstrumentG<br>
>> }<br>
>><br>
>> bool AddressSanitizerModule::runOnModule(Module &M) {<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  if (!DLP) return false;<br>
>> -  DL = &DLP->getDataLayout();<br>
>> +  DL = &M.getDataLayout();<br>
>>   C = &(M.getContext());<br>
>>   int LongSize = DL->getPointerSizeInBits();<br>
>>   IntptrTy = Type::getIntNTy(*C, LongSize);<br>
>> @@ -1399,9 +1396,7 @@ void AddressSanitizer::initializeCallbac<br>
>> // virtual<br>
>> bool AddressSanitizer::doInitialization(Module &M) {<br>
>>   // Initialize the private fields. No one has accessed them before.<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  if (!DLP) report_fatal_error("data layout missing");<br>
>> -  DL = &DLP->getDataLayout();<br>
>> +  DL = &M.getDataLayout();<br>
>><br>
>>   GlobalsMD.init(M);<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/BoundsChecking.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/BoundsChecking.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/BoundsChecking.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Instrumentation/BoundsChecking.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Instrumentation/BoundsChecking.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -49,7 +49,6 @@ namespace {<br>
>>     bool runOnFunction(Function &F) override;<br>
>><br>
>>     void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>> -      AU.addRequired<DataLayoutPass>();<br>
>>       AU.addRequired<TargetLibraryInfoWrapperPass>();<br>
>>     }<br>
>><br>
>> @@ -165,7 +164,7 @@ bool BoundsChecking::instrument(Value *P<br>
>> }<br>
>><br>
>> bool BoundsChecking::runOnFunction(Function &F) {<br>
>> -  DL = &getAnalysis<DataLayoutPass>().getDataLayout();<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>><br>
>>   TrapBB = nullptr;<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -422,10 +422,7 @@ bool DataFlowSanitizer::doInitialization<br>
>>   bool IsMIPS64 = TargetTriple.getArch() == llvm::Triple::mips64 ||<br>
>>                   TargetTriple.getArch() == llvm::Triple::mips64el;<br>
>><br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  if (!DLP)<br>
>> -    report_fatal_error("data layout missing");<br>
>> -  DL = &DLP->getDataLayout();<br>
>> +  DL = &M.getDataLayout();<br>
>><br>
>>   Mod = &M;<br>
>>   Ctx = &M.getContext();<br>
>> @@ -593,8 +590,6 @@ Constant *DataFlowSanitizer::getOrBuildT<br>
>> }<br>
>><br>
>> bool DataFlowSanitizer::runOnModule(Module &M) {<br>
>> -  if (!DL)<br>
>> -    return false;<br>
>><br>
>>   if (ABIList.isIn(M, "skip"))<br>
>>     return false;<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -449,10 +449,7 @@ void MemorySanitizer::initializeCallback<br>
>> ///<br>
>> /// inserts a call to __msan_init to the module's constructor list.<br>
>> bool MemorySanitizer::doInitialization(Module &M) {<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  if (!DLP)<br>
>> -    report_fatal_error("data layout missing");<br>
>> -  DL = &DLP->getDataLayout();<br>
>> +  DL = &M.getDataLayout();<br>
>><br>
>>   Triple TargetTriple(M.getTargetTriple());<br>
>>   switch (TargetTriple.getOS()) {<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -104,10 +104,6 @@ class SanitizerCoverageModule : public M<br>
>>     return "SanitizerCoverageModule";<br>
>>   }<br>
>><br>
>> -  void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>> -    AU.addRequired<DataLayoutPass>();<br>
>> -  }<br>
>> -<br>
>>  private:<br>
>>   void InjectCoverageForIndirectCalls(Function &F,<br>
>>                                       ArrayRef<Instruction *> IndirCalls);<br>
>> @@ -144,8 +140,8 @@ static Function *checkInterfaceFunction(<br>
>> bool SanitizerCoverageModule::runOnModule(Module &M) {<br>
>>   if (!CoverageLevel) return false;<br>
>>   C = &(M.getContext());<br>
>> -  DataLayoutPass *DLP = &getAnalysis<DataLayoutPass>();<br>
>> -  IntptrTy = Type::getIntNTy(*C, DLP->getDataLayout().getPointerSizeInBits());<br>
>> +  auto &DL = M.getDataLayout();<br>
>> +  IntptrTy = Type::getIntNTy(*C, DL.getPointerSizeInBits());<br>
>>   Type *VoidTy = Type::getVoidTy(*C);<br>
>>   IRBuilder<> IRB(*C);<br>
>>   Type *Int8PtrTy = PointerType::getUnqual(IRB.getInt8Ty());<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -230,10 +230,7 @@ void ThreadSanitizer::initializeCallback<br>
>> }<br>
>><br>
>> bool ThreadSanitizer::doInitialization(Module &M) {<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  if (!DLP)<br>
>> -    report_fatal_error("data layout missing");<br>
>> -  DL = &DLP->getDataLayout();<br>
>> +  DL = &M.getDataLayout();<br>
>><br>
>>   // Always insert a call to __tsan_init into the module's CTORs.<br>
>>   IRBuilder<> IRB(M.getContext());<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -46,6 +46,11 @@ ImmutablePass *llvm::createObjCARCAliasA<br>
>>   return new ObjCARCAliasAnalysis();<br>
>> }<br>
>><br>
>> +bool ObjCARCAliasAnalysis::doInitialization(Module &M) {<br>
>> +  InitializeAliasAnalysis(this, &M.getDataLayout());<br>
>> +  return true;<br>
>> +}<br>
>> +<br>
>> void<br>
>> ObjCARCAliasAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {<br>
>>   AU.setPreservesAll();<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.h?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.h?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.h (original)<br>
>> +++ llvm/trunk/lib/Transforms/ObjCARC/ObjCARCAliasAnalysis.h Wed Mar  4 12:43:29 2015<br>
>> @@ -44,9 +44,7 @@ namespace objcarc {<br>
>>     }<br>
>><br>
>>   private:<br>
>> -    void initializePass() override {<br>
>> -      InitializeAliasAnalysis(this);<br>
>> -    }<br>
>> +    bool doInitialization(Module &M) override;<br>
>><br>
>>     /// This method is used when a pass implements an analysis interface through<br>
>>     /// multiple inheritance.  If needed, it should override this to adjust the<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -32,6 +32,7 @@<br>
>> #include "llvm/IR/IntrinsicInst.h"<br>
>> #include "llvm/IR/Intrinsics.h"<br>
>> #include "llvm/IR/DataLayout.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/Support/Debug.h"<br>
>> #include "llvm/Support/raw_ostream.h"<br>
>> using namespace llvm;<br>
>> @@ -413,8 +414,7 @@ bool AlignmentFromAssumptions::runOnFunc<br>
>>   auto &AC = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>>   SE = &getAnalysis<ScalarEvolution>();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>><br>
>>   NewDestAlignments.clear();<br>
>>   NewSrcAlignments.clear();<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/BDCE.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/BDCE.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/BDCE.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/BDCE.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/BDCE.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -263,7 +263,7 @@ bool BDCE::runOnFunction(Function& F) {<br>
>>     return false;<br>
>><br>
>>   AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>> -  DL = F.getParent()->getDataLayout();<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>><br>
>>   DenseMap<Instruction *, APInt> AliveBits;<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -68,8 +68,7 @@ bool ConstantPropagation::runOnFunction(<br>
>>       WorkList.insert(&*i);<br>
>>   }<br>
>>   bool Changed = false;<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  const DataLayout &DL = F.getParent()->getDataLayout();<br>
>>   TargetLibraryInfo *TLI =<br>
>>       &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>><br>
>> @@ -78,7 +77,7 @@ bool ConstantPropagation::runOnFunction(<br>
>>     WorkList.erase(WorkList.begin());    // Get an element from the worklist...<br>
>><br>
>>     if (!I->use_empty())                 // Don't muck with dead instructions...<br>
>> -      if (Constant *C = ConstantFoldInstruction(I, DL, TLI)) {<br>
>> +      if (Constant *C = ConstantFoldInstruction(I, &DL, TLI)) {<br>
>>         // Add all of the users of this instruction to the worklist, they might<br>
>>         // be constant propagatable now...<br>
>>         for (User *U : I->users())<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -685,14 +685,14 @@ bool EarlyCSE::run() {<br>
>><br>
>> PreservedAnalyses EarlyCSEPass::run(Function &F,<br>
>>                                     AnalysisManager<Function> *AM) {<br>
>> -  const DataLayout *DL = F.getParent()->getDataLayout();<br>
>> +  const DataLayout &DL = F.getParent()->getDataLayout();<br>
>><br>
>>   auto &TLI = AM->getResult<TargetLibraryAnalysis>(F);<br>
>>   auto &TTI = AM->getResult<TargetIRAnalysis>(F);<br>
>>   auto &DT = AM->getResult<DominatorTreeAnalysis>(F);<br>
>>   auto &AC = AM->getResult<AssumptionAnalysis>(F);<br>
>><br>
>> -  EarlyCSE CSE(F, DL, TLI, TTI, DT, AC);<br>
>> +  EarlyCSE CSE(F, &DL, TLI, TTI, DT, AC);<br>
>><br>
>>   if (!CSE.run())<br>
>>     return PreservedAnalyses::all();<br>
>> @@ -724,14 +724,13 @@ public:<br>
>>     if (skipOptnoneFunction(F))<br>
>>       return false;<br>
>><br>
>> -    DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -    auto *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +    auto &DL = F.getParent()->getDataLayout();<br>
>>     auto &TLI = getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>>     auto &TTI = getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);<br>
>>     auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>>     auto &AC = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>><br>
>> -    EarlyCSE CSE(F, DL, TLI, TTI, DT, AC);<br>
>> +    EarlyCSE CSE(F, &DL, TLI, TTI, DT, AC);<br>
>><br>
>>     return CSE.run();<br>
>>   }<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -2357,8 +2357,7 @@ bool GVN::runOnFunction(Function& F) {<br>
>>   if (!NoLoads)<br>
>>     MD = &getAnalysis<MemoryDependenceAnalysis>();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>>   VN.setAliasAnalysis(&getAnalysis<AliasAnalysis>());<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1896,8 +1896,7 @@ bool IndVarSimplify::runOnLoop(Loop *L,<br>
>>   LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>>   SE = &getAnalysis<ScalarEvolution>();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &L->getHeader()->getModule()->getDataLayout();<br>
>>   auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();<br>
>>   TLI = TLIP ? &TLIP->getTLI() : nullptr;<br>
>>   auto *TTIP = getAnalysisIfAvailable<TargetTransformInfoWrapperPass>();<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -159,8 +159,7 @@ bool JumpThreading::runOnFunction(Functi<br>
>>     return false;<br>
>><br>
>>   DEBUG(dbgs() << "Jump threading on function '" << F.getName() << "'\n");<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>>   LVI = &getAnalysis<LazyValueInfo>();<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/LICM.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LICM.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LICM.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/LICM.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/LICM.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -48,6 +48,7 @@<br>
>> #include "llvm/IR/IntrinsicInst.h"<br>
>> #include "llvm/IR/LLVMContext.h"<br>
>> #include "llvm/IR/Metadata.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/IR/PredIteratorCache.h"<br>
>> #include "llvm/Support/CommandLine.h"<br>
>> #include "llvm/Support/Debug.h"<br>
>> @@ -181,8 +182,7 @@ bool LICM::runOnLoop(Loop *L, LPPassMana<br>
>>   AA = &getAnalysis<AliasAnalysis>();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>><br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &L->getHeader()->getModule()->getDataLayout();<br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>><br>
>>   assert(L->isLCSSAForm(*DT) && "Loop is not in LCSSA form.");<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/LoadCombine.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -23,6 +23,7 @@<br>
>> #include "llvm/IR/Function.h"<br>
>> #include "llvm/IR/Instructions.h"<br>
>> #include "llvm/IR/IRBuilder.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/Support/Debug.h"<br>
>> #include "llvm/Support/MathExtras.h"<br>
>> #include "llvm/Support/raw_ostream.h"<br>
>> @@ -85,12 +86,11 @@ private:<br>
>> bool LoadCombine::doInitialization(Function &F) {<br>
>>   DEBUG(dbgs() << "LoadCombine function: " << F.getName() << "\n");<br>
>>   C = &F.getContext();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  if (!DLP) {<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>> +  if (!DL) {<br>
>>     DEBUG(dbgs() << "  Skipping LoadCombine -- no target data!\n");<br>
>>     return false;<br>
>>   }<br>
>> -  DL = &DLP->getDataLayout();<br>
>>   return true;<br>
>> }<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -130,7 +130,6 @@ namespace {<br>
>><br>
>>   class LoopIdiomRecognize : public LoopPass {<br>
>>     Loop *CurLoop;<br>
>> -    const DataLayout *DL;<br>
>>     DominatorTree *DT;<br>
>>     ScalarEvolution *SE;<br>
>>     TargetLibraryInfo *TLI;<br>
>> @@ -139,7 +138,10 @@ namespace {<br>
>>     static char ID;<br>
>>     explicit LoopIdiomRecognize() : LoopPass(ID) {<br>
>>       initializeLoopIdiomRecognizePass(*PassRegistry::getPassRegistry());<br>
>> -      DL = nullptr; DT = nullptr; SE = nullptr; TLI = nullptr; TTI = nullptr;<br>
>> +      DT = nullptr;<br>
>> +      SE = nullptr;<br>
>> +      TLI = nullptr;<br>
>> +      TTI = nullptr;<br>
>>     }<br>
>><br>
>>     bool runOnLoop(Loop *L, LPPassManager &LPM) override;<br>
>> @@ -179,14 +181,6 @@ namespace {<br>
>>       AU.addRequired<TargetTransformInfoWrapperPass>();<br>
>>     }<br>
>><br>
>> -    const DataLayout *getDataLayout() {<br>
>> -      if (DL)<br>
>> -        return DL;<br>
>> -      DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -      DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> -      return DL;<br>
>> -    }<br>
>> -<br>
>>     DominatorTree *getDominatorTree() {<br>
>>       return DT ? DT<br>
>>                 : (DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree());<br>
>> @@ -625,10 +619,6 @@ bool LoopIdiomRecognize::runOnCountableL<br>
>>     if (BECst->getValue()->getValue() == 0)<br>
>>       return false;<br>
>><br>
>> -  // We require target data for now.<br>
>> -  if (!getDataLayout())<br>
>> -    return false;<br>
>> -<br>
>>   // set DT<br>
>>   (void)getDominatorTree();<br>
>><br>
>> @@ -742,7 +732,8 @@ bool LoopIdiomRecognize::processLoopStor<br>
>>   Value *StorePtr = SI->getPointerOperand();<br>
>><br>
>>   // Reject stores that are so large that they overflow an unsigned.<br>
>> -  uint64_t SizeInBits = DL->getTypeSizeInBits(StoredVal->getType());<br>
>> +  auto &DL = CurLoop->getHeader()->getModule()->getDataLayout();<br>
>> +  uint64_t SizeInBits = DL.getTypeSizeInBits(StoredVal->getType());<br>
>>   if ((SizeInBits & 7) || (SizeInBits >> 32) != 0)<br>
>>     return false;<br>
>><br>
>> @@ -917,7 +908,7 @@ processLoopStridedStore(Value *DestPtr,<br>
>>   // but it can be turned into memset_pattern if the target supports it.<br>
>>   Value *SplatValue = isBytewiseValue(StoredVal);<br>
>>   Constant *PatternValue = nullptr;<br>
>> -<br>
>> +  auto &DL = CurLoop->getHeader()->getModule()->getDataLayout();<br>
>>   unsigned DestAS = DestPtr->getType()->getPointerAddressSpace();<br>
>><br>
>>   // If we're allowed to form a memset, and the stored value would be acceptable<br>
>> @@ -928,9 +919,8 @@ processLoopStridedStore(Value *DestPtr,<br>
>>       CurLoop->isLoopInvariant(SplatValue)) {<br>
>>     // Keep and use SplatValue.<br>
>>     PatternValue = nullptr;<br>
>> -  } else if (DestAS == 0 &&<br>
>> -             TLI->has(LibFunc::memset_pattern16) &&<br>
>> -             (PatternValue = getMemSetPatternValue(StoredVal, *DL))) {<br>
>> +  } else if (DestAS == 0 && TLI->has(LibFunc::memset_pattern16) &&<br>
>> +             (PatternValue = getMemSetPatternValue(StoredVal, DL))) {<br>
>>     // Don't create memset_pattern16s with address spaces.<br>
>>     // It looks like we can use PatternValue!<br>
>>     SplatValue = nullptr;<br>
>> @@ -971,7 +961,7 @@ processLoopStridedStore(Value *DestPtr,<br>
>><br>
>>   // The # stored bytes is (BECount+1)*Size.  Expand the trip count out to<br>
>>   // pointer size if it isn't already.<br>
>> -  Type *IntPtr = Builder.getIntPtrTy(DL, DestAS);<br>
>> +  Type *IntPtr = Builder.getIntPtrTy(&DL, DestAS);<br>
>>   BECount = SE->getTruncateOrZeroExtend(BECount, IntPtr);<br>
>><br>
>>   const SCEV *NumBytesS = SE->getAddExpr(BECount, SE->getConstant(IntPtr, 1),<br>
>> @@ -1085,7 +1075,8 @@ processLoopStoreOfLoopLoad(StoreInst *SI<br>
>><br>
>>   // The # stored bytes is (BECount+1)*Size.  Expand the trip count out to<br>
>>   // pointer size if it isn't already.<br>
>> -  Type *IntPtrTy = Builder.getIntPtrTy(DL, SI->getPointerAddressSpace());<br>
>> +  auto &DL = CurLoop->getHeader()->getModule()->getDataLayout();<br>
>> +  Type *IntPtrTy = Builder.getIntPtrTy(&DL, SI->getPointerAddressSpace());<br>
>>   BECount = SE->getTruncateOrZeroExtend(BECount, IntPtrTy);<br>
>><br>
>>   const SCEV *NumBytesS = SE->getAddExpr(BECount, SE->getConstant(IntPtrTy, 1),<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -77,8 +77,7 @@ bool LoopInstSimplify::runOnLoop(Loop *L<br>
>>       getAnalysisIfAvailable<DominatorTreeWrapperPass>();<br>
>>   DominatorTree *DT = DTWP ? &DTWP->getDomTree() : nullptr;<br>
>>   LoopInfo *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  const DataLayout *DL = &L->getHeader()->getModule()->getDataLayout();<br>
>>   const TargetLibraryInfo *TLI =<br>
>>       &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>>   auto &AC = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/LoopRerollPass.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopRerollPass.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopRerollPass.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/LoopRerollPass.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/LoopRerollPass.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1477,8 +1477,7 @@ bool LoopReroll::runOnLoop(Loop *L, LPPa<br>
>>   LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>>   SE = &getAnalysis<ScalarEvolution>();<br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &L->getHeader()->getModule()->getDataLayout();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>><br>
>>   BasicBlock *Header = L->getHeader();<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1077,8 +1077,7 @@ bool MemCpyOpt::runOnFunction(Function &<br>
>><br>
>>   bool MadeChange = false;<br>
>>   MD = &getAnalysis<MemoryDependenceAnalysis>();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>><br>
>>   // If we don't have at least memset and memcpy, there is little point of doing<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -154,7 +154,7 @@ namespace {<br>
>> /// Constant Propagation.<br>
>> ///<br>
>> class SCCPSolver : public InstVisitor<SCCPSolver> {<br>
>> -  const DataLayout *DL;<br>
>> +  const DataLayout &DL;<br>
>>   const TargetLibraryInfo *TLI;<br>
>>   SmallPtrSet<BasicBlock*, 8> BBExecutable; // The BBs that are executable.<br>
>>   DenseMap<Value*, LatticeVal> ValueState;  // The state each value is in.<br>
>> @@ -206,8 +206,8 @@ class SCCPSolver : public InstVisitor<SC<br>
>>   typedef std::pair<BasicBlock*, BasicBlock*> Edge;<br>
>>   DenseSet<Edge> KnownFeasibleEdges;<br>
>> public:<br>
>> -  SCCPSolver(const DataLayout *DL, const TargetLibraryInfo *tli)<br>
>> -    : DL(DL), TLI(tli) {}<br>
>> +  SCCPSolver(const DataLayout &DL, const TargetLibraryInfo *tli)<br>
>> +      : DL(DL), TLI(tli) {}<br>
>><br>
>>   /// MarkBlockExecutable - This method can be used by clients to mark all of<br>
>>   /// the blocks that are known to be intrinsically live in the processed unit.<br>
>> @@ -1070,7 +1070,7 @@ void SCCPSolver::visitLoadInst(LoadInst<br>
>>   }<br>
>><br>
>>   // Transform load from a constant into a constant if possible.<br>
>> -  if (Constant *C = ConstantFoldLoadFromConstPtr(Ptr, DL))<br>
>> +  if (Constant *C = ConstantFoldLoadFromConstPtr(Ptr, &DL))<br>
>>     return markConstant(IV, &I, C);<br>
>><br>
>>   // Otherwise we cannot say for certain what value this load will produce.<br>
>> @@ -1561,8 +1561,7 @@ bool SCCP::runOnFunction(Function &F) {<br>
>>     return false;<br>
>><br>
>>   DEBUG(dbgs() << "SCCP on function '" << F.getName() << "'\n");<br>
>> -  const DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  const DataLayout &DL = F.getParent()->getDataLayout();<br>
>>   const TargetLibraryInfo *TLI =<br>
>>       &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>>   SCCPSolver Solver(DL, TLI);<br>
>> @@ -1691,8 +1690,7 @@ static bool AddressIsTaken(const GlobalV<br>
>> }<br>
>><br>
>> bool IPSCCP::runOnModule(Module &M) {<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  const DataLayout &DL = M.getDataLayout();<br>
>>   const TargetLibraryInfo *TLI =<br>
>>       &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>>   SCCPSolver Solver(DL, TLI);<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/SROA.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/SROA.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -4423,12 +4423,7 @@ bool SROA::runOnFunction(Function &F) {<br>
>><br>
>>   DEBUG(dbgs() << "SROA function: " << F.getName() << "\n");<br>
>>   C = &F.getContext();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  if (!DLP) {<br>
>> -    DEBUG(dbgs() << "  Skipping SROA -- no target data!\n");<br>
>> -    return false;<br>
>> -  }<br>
>> -  DL = &DLP->getDataLayout();<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   DominatorTreeWrapperPass *DTWP =<br>
>>       getAnalysisIfAvailable<DominatorTreeWrapperPass>();<br>
>>   DT = DTWP ? &DTWP->getDomTree() : nullptr;<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1032,8 +1032,7 @@ bool SROA::runOnFunction(Function &F) {<br>
>>   if (skipOptnoneFunction(F))<br>
>>     return false;<br>
>><br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>><br>
>>   bool Changed = performPromotion(F);<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -248,8 +248,7 @@ bool Scalarizer::doInitialization(Module<br>
>> }<br>
>><br>
>> bool Scalarizer::runOnFunction(Function &F) {<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   for (Function::iterator BBI = F.begin(), BBE = F.end(); BBI != BBE; ++BBI) {<br>
>>     BasicBlock *BB = BBI;<br>
>>     for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); II != IE;) {<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -312,16 +312,12 @@ class SeparateConstOffsetFromGEP : publi<br>
>>   }<br>
>><br>
>>   void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>> -    AU.addRequired<DataLayoutPass>();<br>
>>     AU.addRequired<TargetTransformInfoWrapperPass>();<br>
>>     AU.setPreservesCFG();<br>
>>   }<br>
>><br>
>>   bool doInitialization(Module &M) override {<br>
>> -    DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -    if (DLP == nullptr)<br>
>> -      report_fatal_error("data layout missing");<br>
>> -    DL = &DLP->getDataLayout();<br>
>> +    DL = &M.getDataLayout();<br>
>>     return false;<br>
>>   }<br>
>><br>
>> @@ -386,7 +382,6 @@ INITIALIZE_PASS_BEGIN(<br>
>>     "Split GEPs to a variadic base and a constant offset for better CSE", false,<br>
>>     false)<br>
>> INITIALIZE_PASS_DEPENDENCY(TargetTransformInfoWrapperPass)<br>
>> -INITIALIZE_PASS_DEPENDENCY(DataLayoutPass)<br>
>> INITIALIZE_PASS_END(<br>
>>     SeparateConstOffsetFromGEP, "separate-const-offset-from-gep",<br>
>>     "Split GEPs to a variadic base and a constant offset for better CSE", false,<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -181,11 +181,11 @@ SimplifyCFGPass::SimplifyCFGPass(int Bon<br>
>><br>
>> PreservedAnalyses SimplifyCFGPass::run(Function &F,<br>
>>                                        AnalysisManager<Function> *AM) {<br>
>> -  auto *DL = F.getParent()->getDataLayout();<br>
>> +  auto &DL = F.getParent()->getDataLayout();<br>
>>   auto &TTI = AM->getResult<TargetIRAnalysis>(F);<br>
>>   auto &AC = AM->getResult<AssumptionAnalysis>(F);<br>
>><br>
>> -  if (!simplifyFunctionCFG(F, TTI, DL, &AC, BonusInstThreshold))<br>
>> +  if (!simplifyFunctionCFG(F, TTI, &DL, &AC, BonusInstThreshold))<br>
>>     return PreservedAnalyses::none();<br>
>><br>
>>   return PreservedAnalyses::all();<br>
>> @@ -207,9 +207,8 @@ struct CFGSimplifyPass : public Function<br>
>>         &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>>     const TargetTransformInfo &TTI =<br>
>>         getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);<br>
>> -    DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -    const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> -    return simplifyFunctionCFG(F, TTI, DL, AC, BonusInstThreshold);<br>
>> +    const DataLayout &DL = F.getParent()->getDataLayout();<br>
>> +    return simplifyFunctionCFG(F, TTI, &DL, AC, BonusInstThreshold);<br>
>>   }<br>
>><br>
>>   void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/Sink.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Sink.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Sink.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/Sink.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/Sink.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -21,6 +21,7 @@<br>
>> #include "llvm/IR/DataLayout.h"<br>
>> #include "llvm/IR/Dominators.h"<br>
>> #include "llvm/IR/IntrinsicInst.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/Support/Debug.h"<br>
>> #include "llvm/Support/raw_ostream.h"<br>
>> using namespace llvm;<br>
>> @@ -100,8 +101,7 @@ bool Sinking::runOnFunction(Function &F)<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>>   LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>>   AA = &getAnalysis<AliasAnalysis>();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>><br>
>>   bool MadeChange, EverMadeChange = false;<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -159,7 +159,7 @@ bool TailCallElim::runOnFunction(Functio<br>
>>   if (skipOptnoneFunction(F))<br>
>>     return false;<br>
>><br>
>> -  DL = F.getParent()->getDataLayout();<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>><br>
>>   bool AllCallsAreTailCalls = false;<br>
>>   bool Modified = markTails(F, AllCallsAreTailCalls);<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -622,8 +622,9 @@ static void AddAliasScopeMetadata(CallSi<br>
>> /// If the inlined function has non-byval align arguments, then<br>
>> /// add @llvm.assume-based alignment assumptions to preserve this information.<br>
>> static void AddAlignmentAssumptions(CallSite CS, InlineFunctionInfo &IFI) {<br>
>> -  if (!PreserveAlignmentAssumptions || !IFI.DL)<br>
>> +  if (!PreserveAlignmentAssumptions)<br>
>>     return;<br>
>> +  auto &DL = CS.getCaller()->getParent()->getDataLayout();<br>
>><br>
>>   // To avoid inserting redundant assumptions, we should check for assumptions<br>
>>   // already in the caller. To do this, we might need a DT of the caller.<br>
>> @@ -645,13 +646,12 @@ static void AddAlignmentAssumptions(Call<br>
>>       // If we can already prove the asserted alignment in the context of the<br>
>>       // caller, then don't bother inserting the assumption.<br>
>>       Value *Arg = CS.getArgument(I->getArgNo());<br>
>> -      if (getKnownAlignment(Arg, IFI.DL,<br>
>> -                            &IFI.ACT->getAssumptionCache(*CalledFunc),<br>
>> +      if (getKnownAlignment(Arg, &DL, &IFI.ACT->getAssumptionCache(*CalledFunc),<br>
>>                             CS.getInstruction(), &DT) >= Align)<br>
>>         continue;<br>
>><br>
>> -      IRBuilder<>(CS.getInstruction()).CreateAlignmentAssumption(*IFI.DL, Arg,<br>
>> -                                                                 Align);<br>
>> +      IRBuilder<>(CS.getInstruction())<br>
>> +          .CreateAlignmentAssumption(DL, Arg, Align);<br>
>>     }<br>
>>   }<br>
>> }<br>
>> @@ -726,11 +726,7 @@ static void HandleByValArgumentInit(Valu<br>
>>   Type *AggTy = cast<PointerType>(Src->getType())->getElementType();<br>
>>   IRBuilder<> Builder(InsertBlock->begin());<br>
>><br>
>> -  Value *Size;<br>
>> -  if (IFI.DL == nullptr)<br>
>> -    Size = ConstantExpr::getSizeOf(AggTy);<br>
>> -  else<br>
>> -    Size = Builder.getInt64(IFI.DL->getTypeStoreSize(AggTy));<br>
>> +  Value *Size = Builder.getInt64(M->getDataLayout().getTypeStoreSize(AggTy));<br>
>><br>
>>   // Always generate a memcpy of alignment 1 here because we don't know<br>
>>   // the alignment of the src pointer.  Other optimizations can infer<br>
>> @@ -761,7 +757,8 @@ static Value *HandleByValArgument(Value<br>
>><br>
>>     // If the pointer is already known to be sufficiently aligned, or if we can<br>
>>     // round it up to a larger alignment, then we don't need a temporary.<br>
>> -    if (getOrEnforceKnownAlignment(Arg, ByValAlignment, IFI.DL,<br>
>> +    auto &DL = Caller->getParent()->getDataLayout();<br>
>> +    if (getOrEnforceKnownAlignment(Arg, ByValAlignment, &DL,<br>
>>                                    &IFI.ACT->getAssumptionCache(*Caller),<br>
>>                                    TheCall) >= ByValAlignment)<br>
>>       return Arg;<br>
>> @@ -771,10 +768,9 @@ static Value *HandleByValArgument(Value<br>
>>   }<br>
>><br>
>>   // Create the alloca.  If we have DataLayout, use nice alignment.<br>
>> -  unsigned Align = 1;<br>
>> -  if (IFI.DL)<br>
>> -    Align = IFI.DL->getPrefTypeAlignment(AggTy);<br>
>> -<br>
>> +  unsigned Align =<br>
>> +      Caller->getParent()->getDataLayout().getPrefTypeAlignment(AggTy);<br>
>> +<br>
>>   // If the byval had an alignment specified, we *must* use at least that<br>
>>   // alignment, as it is required by the byval argument (and uses of the<br>
>>   // pointer inside the callee).<br>
>> @@ -1008,6 +1004,8 @@ bool llvm::InlineFunction(CallSite CS, I<br>
>>     // Keep a list of pair (dst, src) to emit byval initializations.<br>
>>     SmallVector<std::pair<Value*, Value*>, 4> ByValInit;<br>
>><br>
>> +    auto &DL = Caller->getParent()->getDataLayout();<br>
>> +<br>
>>     assert(CalledFunc->arg_size() == CS.arg_size() &&<br>
>>            "No varargs calls can be inlined!");<br>
>><br>
>> @@ -1042,9 +1040,9 @@ bool llvm::InlineFunction(CallSite CS, I<br>
>>     // have no dead or constant instructions leftover after inlining occurs<br>
>>     // (which can happen, e.g., because an argument was constant), but we'll be<br>
>>     // happy with whatever the cloner can do.<br>
>> -    CloneAndPruneFunctionInto(Caller, CalledFunc, VMap,<br>
>> +    CloneAndPruneFunctionInto(Caller, CalledFunc, VMap,<br>
>>                               /*ModuleLevelChanges=*/false, Returns, ".i",<br>
>> -                              &InlinedFunctionInfo, IFI.DL, TheCall);<br>
>> +                              &InlinedFunctionInfo, &DL, TheCall);<br>
>><br>
>>     // Remember the first block that is newly cloned over.<br>
>>     FirstNewBlock = LastBlock; ++FirstNewBlock;<br>
>> @@ -1065,7 +1063,7 @@ bool llvm::InlineFunction(CallSite CS, I<br>
>>     CloneAliasScopeMetadata(CS, VMap);<br>
>><br>
>>     // Add noalias metadata if necessary.<br>
>> -    AddAliasScopeMetadata(CS, VMap, IFI.DL, IFI.AA);<br>
>> +    AddAliasScopeMetadata(CS, VMap, &DL, IFI.AA);<br>
>><br>
>>     // FIXME: We could register any cloned assumptions instead of clearing the<br>
>>     // whole function's cache.<br>
>> @@ -1173,18 +1171,17 @@ bool llvm::InlineFunction(CallSite CS, I<br>
>>       ConstantInt *AllocaSize = nullptr;<br>
>>       if (ConstantInt *AIArraySize =<br>
>>           dyn_cast<ConstantInt>(AI->getArraySize())) {<br>
>> -        if (IFI.DL) {<br>
>> -          Type *AllocaType = AI->getAllocatedType();<br>
>> -          uint64_t AllocaTypeSize = IFI.DL->getTypeAllocSize(AllocaType);<br>
>> -          uint64_t AllocaArraySize = AIArraySize->getLimitedValue();<br>
>> -          assert(AllocaArraySize > 0 && "array size of AllocaInst is zero");<br>
>> -          // Check that array size doesn't saturate uint64_t and doesn't<br>
>> -          // overflow when it's multiplied by type size.<br>
>> -          if (AllocaArraySize != ~0ULL &&<br>
>> -              UINT64_MAX / AllocaArraySize >= AllocaTypeSize) {<br>
>> -            AllocaSize = ConstantInt::get(Type::getInt64Ty(AI->getContext()),<br>
>> -                                          AllocaArraySize * AllocaTypeSize);<br>
>> -          }<br>
>> +        auto &DL = Caller->getParent()->getDataLayout();<br>
>> +        Type *AllocaType = AI->getAllocatedType();<br>
>> +        uint64_t AllocaTypeSize = DL.getTypeAllocSize(AllocaType);<br>
>> +        uint64_t AllocaArraySize = AIArraySize->getLimitedValue();<br>
>> +        assert(AllocaArraySize > 0 && "array size of AllocaInst is zero");<br>
>> +        // Check that array size doesn't saturate uint64_t and doesn't<br>
>> +        // overflow when it's multiplied by type size.<br>
>> +        if (AllocaArraySize != ~0ULL &&<br>
>> +            UINT64_MAX / AllocaArraySize >= AllocaTypeSize) {<br>
>> +          AllocaSize = ConstantInt::get(Type::getInt64Ty(AI->getContext()),<br>
>> +                                        AllocaArraySize * AllocaTypeSize);<br>
>>         }<br>
>>       }<br>
>><br>
>> @@ -1445,7 +1442,8 @@ bool llvm::InlineFunction(CallSite CS, I<br>
>>   // the entries are the same or undef).  If so, remove the PHI so it doesn't<br>
>>   // block other optimizations.<br>
>>   if (PHI) {<br>
>> -    if (Value *V = SimplifyInstruction(PHI, IFI.DL, nullptr, nullptr,<br>
>> +    auto &DL = Caller->getParent()->getDataLayout();<br>
>> +    if (Value *V = SimplifyInstruction(PHI, &DL, nullptr, nullptr,<br>
>>                                        &IFI.ACT->getAssumptionCache(*Caller))) {<br>
>>       PHI->replaceAllUsesWith(V);<br>
>>       PHI->eraseFromParent();<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -57,6 +57,7 @@<br>
>> #include "llvm/IR/Instructions.h"<br>
>> #include "llvm/IR/IntrinsicInst.h"<br>
>> #include "llvm/IR/LLVMContext.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/IR/Type.h"<br>
>> #include "llvm/Support/Debug.h"<br>
>> #include "llvm/Transforms/Utils/BasicBlockUtils.h"<br>
>> @@ -797,8 +798,7 @@ bool LoopSimplify::runOnFunction(Functio<br>
>>   LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>>   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>>   SE = getAnalysisIfAvailable<ScalarEvolution>();<br>
>> -  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -  DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +  DL = &F.getParent()->getDataLayout();<br>
>>   AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);<br>
>><br>
>>   // Simplify each loop nest in the function.<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -531,9 +531,8 @@ bool llvm::UnrollLoop(Loop *L, unsigned<br>
>>     if (!OuterL && !CompletelyUnroll)<br>
>>       OuterL = L;<br>
>>     if (OuterL) {<br>
>> -      DataLayoutPass *DLP = PP->getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -      const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> -      simplifyLoop(OuterL, DT, LI, PP, /*AliasAnalysis*/ nullptr, SE, DL, AC);<br>
>> +      const DataLayout &DL = F->getParent()->getDataLayout();<br>
>> +      simplifyLoop(OuterL, DT, LI, PP, /*AliasAnalysis*/ nullptr, SE, &DL, AC);<br>
>><br>
>>       // LCSSA must be performed on the outermost affected loop. The unrolled<br>
>>       // loop's last loop latch is guaranteed to be in the outermost loop after<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Utils/SimplifyInstructions.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyInstructions.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyInstructions.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Utils/SimplifyInstructions.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Utils/SimplifyInstructions.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -51,8 +51,7 @@ namespace {<br>
>>       const DominatorTreeWrapperPass *DTWP =<br>
>>           getAnalysisIfAvailable<DominatorTreeWrapperPass>();<br>
>>       const DominatorTree *DT = DTWP ? &DTWP->getDomTree() : nullptr;<br>
>> -      DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -      const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +      const DataLayout &DL = F.getParent()->getDataLayout();<br>
>>       const TargetLibraryInfo *TLI =<br>
>>           &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();<br>
>>       AssumptionCache *AC =<br>
>> @@ -73,7 +72,7 @@ namespace {<br>
>>               continue;<br>
>>             // Don't waste time simplifying unused instructions.<br>
>>             if (!I->use_empty())<br>
>> -              if (Value *V = SimplifyInstruction(I, DL, TLI, DT, AC)) {<br>
>> +              if (Value *V = SimplifyInstruction(I, &DL, TLI, DT, AC)) {<br>
>>                 // Mark all uses for resimplification next time round the loop.<br>
>>                 for (User *U : I->users())<br>
>>                   Next->insert(cast<Instruction>(U));<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -39,6 +39,7 @@<br>
>> #include "llvm/IR/Intrinsics.h"<br>
>> #include "llvm/IR/LLVMContext.h"<br>
>> #include "llvm/IR/Metadata.h"<br>
>> +#include "llvm/IR/Module.h"<br>
>> #include "llvm/IR/Type.h"<br>
>> #include "llvm/IR/ValueHandle.h"<br>
>> #include "llvm/Pass.h"<br>
>> @@ -206,8 +207,7 @@ namespace {<br>
>>       AA = &P->getAnalysis<AliasAnalysis>();<br>
>>       DT = &P->getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>>       SE = &P->getAnalysis<ScalarEvolution>();<br>
>> -      DataLayoutPass *DLP = P->getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -      DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +      DL = &F.getParent()->getDataLayout();<br>
>>       TTI = IgnoreTargetInfo<br>
>>                 ? nullptr<br>
>>                 : &P->getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);<br>
>> @@ -442,8 +442,7 @@ namespace {<br>
>>       AA = &getAnalysis<AliasAnalysis>();<br>
>>       DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>>       SE = &getAnalysis<ScalarEvolution>();<br>
>> -      DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -      DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +      DL = &BB.getModule()->getDataLayout();<br>
>>       TTI = IgnoreTargetInfo<br>
>>                 ? nullptr<br>
>>                 : &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -1274,8 +1274,7 @@ struct LoopVectorize : public FunctionPa<br>
>><br>
>>   bool runOnFunction(Function &F) override {<br>
>>     SE = &getAnalysis<ScalarEvolution>();<br>
>> -    DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -    DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +    DL = &F.getParent()->getDataLayout();<br>
>>     LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();<br>
>>     TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);<br>
>>     DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -3064,8 +3064,7 @@ struct SLPVectorizer : public FunctionPa<br>
>>       return false;<br>
>><br>
>>     SE = &getAnalysis<ScalarEvolution>();<br>
>> -    DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();<br>
>> -    DL = DLP ? &DLP->getDataLayout() : nullptr;<br>
>> +    DL = &F.getParent()->getDataLayout();<br>
>>     TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);<br>
>>     auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();<br>
>>     TLI = TLIP ? &TLIP->getTLI() : nullptr;<br>
>><br>
>> Modified: llvm/trunk/test/Analysis/Delinearization/a.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/a.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/a.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/Delinearization/a.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/Delinearization/a.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -9,7 +9,7 @@<br>
>><br>
>> ; AddRec: {{{(28 + (4 * (-4 + (3 * %m)) * %o) + %A),+,(8 * %m * %o)}<%for.i>,+,(12 * %o)}<%for.j>,+,20}<%for.k><br>
>> ; CHECK: Base offset: %A<br>
>> -; CHECK: ArrayDecl[UnknownSize][%m][%o] with elements of sizeof(i32) bytes.<br>
>> +; CHECK: ArrayDecl[UnknownSize][%m][%o] with elements of 4 bytes.<br>
>> ; CHECK: ArrayRef[{3,+,2}<%for.i>][{-4,+,3}<%for.j>][{7,+,5}<%for.k>]<br>
>><br>
>> define void @foo(i64 %n, i64 %m, i64 %o, i32* nocapture %A) #0 {<br>
>><br>
>> Modified: llvm/trunk/test/Analysis/Delinearization/himeno_1.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/himeno_1.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/himeno_1.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/Delinearization/himeno_1.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/Delinearization/himeno_1.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -28,7 +28,7 @@<br>
>><br>
>> ; AddRec: {{{(4 + (4 * (sext i32 %a.deps to i64) * (1 + (sext i32 %a.cols to i64))) + %a.base),+,(4 * (sext i32 %a.deps to i64) * (sext i32 %a.cols to i64))}<%for.i>,+,(4 * (sext i32 %a.deps to i64))}<%for.j>,+,4}<%for.k><br>
>> ; CHECK: Base offset: %a.base<br>
>> -; CHECK: ArrayDecl[UnknownSize][(sext i32 %a.cols to i64)][(sext i32 %a.deps to i64)] with elements of sizeof(float) bytes.<br>
>> +; CHECK: ArrayDecl[UnknownSize][(sext i32 %a.cols to i64)][(sext i32 %a.deps to i64)] with elements of 4 bytes.<br>
>> ; CHECK: ArrayRef[{1,+,1}<nuw><nsw><%for.i>][{1,+,1}<nuw><nsw><%for.j>][{1,+,1}<nuw><nsw><%for.k>]<br>
>><br>
>> %struct.Mat = type { float*, i32, i32, i32, i32 }<br>
>><br>
>> Modified: llvm/trunk/test/Analysis/Delinearization/himeno_2.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/himeno_2.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/himeno_2.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/Delinearization/himeno_2.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/Delinearization/himeno_2.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -28,7 +28,7 @@<br>
>><br>
>> ; AddRec: {{{(4 + (4 * (sext i32 %a.deps to i64) * (1 + (sext i32 %a.cols to i64))) + %a.base),+,(4 * (sext i32 %a.deps to i64) * (sext i32 %a.cols to i64))}<%for.i>,+,(4 * (sext i32 %a.deps to i64))}<%for.j>,+,4}<%for.k><br>
>> ; CHECK: Base offset: %a.base<br>
>> -; CHECK: ArrayDecl[UnknownSize][(sext i32 %a.cols to i64)][(sext i32 %a.deps to i64)] with elements of sizeof(float) bytes.<br>
>> +; CHECK: ArrayDecl[UnknownSize][(sext i32 %a.cols to i64)][(sext i32 %a.deps to i64)] with elements of 4 bytes.<br>
>> ; CHECK: ArrayRef[{1,+,1}<nuw><nsw><%for.i>][{1,+,1}<nuw><nsw><%for.j>][{1,+,1}<nuw><nsw><%for.k>]<br>
>><br>
>> %struct.Mat = type { float*, i32, i32, i32, i32 }<br>
>><br>
>> Modified: llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -8,9 +8,9 @@<br>
>> ;       A[2i+b][2j] = 1.0;<br>
>> ; }<br>
>><br>
>> -; AddRec: {{((%m * %b * sizeof(double)) + %A),+,(2 * %m * sizeof(double))}<%for.i>,+,(2 * sizeof(double))}<%for.j><br>
>> +; AddRec: {{((%m * %b * 8) + %A),+,(2 * %m * 8)}<%for.i>,+,(2 * 8)}<%for.j><br>
>> ; CHECK: Base offset: %A<br>
>> -; CHECK: ArrayDecl[UnknownSize][%m] with elements of sizeof(double) bytes.<br>
>> +; CHECK: ArrayDecl[UnknownSize][%m] with elements of 8 bytes.<br>
>> ; CHECK: ArrayRef[{%b,+,2}<%for.i>][{0,+,2}<%for.j>]<br>
>><br>
>><br>
>><br>
>> Modified: llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_3d.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_3d.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_3d.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_3d.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_3d.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -10,7 +10,7 @@<br>
>><br>
>> ; AddRec: {{{(56 + (8 * (-4 + (3 * %m)) * %o) + %A),+,(8 * %m * %o)}<%for.i>,+,(8 * %o)}<%for.j>,+,8}<%for.k><br>
>> ; CHECK: Base offset: %A<br>
>> -; CHECK: ArrayDecl[UnknownSize][%m][%o] with elements of sizeof(double) bytes.<br>
>> +; CHECK: ArrayDecl[UnknownSize][%m][%o] with elements of 8 bytes.<br>
>> ; CHECK: ArrayRef[{3,+,1}<nw><%for.i>][{-4,+,1}<nw><%for.j>][{7,+,1}<nw><%for.k>]<br>
>><br>
>> define void @foo(i64 %n, i64 %m, i64 %o, double* %A) {<br>
>><br>
>> Modified: llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_nts_3d.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_nts_3d.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_nts_3d.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_nts_3d.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_nts_3d.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -10,7 +10,7 @@<br>
>><br>
>> ; AddRec: {{{(56 + (8 * (-4 + (3 * %m)) * (%o + %p)) + %A),+,(8 * (%o + %p) * %m)}<%<a href="http://for.cond4.preheader.lr.ph.us" target="_blank">for.cond4.preheader.lr.ph.us</a>>,+,(8 * (%o + %p))}<%<a href="http://for.body6.lr.ph.us.us" target="_blank">for.body6.lr.ph.us.us</a>>,+,8}<%<a href="http://for.body6.us.us" target="_blank">for.body6.us.us</a>><br>
>> ; CHECK: Base offset: %A<br>
>> -; CHECK: ArrayDecl[UnknownSize][%m][(%o + %p)] with elements of sizeof(double) bytes.<br>
>> +; CHECK: ArrayDecl[UnknownSize][%m][(%o + %p)] with elements of 8 bytes.<br>
>> ; CHECK: ArrayRef[{3,+,1}<nw><%<a href="http://for.cond4.preheader.lr.ph.us" target="_blank">for.cond4.preheader.lr.ph.us</a>>][{-4,+,1}<nw><%<a href="http://for.body6.lr.ph.us.us" target="_blank">for.body6.lr.ph.us.us</a>>][{7,+,1}<nw><%<a href="http://for.body6.us.us" target="_blank">for.body6.us.us</a>>]<br>
>><br>
>> define void @foo(i64 %n, i64 %m, i64 %o, i64 %p, double* nocapture %A) nounwind uwtable {<br>
>><br>
>> Modified: llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_parameteric_offsets_3d.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_parameteric_offsets_3d.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_parameteric_offsets_3d.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_parameteric_offsets_3d.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/Delinearization/multidim_ivs_and_parameteric_offsets_3d.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -10,7 +10,7 @@<br>
>><br>
>> ; AddRec: {{{((8 * ((((%m * %p) + %q) * %o) + %r)) + %A),+,(8 * %m * %o)}<%for.i>,+,(8 * %o)}<%for.j>,+,8}<%for.k><br>
>> ; CHECK: Base offset: %A<br>
>> -; CHECK: ArrayDecl[UnknownSize][%m][%o] with elements of sizeof(double) bytes.<br>
>> +; CHECK: ArrayDecl[UnknownSize][%m][%o] with elements of 8 bytes.<br>
>> ; CHECK: ArrayRef[{%p,+,1}<nw><%for.i>][{%q,+,1}<nw><%for.j>][{%r,+,1}<nw><%for.k>]<br>
>><br>
>> define void @foo(i64 %n, i64 %m, i64 %o, double* %A, i64 %p, i64 %q, i64 %r) {<br>
>><br>
>> Modified: llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_2d.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_2d.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_2d.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_2d.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_2d.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -10,16 +10,16 @@<br>
>><br>
>> ; Inst:  %val = load double, double* %arrayidx<br>
>> ; In Loop with Header: for.j<br>
>> -; AddRec: {{0,+,(%m * sizeof(double))}<%for.i>,+,sizeof(double)}<%for.j><br>
>> +; AddRec: {{0,+,(%m * 8)}<%for.i>,+,8}<%for.j><br>
>> ; Base offset: %A<br>
>> -; ArrayDecl[UnknownSize][%m] with elements of sizeof(double) bytes.<br>
>> +; ArrayDecl[UnknownSize][%m] with elements of 8 bytes.<br>
>> ; ArrayRef[{0,+,1}<nuw><nsw><%for.i>][{0,+,1}<nuw><nsw><%for.j>]<br>
>><br>
>> ; Inst:  store double %val, double* %arrayidx<br>
>> ; In Loop with Header: for.j<br>
>> ; AddRec: {{%A,+,(8 * %m)}<%for.i>,+,8}<%for.j><br>
>> ; CHECK: Base offset: %A<br>
>> -; CHECK: ArrayDecl[UnknownSize][%m] with elements of sizeof(double) bytes.<br>
>> +; CHECK: ArrayDecl[UnknownSize][%m] with elements of 8 bytes.<br>
>> ; CHECK: ArrayRef[{0,+,1}<nuw><nsw><%for.i>][{0,+,1}<nuw><nsw><%for.j>]<br>
>><br>
>> define void @foo(i64 %n, i64 %m, double* %A) {<br>
>><br>
>> Modified: llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_3d.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_3d.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_3d.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_3d.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/Delinearization/multidim_only_ivs_3d.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -10,7 +10,7 @@<br>
>><br>
>> ; AddRec: {{{%A,+,(8 * %m * %o)}<%for.i>,+,(8 * %o)}<%for.j>,+,8}<%for.k><br>
>> ; CHECK: Base offset: %A<br>
>> -; CHECK: ArrayDecl[UnknownSize][%m][%o] with elements of sizeof(double) bytes.<br>
>> +; CHECK: ArrayDecl[UnknownSize][%m][%o] with elements of 8 bytes.<br>
>> ; CHECK: ArrayRef[{0,+,1}<nuw><nsw><%for.i>][{0,+,1}<nuw><nsw><%for.j>][{0,+,1}<nuw><nsw><%for.k>]<br>
>><br>
>> define void @foo(i64 %n, i64 %m, i64 %o, double* %A) {<br>
>><br>
>> Modified: llvm/trunk/test/Analysis/ScalarEvolution/max-trip-count.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/max-trip-count.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/max-trip-count.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Analysis/ScalarEvolution/max-trip-count.ll (original)<br>
>> +++ llvm/trunk/test/Analysis/ScalarEvolution/max-trip-count.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -2,7 +2,7 @@<br>
>><br>
>> ; ScalarEvolution should be able to understand the loop and eliminate the casts.<br>
>><br>
>> -; CHECK: {%d,+,sizeof(i32)}<br>
>> +; CHECK: {%d,+,4}<br>
>><br>
>> define void @foo(i32* nocapture %d, i32 %n) nounwind {<br>
>> entry:<br>
>> @@ -39,7 +39,7 @@ return:               ; preds = %bb1.return_crit_edge<br>
>> ; count, it should say so.<br>
>><br>
>> ; PR7845<br>
>> -; CHECK: Loop %for.cond: <multiple exits> Unpredictable backedge-taken count.<br>
>> +; CHECK: Loop %for.cond: <multiple exits> Unpredictable backedge-taken count.<br>
>> ; CHECK: Loop %for.cond: max backedge-taken count is 5<br>
>><br>
>> @.str = private constant [4 x i8] c"%d\0A\00"     ; <[4 x i8]*> [#uses=2]<br>
>> @@ -101,7 +101,7 @@ for.end:<br>
>><br>
>> ; PR19799: Indvars miscompile due to an incorrect max backedge taken count from SCEV.<br>
>> ; CHECK-LABEL: @pr19799<br>
>> -; CHECK: Loop %for.body.i: <multiple exits> Unpredictable backedge-taken count.<br>
>> +; CHECK: Loop %for.body.i: <multiple exits> Unpredictable backedge-taken count.<br>
>> ; CHECK: Loop %for.body.i: max backedge-taken count is 1<br>
>> @a = common global i32 0, align 4<br>
>><br>
>> @@ -127,7 +127,7 @@ bar.exit:<br>
>><br>
>> ; PR18886: Indvars miscompile due to an incorrect max backedge taken count from SCEV.<br>
>> ; CHECK-LABEL: @pr18886<br>
>> -; CHECK: Loop %for.body: <multiple exits> Unpredictable backedge-taken count.<br>
>> +; CHECK: Loop %for.body: <multiple exits> Unpredictable backedge-taken count.<br>
>> ; CHECK: Loop %for.body: max backedge-taken count is 3<br>
>> @aa = global i64 0, align 8<br>
>><br>
>> @@ -157,8 +157,8 @@ return:<br>
>> ; before the check is forever skipped.<br>
>> ;<br>
>> ; CHECK-LABEL: @cannot_compute_mustexit<br>
>> -; CHECK: Loop %for.body.i: <multiple exits> Unpredictable backedge-taken count.<br>
>> -; CHECK: Loop %for.body.i: Unpredictable max backedge-taken count.<br>
>> +; CHECK: Loop %for.body.i: <multiple exits> Unpredictable backedge-taken count.<br>
>> +; CHECK: Loop %for.body.i: Unpredictable max backedge-taken count.<br>
>> @b = common global i32 0, align 4<br>
>><br>
>> define i32 @cannot_compute_mustexit() {<br>
>> @@ -186,7 +186,7 @@ bar.exit:<br>
>> ; MaxBECount should be the minimum of them.<br>
>> ;<br>
>> ; CHECK-LABEL: @two_mustexit<br>
>> -; CHECK: Loop %for.body.i: <multiple exits> Unpredictable backedge-taken count.<br>
>> +; CHECK: Loop %for.body.i: <multiple exits> Unpredictable backedge-taken count.<br>
>> ; CHECK: Loop %for.body.i: max backedge-taken count is 1<br>
>> define i32 @two_mustexit() {<br>
>> entry:<br>
>><br>
>> Modified: llvm/trunk/test/Bitcode/highLevelStructure.3.2.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/highLevelStructure.3.2.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/highLevelStructure.3.2.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Bitcode/highLevelStructure.3.2.ll (original)<br>
>> +++ llvm/trunk/test/Bitcode/highLevelStructure.3.2.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -5,7 +5,7 @@<br>
>> ; older bitcode files.<br>
>><br>
>> ; Data Layout Test<br>
>> -; CHECK: target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-f80:32-n8:16:32-S32"<br>
>> +; CHECK: target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-a0:0:64-f80:32:32-n8:16:32-S32"<br>
>> target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-a0:0:64-f80:32:32-n8:16:32-S32"<br>
>><br>
>> ; Module-Level Inline Assembly Test<br>
>><br>
>> Modified: llvm/trunk/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll (original)<br>
>> +++ llvm/trunk/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,6 +1,8 @@<br>
>> ; RUN: opt < %s -O3 | \<br>
>> ; RUN:   llc -mtriple=thumbv7-apple-darwin10 -mattr=+neon | FileCheck %s<br>
>><br>
>> +target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32"<br>
>> +<br>
>> define void @fred(i32 %three_by_three, i8* %in, double %dt1, i32 %x_size, i32 %y_size, i8* %bp) nounwind {<br>
>> entry:<br>
>> ; -- The loop following the load should only use a single add-literation<br>
>><br>
>> Removed: llvm/trunk/test/Linker/comdat3.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/comdat3.ll?rev=231269&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/comdat3.ll?rev=231269&view=auto</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Linker/comdat3.ll (original)<br>
>> +++ llvm/trunk/test/Linker/comdat3.ll (removed)<br>
>> @@ -1,5 +0,0 @@<br>
>> -; RUN: not llvm-link %s %p/Inputs/comdat2.ll -S -o - 2>&1 | FileCheck %s<br>
>> -<br>
>> -$foo = comdat largest<br>
>> -@foo = global i32 43, comdat($foo)<br>
>> -; CHECK: Linking COMDATs named 'foo': can't do size dependent selection without DataLayout!<br>
>><br>
>> Modified: llvm/trunk/test/Linker/datalayout.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/datalayout.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/datalayout.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Linker/datalayout.ll (original)<br>
>> +++ llvm/trunk/test/Linker/datalayout.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,13 +1,12 @@<br>
>> ; REQUIRES: shell<br>
>> -; RUN: llvm-link %s %S/Inputs/datalayout-a.ll -S -o - 2>%t.a.err | FileCheck %s<br>
>> +; RUN: llvm-link %s %S/Inputs/datalayout-a.ll -S -o - 2>%t.a.err<br>
>> ; RUN: (echo foo ;cat %t.a.err) | FileCheck --check-prefix=WARN-A %s<br>
>><br>
>> -; RUN: llvm-link %s %S/Inputs/datalayout-b.ll -S -o - 2>%t.b.err | FileCheck %s<br>
>> +; RUN: llvm-link %s %S/Inputs/datalayout-b.ll -S -o - 2>%t.b.err<br>
>> ; RUN: cat %t.b.err | FileCheck --check-prefix=WARN-B %s<br>
>><br>
>> target datalayout = "e"<br>
>><br>
>> -; CHECK: target datalayout = "e"<br>
>><br>
>> ; WARN-A-NOT: WARNING<br>
>><br>
>><br>
>> Modified: llvm/trunk/test/Other/constant-fold-gep.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/constant-fold-gep.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/constant-fold-gep.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Other/constant-fold-gep.ll (original)<br>
>> +++ llvm/trunk/test/Other/constant-fold-gep.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,8 +1,8 @@<br>
>> -; "PLAIN" - No optimizations. This tests the target-independent<br>
>> +; "PLAIN" - No optimizations. This tests the default target layout<br>
>> ; constant folder.<br>
>> ; RUN: opt -S -o - < %s | FileCheck --check-prefix=PLAIN %s<br>
>><br>
>> -; "OPT" - Optimizations but no targetdata. This tests target-independent<br>
>> +; "OPT" - Optimizations but no targetdata. This tests default target layout<br>
>> ; folding in the optimizers.<br>
>> ; RUN: opt -S -o - -instcombine -globalopt < %s | FileCheck --check-prefix=OPT %s<br>
>><br>
>> @@ -10,7 +10,7 @@<br>
>> ; folding in the optimizers.<br>
>> ; RUN: opt -S -o - -instcombine -globalopt -default-data-layout="e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64" < %s | FileCheck --check-prefix=TO %s<br>
>><br>
>> -; "SCEV" - ScalarEvolution but no targetdata.<br>
>> +; "SCEV" - ScalarEvolution with default target layout<br>
>> ; RUN: opt -analyze -scalar-evolution < %s | FileCheck --check-prefix=SCEV %s<br>
>><br>
>><br>
>> @@ -24,12 +24,12 @@<br>
>> ; PLAIN: @F1 = global i1* getelementptr (i1* inttoptr (i32 1 to i1*), i32 -2)<br>
>> ; PLAIN: @H8 = global i8* getelementptr (i8* null, i32 -1)<br>
>> ; PLAIN: @H1 = global i1* getelementptr (i1* null, i32 -1)<br>
>> -; OPT: @G8 = global i8* getelementptr (i8* inttoptr (i32 1 to i8*), i32 -1)<br>
>> -; OPT: @G1 = global i1* getelementptr (i1* inttoptr (i32 1 to i1*), i32 -1)<br>
>> -; OPT: @F8 = global i8* getelementptr (i8* inttoptr (i32 1 to i8*), i32 -2)<br>
>> -; OPT: @F1 = global i1* getelementptr (i1* inttoptr (i32 1 to i1*), i32 -2)<br>
>> -; OPT: @H8 = global i8* getelementptr (i8* null, i32 -1)<br>
>> -; OPT: @H1 = global i1* getelementptr (i1* null, i32 -1)<br>
>> +; OPT: @G8 = global i8* null<br>
>> +; OPT: @G1 = global i1* null<br>
>> +; OPT: @F8 = global i8* inttoptr (i64 -1 to i8*)<br>
>> +; OPT: @F1 = global i1* inttoptr (i64 -1 to i1*)<br>
>> +; OPT: @H8 = global i8* inttoptr (i64 -1 to i8*)<br>
>> +; OPT: @H1 = global i1* inttoptr (i64 -1 to i1*)<br>
>> ; TO: @G8 = global i8* null<br>
>> ; TO: @G1 = global i1* null<br>
>> ; TO: @F8 = global i8* inttoptr (i64 -1 to i8*)<br>
>> @@ -57,15 +57,15 @@<br>
>> ; PLAIN: @g = constant i64 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64)<br>
>> ; PLAIN: @h = constant i64 ptrtoint (i1** getelementptr (i1** null, i32 1) to i64)<br>
>> ; PLAIN: @i = constant i64 ptrtoint (i1** getelementptr ({ i1, i1* }* null, i64 0, i32 1) to i64)<br>
>> -; OPT: @a = constant i64 mul (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 2310)<br>
>> -; OPT: @b = constant i64 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64)<br>
>> -; OPT: @c = constant i64 mul (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 2)<br>
>> -; OPT: @d = constant i64 mul (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 11)<br>
>> -; OPT: @e = constant i64 ptrtoint (double* getelementptr ({ double, float, double, double }* null, i64 0, i32 2) to i64)<br>
>> +; OPT: @a = constant i64 18480<br>
>> +; OPT: @b = constant i64 8<br>
>> +; OPT: @c = constant i64 16<br>
>> +; OPT: @d = constant i64 88<br>
>> +; OPT: @e = constant i64 16<br>
>> ; OPT: @f = constant i64 1<br>
>> -; OPT: @g = constant i64 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64)<br>
>> -; OPT: @h = constant i64 ptrtoint (i1** getelementptr (i1** null, i32 1) to i64)<br>
>> -; OPT: @i = constant i64 ptrtoint (i1** getelementptr ({ i1, i1* }* null, i64 0, i32 1) to i64)<br>
>> +; OPT: @g = constant i64 8<br>
>> +; OPT: @h = constant i64 8<br>
>> +; OPT: @i = constant i64 8<br>
>> ; TO: @a = constant i64 18480<br>
>> ; TO: @b = constant i64 8<br>
>> ; TO: @c = constant i64 16<br>
>> @@ -91,9 +91,9 @@<br>
>> ; PLAIN: @M = constant i64* getelementptr (i64* null, i32 1)<br>
>> ; PLAIN: @N = constant i64* getelementptr ({ i64, i64 }* null, i32 0, i32 1)<br>
>> ; PLAIN: @O = constant i64* getelementptr ([2 x i64]* null, i32 0, i32 1)<br>
>> -; OPT: @M = constant i64* getelementptr (i64* null, i32 1)<br>
>> -; OPT: @N = constant i64* getelementptr ({ i64, i64 }* null, i32 0, i32 1)<br>
>> -; OPT: @O = constant i64* getelementptr ([2 x i64]* null, i32 0, i32 1)<br>
>> +; OPT: @M = constant i64* inttoptr (i64 8 to i64*)<br>
>> +; OPT: @N = constant i64* inttoptr (i64 8 to i64*)<br>
>> +; OPT: @O = constant i64* inttoptr (i64 8 to i64*)<br>
>> ; TO: @M = constant i64* inttoptr (i64 8 to i64*)<br>
>> ; TO: @N = constant i64* inttoptr (i64 8 to i64*)<br>
>> ; TO: @O = constant i64* inttoptr (i64 8 to i64*)<br>
>> @@ -107,7 +107,7 @@<br>
>> ; PLAIN: @Y = global [3 x { i32, i32 }]* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 2)<br>
>> ; PLAIN: @Z = global i32* getelementptr inbounds (i32* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 0, i64 1, i32 0), i64 1)<br>
>> ; OPT: @Y = global [3 x { i32, i32 }]* getelementptr ([3 x { i32, i32 }]* @ext, i64 2)<br>
>> -; OPT: @Z = global i32* getelementptr (i32* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 0, i64 1, i32 0), i64 1)<br>
>> +; OPT: @Z = global i32* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 0, i64 1, i32 1)<br>
>> ; TO: @Y = global [3 x { i32, i32 }]* getelementptr ([3 x { i32, i32 }]* @ext, i64 2)<br>
>> ; TO: @Z = global i32* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 0, i64 1, i32 1)<br>
>><br>
>> @@ -143,22 +143,22 @@<br>
>> ; PLAIN:   ret i1* %t<br>
>> ; PLAIN: }<br>
>> ; OPT: define i8* @goo8() #0 {<br>
>> -; OPT:   ret i8* getelementptr (i8* inttoptr (i32 1 to i8*), i32 -1)<br>
>> +; OPT:   ret i8* null<br>
>> ; OPT: }<br>
>> ; OPT: define i1* @goo1() #0 {<br>
>> -; OPT:   ret i1* getelementptr (i1* inttoptr (i32 1 to i1*), i32 -1)<br>
>> +; OPT:   ret i1* null<br>
>> ; OPT: }<br>
>> ; OPT: define i8* @foo8() #0 {<br>
>> -; OPT:   ret i8* getelementptr (i8* inttoptr (i32 1 to i8*), i32 -2)<br>
>> +; OPT:   ret i8* inttoptr (i64 -1 to i8*)<br>
>> ; OPT: }<br>
>> ; OPT: define i1* @foo1() #0 {<br>
>> -; OPT:   ret i1* getelementptr (i1* inttoptr (i32 1 to i1*), i32 -2)<br>
>> +; OPT:   ret i1* inttoptr (i64 -1 to i1*)<br>
>> ; OPT: }<br>
>> ; OPT: define i8* @hoo8() #0 {<br>
>> -; OPT:   ret i8* getelementptr (i8* null, i32 -1)<br>
>> +; OPT:   ret i8* inttoptr (i64 -1 to i8*)<br>
>> ; OPT: }<br>
>> ; OPT: define i1* @hoo1() #0 {<br>
>> -; OPT:   ret i1* getelementptr (i1* null, i32 -1)<br>
>> +; OPT:   ret i1* inttoptr (i64 -1 to i1*)<br>
>> ; OPT: }<br>
>> ; TO: define i8* @goo8() #0 {<br>
>> ; TO:   ret i8* null<br>
>> @@ -180,20 +180,20 @@<br>
>> ; TO: }<br>
>> ; SCEV: Classifying expressions for: @goo8<br>
>> ; SCEV:   %t = bitcast i8* getelementptr (i8* inttoptr (i32 1 to i8*), i32 -1) to i8*<br>
>> -; SCEV:   -->  ((-1 * sizeof(i8)) + inttoptr (i32 1 to i8*))<br>
>> +; SCEV:   -->  (-1 + inttoptr (i32 1 to i8*))<br>
>> ; SCEV: Classifying expressions for: @goo1<br>
>> ; SCEV:   %t = bitcast i1* getelementptr (i1* inttoptr (i32 1 to i1*), i32 -1) to i1*<br>
>> -; SCEV:   -->  ((-1 * sizeof(i1)) + inttoptr (i32 1 to i1*))<br>
>> +; SCEV:   -->  (-1 + inttoptr (i32 1 to i1*))<br>
>> ; SCEV: Classifying expressions for: @foo8<br>
>> ; SCEV:   %t = bitcast i8* getelementptr (i8* inttoptr (i32 1 to i8*), i32 -2) to i8*<br>
>> -; SCEV:   -->  ((-2 * sizeof(i8)) + inttoptr (i32 1 to i8*))<br>
>> +; SCEV:   -->  (-2 + inttoptr (i32 1 to i8*))<br>
>> ; SCEV: Classifying expressions for: @foo1<br>
>> ; SCEV:   %t = bitcast i1* getelementptr (i1* inttoptr (i32 1 to i1*), i32 -2) to i1*<br>
>> -; SCEV:   -->  ((-2 * sizeof(i1)) + inttoptr (i32 1 to i1*))<br>
>> +; SCEV:   -->  (-2 + inttoptr (i32 1 to i1*))<br>
>> ; SCEV: Classifying expressions for: @hoo8<br>
>> -; SCEV:   -->  (-1 * sizeof(i8))<br>
>> +; SCEV:   -->  -1<br>
>> ; SCEV: Classifying expressions for: @hoo1<br>
>> -; SCEV:   -->  (-1 * sizeof(i1))<br>
>> +; SCEV:   -->  -1<br>
>><br>
>> define i8* @goo8() nounwind {<br>
>>   %t = bitcast i8* getelementptr (i8* inttoptr (i32 1 to i8*), i32 -1) to i8*<br>
>> @@ -257,31 +257,31 @@ define i1* @hoo1() nounwind {<br>
>> ; PLAIN:   ret i64 %t<br>
>> ; PLAIN: }<br>
>> ; OPT: define i64 @fa() #0 {<br>
>> -; OPT:   ret i64 mul (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 2310)<br>
>> +; OPT:   ret i64 18480<br>
>> ; OPT: }<br>
>> ; OPT: define i64 @fb() #0 {<br>
>> -; OPT:   ret i64 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64)<br>
>> +; OPT:   ret i64 8<br>
>> ; OPT: }<br>
>> ; OPT: define i64 @fc() #0 {<br>
>> -; OPT:   ret i64 mul (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 2)<br>
>> +; OPT:   ret i64 16<br>
>> ; OPT: }<br>
>> ; OPT: define i64 @fd() #0 {<br>
>> -; OPT:   ret i64 mul (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 11)<br>
>> +; OPT:   ret i64 88<br>
>> ; OPT: }<br>
>> ; OPT: define i64 @fe() #0 {<br>
>> -; OPT:   ret i64 ptrtoint (double* getelementptr ({ double, float, double, double }* null, i64 0, i32 2) to i64)<br>
>> +; OPT:   ret i64 16<br>
>> ; OPT: }<br>
>> ; OPT: define i64 @ff() #0 {<br>
>> ; OPT:   ret i64 1<br>
>> ; OPT: }<br>
>> ; OPT: define i64 @fg() #0 {<br>
>> -; OPT:   ret i64 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64)<br>
>> +; OPT:   ret i64 8<br>
>> ; OPT: }<br>
>> ; OPT: define i64 @fh() #0 {<br>
>> -; OPT:   ret i64 ptrtoint (i1** getelementptr (i1** null, i32 1) to i64)<br>
>> +; OPT:   ret i64 8<br>
>> ; OPT: }<br>
>> ; OPT: define i64 @fi() #0 {<br>
>> -; OPT:   ret i64 ptrtoint (i1** getelementptr ({ i1, i1* }* null, i64 0, i32 1) to i64)<br>
>> +; OPT:   ret i64 8<br>
>> ; OPT: }<br>
>> ; TO: define i64 @fa() #0 {<br>
>> ; TO:   ret i64 18480<br>
>> @@ -311,22 +311,22 @@ define i1* @hoo1() nounwind {<br>
>> ; TO:   ret i64 8<br>
>> ; TO: }<br>
>> ; SCEV: Classifying expressions for: @fa<br>
>> -; SCEV:   %t = bitcast i64 mul (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 2310) to i64<br>
>> +; SCEV:   %t = bitcast i64 mul (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 2310) to i64<br>
>> ; SCEV:   -->  (2310 * sizeof(double))<br>
>> ; SCEV: Classifying expressions for: @fb<br>
>> -; SCEV:   %t = bitcast i64 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64) to i64<br>
>> +; SCEV:   %t = bitcast i64 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64) to i64<br>
>> ; SCEV:   -->  alignof(double)<br>
>> ; SCEV: Classifying expressions for: @fc<br>
>> -; SCEV:   %t = bitcast i64 mul nuw (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 2) to i64<br>
>> +; SCEV:   %t = bitcast i64 mul nuw (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 2) to i64<br>
>> ; SCEV:   -->  (2 * sizeof(double))<br>
>> ; SCEV: Classifying expressions for: @fd<br>
>> -; SCEV:   %t = bitcast i64 mul nuw (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 11) to i64<br>
>> +; SCEV:   %t = bitcast i64 mul nuw (i64 ptrtoint (double* getelementptr (double* null, i32 1) to i64), i64 11) to i64<br>
>> ; SCEV:   -->  (11 * sizeof(double))<br>
>> ; SCEV: Classifying expressions for: @fe<br>
>> -; SCEV:   %t = bitcast i64 ptrtoint (double* getelementptr ({ double, float, double, double }* null, i64 0, i32 2) to i64) to i64<br>
>> +; SCEV:   %t = bitcast i64 ptrtoint (double* getelementptr ({ double, float, double, double }* null, i64 0, i32 2) to i64) to i64<br>
>> ; SCEV:   -->  offsetof({ double, float, double, double }, 2)<br>
>> ; SCEV: Classifying expressions for: @ff<br>
>> -; SCEV:   %t = bitcast i64 1 to i64<br>
>> +; SCEV:   %t = bitcast i64 1 to i64<br>
>> ; SCEV:   -->  1<br>
>> ; SCEV: Classifying expressions for: @fg<br>
>> ; SCEV:   %t = bitcast i64 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64) to i64<br>
>> @@ -388,13 +388,13 @@ define i64 @fi() nounwind {<br>
>> ; PLAIN:   ret i64* %t<br>
>> ; PLAIN: }<br>
>> ; OPT: define i64* @fM() #0 {<br>
>> -; OPT:   ret i64* getelementptr (i64* null, i32 1)<br>
>> +; OPT:   ret i64* inttoptr (i64 8 to i64*)<br>
>> ; OPT: }<br>
>> ; OPT: define i64* @fN() #0 {<br>
>> -; OPT:   ret i64* getelementptr ({ i64, i64 }* null, i32 0, i32 1)<br>
>> +; OPT:   ret i64* inttoptr (i64 8 to i64*)<br>
>> ; OPT: }<br>
>> ; OPT: define i64* @fO() #0 {<br>
>> -; OPT:   ret i64* getelementptr ([2 x i64]* null, i32 0, i32 1)<br>
>> +; OPT:   ret i64* inttoptr (i64 8 to i64*)<br>
>> ; OPT: }<br>
>> ; TO: define i64* @fM() #0 {<br>
>> ; TO:   ret i64* inttoptr (i64 8 to i64*)<br>
>> @@ -406,14 +406,14 @@ define i64 @fi() nounwind {<br>
>> ; TO:   ret i64* inttoptr (i64 8 to i64*)<br>
>> ; TO: }<br>
>> ; SCEV: Classifying expressions for: @fM<br>
>> -; SCEV:   %t = bitcast i64* getelementptr (i64* null, i32 1) to i64*<br>
>> -; SCEV:   -->  sizeof(i64)<br>
>> +; SCEV:   %t = bitcast i64* getelementptr (i64* null, i32 1) to i64*<br>
>> +; SCEV:   -->  8<br>
>> ; SCEV: Classifying expressions for: @fN<br>
>> -; SCEV:   %t = bitcast i64* getelementptr ({ i64, i64 }* null, i32 0, i32 1) to i64*<br>
>> -; SCEV:   -->  sizeof(i64)<br>
>> +; SCEV:   %t = bitcast i64* getelementptr ({ i64, i64 }* null, i32 0, i32 1) to i64*<br>
>> +; SCEV:   -->  8<br>
>> ; SCEV: Classifying expressions for: @fO<br>
>> -; SCEV:   %t = bitcast i64* getelementptr ([2 x i64]* null, i32 0, i32 1) to i64*<br>
>> -; SCEV:   -->  sizeof(i64)<br>
>> +; SCEV:   %t = bitcast i64* getelementptr ([2 x i64]* null, i32 0, i32 1) to i64*<br>
>> +; SCEV:   -->  8<br>
>><br>
>> define i64* @fM() nounwind {<br>
>>   %t = bitcast i64* getelementptr (i64* null, i32 1) to i64*<br>
>> @@ -433,14 +433,14 @@ define i64* @fO() nounwind {<br>
>> ; PLAIN:   ret i32* %t<br>
>> ; PLAIN: }<br>
>> ; OPT: define i32* @fZ() #0 {<br>
>> -; OPT:   ret i32* getelementptr (i32* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 0, i64 1, i32 0), i64 1)<br>
>> +; OPT:   ret i32* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 0, i64 1, i32 1)<br>
>> ; OPT: }<br>
>> ; TO: define i32* @fZ() #0 {<br>
>> ; TO:   ret i32* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 0, i64 1, i32 1)<br>
>> ; TO: }<br>
>> ; SCEV: Classifying expressions for: @fZ<br>
>> ; SCEV:   %t = bitcast i32* getelementptr inbounds (i32* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 0, i64 1, i32 0), i64 1) to i32*<br>
>> -; SCEV:   -->  ((3 * sizeof(i32)) + @ext)<br>
>> +; SCEV:   -->  (12 + @ext)<br>
>><br>
>> define i32* @fZ() nounwind {<br>
>>   %t = bitcast i32* getelementptr inbounds (i32* getelementptr inbounds ([3 x { i32, i32 }]* @ext, i64 0, i64 1, i32 0), i64 1) to i32*<br>
>> @@ -457,14 +457,14 @@ define i8* @different_addrspace() nounwi<br>
>>   %p = getelementptr inbounds i8, i8* addrspacecast ([4 x i8] addrspace(12)* @p12 to i8*),<br>
>>                                   i32 2<br>
>>   ret i8* %p<br>
>> -; OPT: ret i8* getelementptr (i8* addrspacecast (i8 addrspace(12)* getelementptr inbounds ([4 x i8] addrspace(12)* @p12, i32 0, i32 0) to i8*), i32 2)<br>
>> +; OPT: ret i8* getelementptr ([4 x i8]* addrspacecast ([4 x i8] addrspace(12)* @p12 to [4 x i8]*), i64 0, i64 2)<br>
>> }<br>
>><br>
>> define i8* @same_addrspace() nounwind noinline {<br>
>> ; OPT: same_addrspace<br>
>>   %p = getelementptr inbounds i8, i8* bitcast ([4 x i8] * @p0 to i8*), i32 2<br>
>>   ret i8* %p<br>
>> -; OPT: ret i8* getelementptr inbounds ([4 x i8]* @p0, i32 0, i32 2)<br>
>> +; OPT: ret i8* getelementptr inbounds ([4 x i8]* @p0, i64 0, i64 2)<br>
>> }<br>
>><br>
>> @gv1 = internal global i32 1<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/ConstantMerge/merge-both.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ConstantMerge/merge-both.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ConstantMerge/merge-both.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/ConstantMerge/merge-both.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/ConstantMerge/merge-both.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,7 +1,6 @@<br>
>> ; RUN: opt -constmerge -S < %s | FileCheck %s<br>
>> ; Test that in one run var3 is merged into var2 and var1 into var4.<br>
>> -; Test that we merge @var5 and @var6 into one with the higher alignment, and<br>
>> -; don't merge var7/var8 into var5/var6.<br>
>> +; Test that we merge @var5 and @var6 into one with the higher alignment<br>
>><br>
>> declare void @zed(%struct.foobar*, %struct.foobar*)<br>
>><br>
>> @@ -23,8 +22,8 @@ declare void @helper([16 x i8]*)<br>
>> @var7 = internal constant [16 x i8] c"foo1bar2foo3bar\00"<br>
>> @var8 = private unnamed_addr constant [16 x i8] c"foo1bar2foo3bar\00"<br>
>><br>
>> -; CHECK-NEXT: @var6 = private constant [16 x i8] c"foo1bar2foo3bar\00", align 16<br>
>> -; CHECK-NEXT: @var8 = private constant [16 x i8] c"foo1bar2foo3bar\00"<br>
>> +; CHECK-NEXT: @var7 = internal constant [16 x i8] c"foo1bar2foo3bar\00"<br>
>> +; CHECK-NEXT: @var8 = private constant [16 x i8] c"foo1bar2foo3bar\00", align 16<br>
>><br>
>> @var4a = alias %struct.foobar* @var4<br>
>> @llvm.used = appending global [1 x %struct.foobar*] [%struct.foobar* @var4a], section "llvm.metadata"<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/GlobalOpt/externally-initialized-global-ctr.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -26,7 +26,7 @@ define internal void @_GLOBAL__I_a() sec<br>
>> declare void @test(i8*)<br>
>><br>
>> define void @print() {<br>
>> -; CHECK: %1 = load i8*, i8** getelementptr inbounds ([1 x %struct.ButtonInitData]* @_ZL14buttonInitData, i32 0, i32 0, i32 0), align 4<br>
>> +; CHECK: %1 = load i8*, i8** @_ZL14buttonInitData.0.0, align 4<br>
>>   %1 = load i8*, i8** getelementptr inbounds ([1 x %struct.ButtonInitData]* @_ZL14buttonInitData, i32 0, i32 0, i32 0), align 4<br>
>>   call void @test(i8* %1)<br>
>>   ret void<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/2008-09-02-IVType.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/2008-09-02-IVType.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/2008-09-02-IVType.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/2008-09-02-IVType.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/2008-09-02-IVType.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,6 +1,10 @@<br>
>> ; RUN: opt < %s -indvars -S | grep sext | count 1<br>
>> ; ModuleID = '<stdin>'<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>>        %struct.App1Marker = type <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }><br>
>>        %struct.ComponentInstanceRecord = type <{ [1 x i32] }><br>
>>        %struct.DCPredictors = type { [5 x i16] }<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/2009-04-27-Floating.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/2009-04-27-Floating.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/2009-04-27-Floating.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/2009-04-27-Floating.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/2009-04-27-Floating.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,9 @@<br>
>> ; RUN: opt < %s -indvars -S | FileCheck %s<br>
>> ; PR4086<br>
>> +<br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> declare void @foo()<br>
>><br>
>> define void @test() {<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/iv-widen.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/iv-widen.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/iv-widen.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/iv-widen.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/iv-widen.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,9 @@<br>
>> ; RUN: opt < %s -indvars -S | FileCheck %s<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> target triple = "x86_64-apple-darwin"<br>
>><br>
>> ; CHECK-LABEL: @sloop<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/lftr-extend-const.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/lftr-extend-const.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/lftr-extend-const.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/lftr-extend-const.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/lftr-extend-const.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,9 @@<br>
>> ;RUN: opt -S %s -indvars | FileCheck %s<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> ; CHECK-LABEL: @foo(<br>
>> ; CHECK-NOT: %lftr.wideiv = trunc i32 %indvars.iv.next to i16<br>
>> ; CHECK: %exitcond = icmp ne i32 %indvars.iv.next, 512<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/lftr_simple.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/lftr_simple.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/lftr_simple.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/lftr_simple.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/lftr_simple.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,7 +1,11 @@<br>
>> -; LFTR should eliminate the need for the computation of i*i completely.  It<br>
>> +; LFTR should eliminate the need for the computation of i*i completely.  It<br>
>> ; is only used to compute the exit value.<br>
>> ; RUN: opt < %s -indvars -dce -S | not grep mul<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> @A = external global i32                ; <i32*> [#uses=1]<br>
>><br>
>> define i32 @quadratic_setlt() {<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/pr20680.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/pr20680.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/pr20680.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/pr20680.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/pr20680.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,9 @@<br>
>> ; RUN: opt < %s -indvars -S | FileCheck %s<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> @a = common global i32 0, align 4<br>
>> @c = common global i32 0, align 4<br>
>> @b = common global i32 0, align 4<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/preserve-signed-wrap.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/preserve-signed-wrap.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/preserve-signed-wrap.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/preserve-signed-wrap.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/preserve-signed-wrap.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -4,6 +4,10 @@<br>
>> ; sext for the addressing, however it shouldn't eliminate the sext<br>
>> ; on the other phi, since that value undergoes signed wrapping.<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> define void @foo(i32* nocapture %d, i32 %n) nounwind {<br>
>> entry:<br>
>>        %0 = icmp sgt i32 %n, 0         ; <i1> [#uses=1]<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/promote-iv-to-eliminate-casts.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/promote-iv-to-eliminate-casts.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/promote-iv-to-eliminate-casts.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/promote-iv-to-eliminate-casts.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/promote-iv-to-eliminate-casts.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,8 @@<br>
>> -; RUN: opt < %s -indvars -S > %t<br>
>> -; RUN: not grep sext %t<br>
>> +; RUN: opt < %s -indvars -S | not grep sext<br>
>> +<br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>><br>
>> define i64 @test(i64* nocapture %first, i32 %count) nounwind readonly {<br>
>> entry:<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/signed-trip-count.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/signed-trip-count.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/signed-trip-count.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/signed-trip-count.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/signed-trip-count.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -2,6 +2,10 @@<br>
>> ; RUN: not grep sext %t<br>
>> ; RUN: grep phi %t | count 1<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> define void @foo(i64* nocapture %x, i32 %n) nounwind {<br>
>> entry:<br>
>>        %tmp102 = icmp sgt i32 %n, 0            ; <i1> [#uses=1]<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,9 @@<br>
>> ; RUN: opt -S -indvars < %s | FileCheck %s<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> define void @test1(float* nocapture %autoc, float* nocapture %data, float %d, i32 %data_len, i32 %sample) nounwind {<br>
>> entry:<br>
>>   %sub = sub i32 %data_len, %sample<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,6 +1,10 @@<br>
>> ; RUN: opt < %s -indvars -S | FileCheck %s<br>
>> target triple = "aarch64--linux-gnu"<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> ; Check the loop exit i32 compare instruction and operand are widened to i64<br>
>> ; instead of truncating IV before its use in the i32 compare instruction.<br>
>><br>
>><br>
>> Removed: llvm/trunk/test/Transforms/Inline/alloca-merge-align-nodl.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/alloca-merge-align-nodl.ll?rev=231269&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/alloca-merge-align-nodl.ll?rev=231269&view=auto</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/Inline/alloca-merge-align-nodl.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/Inline/alloca-merge-align-nodl.ll (removed)<br>
>> @@ -1,88 +0,0 @@<br>
>> -; RUN: opt < %s -inline -S | FileCheck %s<br>
>> -; This variant of the test has no data layout information.<br>
>> -target triple = "powerpc64-unknown-linux-gnu"<br>
>> -<br>
>> -%struct.s = type { i32, i32 }<br>
>> -<br>
>> -define void @foo(%struct.s* byval nocapture readonly %a) {<br>
>> -entry:<br>
>> -  %x = alloca [2 x i32], align 4<br>
>> -  %a1 = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 0<br>
>> -  %0 = load i32, i32* %a1, align 4<br>
>> -  %arrayidx = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 0<br>
>> -  store i32 %0, i32* %arrayidx, align 4<br>
>> -  %b = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 1<br>
>> -  %1 = load i32, i32* %b, align 4<br>
>> -  %arrayidx2 = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 1<br>
>> -  store i32 %1, i32* %arrayidx2, align 4<br>
>> -  call void @bar(i32* %arrayidx) #2<br>
>> -  ret void<br>
>> -}<br>
>> -<br>
>> -define void @foo0(%struct.s* byval nocapture readonly %a) {<br>
>> -entry:<br>
>> -  %x = alloca [2 x i32]<br>
>> -  %a1 = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 0<br>
>> -  %0 = load i32, i32* %a1, align 4<br>
>> -  %arrayidx = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 0<br>
>> -  store i32 %0, i32* %arrayidx, align 4<br>
>> -  %b = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 1<br>
>> -  %1 = load i32, i32* %b, align 4<br>
>> -  %arrayidx2 = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 1<br>
>> -  store i32 %1, i32* %arrayidx2, align 4<br>
>> -  call void @bar(i32* %arrayidx) #2<br>
>> -  ret void<br>
>> -}<br>
>> -<br>
>> -declare void @bar(i32*) #1<br>
>> -<br>
>> -define void @goo(%struct.s* byval nocapture readonly %a) {<br>
>> -entry:<br>
>> -  %x = alloca [2 x i32], align 32<br>
>> -  %a1 = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 0<br>
>> -  %0 = load i32, i32* %a1, align 4<br>
>> -  %arrayidx = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 0<br>
>> -  store i32 %0, i32* %arrayidx, align 32<br>
>> -  %b = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 1<br>
>> -  %1 = load i32, i32* %b, align 4<br>
>> -  %arrayidx2 = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 1<br>
>> -  store i32 %1, i32* %arrayidx2, align 4<br>
>> -  call void @bar(i32* %arrayidx) #2<br>
>> -  ret void<br>
>> -}<br>
>> -<br>
>> -; CHECK-LABEL: @main<br>
>> -; CHECK: alloca [2 x i32], align 32<br>
>> -; CHECK-NOT: alloca [2 x i32]<br>
>> -; CHECK: ret i32 0<br>
>> -<br>
>> -define signext i32 @main() {<br>
>> -entry:<br>
>> -  %a = alloca i64, align 8<br>
>> -  %tmpcast = bitcast i64* %a to %struct.s*<br>
>> -  store i64 0, i64* %a, align 8<br>
>> -  %a1 = bitcast i64* %a to i32*<br>
>> -  store i32 1, i32* %a1, align 8<br>
>> -  call void @foo(%struct.s* byval %tmpcast)<br>
>> -  store i32 2, i32* %a1, align 8<br>
>> -  call void @goo(%struct.s* byval %tmpcast)<br>
>> -  ret i32 0<br>
>> -}<br>
>> -<br>
>> -; CHECK-LABEL: @test0<br>
>> -; CHECK: alloca [2 x i32], align 32<br>
>> -; CHECK: alloca [2 x i32]<br>
>> -; CHECK: ret i32 0<br>
>> -<br>
>> -define signext i32 @test0() {<br>
>> -entry:<br>
>> -  %a = alloca i64, align 8<br>
>> -  %tmpcast = bitcast i64* %a to %struct.s*<br>
>> -  store i64 0, i64* %a, align 8<br>
>> -  %a1 = bitcast i64* %a to i32*<br>
>> -  store i32 1, i32* %a1, align 8<br>
>> -  call void @foo0(%struct.s* byval %tmpcast)<br>
>> -  store i32 2, i32* %a1, align 8<br>
>> -  call void @goo(%struct.s* byval %tmpcast)<br>
>> -  ret i32 0<br>
>> -}<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/Inline/alloca-merge-align.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/alloca-merge-align.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/alloca-merge-align.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/Inline/alloca-merge-align.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/Inline/alloca-merge-align.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -102,21 +102,3 @@ entry:<br>
>>   call void @goo(%struct.s* byval %tmpcast)<br>
>>   ret i32 0<br>
>> }<br>
>> -<br>
>> -; CHECK-LABEL: @test1<br>
>> -; CHECK: {{alloca \[2 x i32\]$}}<br>
>> -; CHECK-NOT: alloca [2 x i32]<br>
>> -; CHECK: ret i32 0<br>
>> -<br>
>> -define signext i32 @test1() {<br>
>> -entry:<br>
>> -  %a = alloca i64, align 8<br>
>> -  %tmpcast = bitcast i64* %a to %struct.s*<br>
>> -  store i64 0, i64* %a, align 8<br>
>> -  %a1 = bitcast i64* %a to i32*<br>
>> -  store i32 1, i32* %a1, align 8<br>
>> -  call void @foo0(%struct.s* byval %tmpcast)<br>
>> -  store i32 2, i32* %a1, align 8<br>
>> -  call void @foo1(%struct.s* byval %tmpcast)<br>
>> -  ret i32 0<br>
>> -}<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/Inline/lifetime-no-datalayout.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/lifetime-no-datalayout.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/lifetime-no-datalayout.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/Inline/lifetime-no-datalayout.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/Inline/lifetime-no-datalayout.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -8,13 +8,13 @@ define void @helper() {<br>
>>   ret void<br>
>> }<br>
>><br>
>> -; Size in llvm.lifetime.X should be -1 (unknown).<br>
>> +; Size in llvm.lifetime.X should be 1 (default for i8).<br>
>> define void @test() {<br>
>> ; CHECK-LABEL: @test(<br>
>> ; CHECK-NOT: lifetime<br>
>> -; CHECK: llvm.lifetime.start(i64 -1<br>
>> +; CHECK: llvm.lifetime.start(i64 1<br>
>> ; CHECK-NOT: lifetime<br>
>> -; CHECK: llvm.lifetime.end(i64 -1<br>
>> +; CHECK: llvm.lifetime.end(i64 1<br>
>>   call void @helper()<br>
>> ; CHECK-NOT: lifetime<br>
>> ; CHECK: ret void<br>
>><br>
>> Removed: llvm/trunk/test/Transforms/InstCombine/2012-09-24-MemcpyFromGlobalCrash.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2012-09-24-MemcpyFromGlobalCrash.ll?rev=231269&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2012-09-24-MemcpyFromGlobalCrash.ll?rev=231269&view=auto</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/InstCombine/2012-09-24-MemcpyFromGlobalCrash.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/InstCombine/2012-09-24-MemcpyFromGlobalCrash.ll (removed)<br>
>> @@ -1,19 +0,0 @@<br>
>> -; RUN: opt < %s -instcombine -S | FileCheck %s<br>
>> -<br>
>> -; Check we don't crash due to lack of target data.<br>
>> -<br>
>> -@G = constant [100 x i8] zeroinitializer<br>
>> -<br>
>> -declare void @bar(i8*)<br>
>> -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind<br>
>> -<br>
>> -define void @test() {<br>
>> -; CHECK-LABEL: @test(<br>
>> -; CHECK: llvm.memcpy<br>
>> -; CHECK: ret void<br>
>> -  %A = alloca [100 x i8]<br>
>> -  %a = getelementptr inbounds [100 x i8], [100 x i8]* %A, i64 0, i64 0<br>
>> -  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* getelementptr inbounds ([100 x i8]* @G, i64 0, i32 0), i64 100, i32 4, i1 false)<br>
>> -  call void @bar(i8* %a) readonly<br>
>> -  ret void<br>
>> -}<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/InstCombine/extractvalue.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/extractvalue.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/extractvalue.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/InstCombine/extractvalue.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/InstCombine/extractvalue.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -13,7 +13,7 @@ define i32 @foo(i32 %a, i32 %b) {<br>
>>         %s1 = insertvalue {i32, i32} %s1.1, i32 %b, 1<br>
>>         %v1 = extractvalue {i32, i32} %s1, 0<br>
>>         %v2 = extractvalue {i32, i32} %s1, 1<br>
>> -<br>
>> +<br>
>>         ; Build a nested struct and pull a sub struct out of it<br>
>>         ; This requires instcombine to insert a few insertvalue instructions<br>
>>         %ns1.1 = insertvalue {i32, {i32, i32}} undef, i32 %v1, 0<br>
>> @@ -40,7 +40,7 @@ define i32 @foo(i32 %a, i32 %b) {<br>
>> }<br>
>><br>
>> ; CHECK-LABEL: define i32 @extract2gep(<br>
>> -; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}, {{.*}}* %pair, i32 0, i32 1<br>
>> +; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}, {{.*}}* %pair, i64 0, i32 1<br>
>> ; CHECK-NEXT: [[LOAD:%[A-Za-z0-9]+]] = load i32, i32* [[GEP]]<br>
>> ; CHECK-NEXT: store<br>
>> ; CHECK-NEXT: br label %loop<br>
>> @@ -68,7 +68,7 @@ end:<br>
>> }<br>
>><br>
>> ; CHECK-LABEL: define i32 @doubleextract2gep(<br>
>> -; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}, {{.*}}* %arg, i32 0, i32 1, i32 1<br>
>> +; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}, {{.*}}* %arg, i64 0, i32 1, i32 1<br>
>> ; CHECK-NEXT: [[LOAD:%[A-Za-z0-9]+]] = load i32, i32* [[GEP]]<br>
>> ; CHECK-NEXT: ret i32 [[LOAD]]<br>
>> define i32 @doubleextract2gep({i32, {i32, i32}}* %arg) {<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/InstCombine/gc.relocate.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/gc.relocate.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/gc.relocate.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/InstCombine/gc.relocate.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/InstCombine/gc.relocate.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,4 +1,5 @@<br>
>> -; RUN: opt < %s -datalayout -instcombine -S | FileCheck %s<br>
>> +; RUN: opt < %s -instcombine -S | FileCheck %s<br>
>> +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"<br>
>><br>
>> ; Uses InstCombine with DataLayout to propagate dereferenceable<br>
>> ; attribute via gc.relocate: if the derived ptr is dereferenceable(N),<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/InstCombine/load-cmp.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/load-cmp.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/load-cmp.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/InstCombine/load-cmp.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/InstCombine/load-cmp.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,4 @@<br>
>> -; RUN: opt -instcombine -S < %s | FileCheck -check-prefix=NODL %s<br>
>> -; RUN: opt -instcombine -S -default-data-layout="p:32:32:32-p1:16:16:16-n8:16:32:64" < %s | FileCheck -check-prefix=P32 %s<br>
>> +; RUN: opt -instcombine -S -default-data-layout="p:32:32:32-p1:16:16:16-n8:16:32:64" < %s | FileCheck %s<br>
>><br>
>> @G16 = internal constant [10 x i16] [i16 35, i16 82, i16 69, i16 81, i16 85,<br>
>>                                      i16 73, i16 82, i16 69, i16 68, i16 0]<br>
>> @@ -25,13 +24,9 @@ define i1 @test1(i32 %X) {<br>
>>   %Q = load i16, i16* %P<br>
>>   %R = icmp eq i16 %Q, 0<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test1(<br>
>> -; NODL-NEXT: %R = icmp eq i32 %X, 9<br>
>> -; NODL-NEXT: ret i1 %R<br>
>> -<br>
>> -; P32-LABEL: @test1(<br>
>> -; P32-NEXT: %R = icmp eq i32 %X, 9<br>
>> -; P32-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test1(<br>
>> +; CHECK-NEXT: %R = icmp eq i32 %X, 9<br>
>> +; CHECK-NEXT: ret i1 %R<br>
>> }<br>
>><br>
>> define i1 @test1_noinbounds(i32 %X) {<br>
>> @@ -39,12 +34,9 @@ define i1 @test1_noinbounds(i32 %X) {<br>
>>   %Q = load i16, i16* %P<br>
>>   %R = icmp eq i16 %Q, 0<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test1_noinbounds(<br>
>> -; NODL-NEXT: %P = getelementptr [10 x i16], [10 x i16]* @G16, i32 0, i32 %X<br>
>> -<br>
>> -; P32-LABEL: @test1_noinbounds(<br>
>> -; P32-NEXT: %R = icmp eq i32 %X, 9<br>
>> -; P32-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test1_noinbounds(<br>
>> +; CHECK-NEXT: %R = icmp eq i32 %X, 9<br>
>> +; CHECK-NEXT: ret i1 %R<br>
>> }<br>
>><br>
>> define i1 @test1_noinbounds_i64(i64 %X) {<br>
>> @@ -52,12 +44,9 @@ define i1 @test1_noinbounds_i64(i64 %X)<br>
>>   %Q = load i16, i16* %P<br>
>>   %R = icmp eq i16 %Q, 0<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test1_noinbounds_i64(<br>
>> -; NODL-NEXT: %P = getelementptr [10 x i16], [10 x i16]* @G16, i64 0, i64 %X<br>
>> -<br>
>> -; P32-LABEL: @test1_noinbounds_i64(<br>
>> -; P32: %R = icmp eq i32 %1, 9<br>
>> -; P32-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test1_noinbounds_i64(<br>
>> +; CHECK: %R = icmp eq i32 %1, 9<br>
>> +; CHECK-NEXT: ret i1 %R<br>
>> }<br>
>><br>
>> define i1 @test1_noinbounds_as1(i32 %x) {<br>
>> @@ -66,10 +55,10 @@ define i1 @test1_noinbounds_as1(i32 %x)<br>
>>   %r = icmp eq i16 %q, 0<br>
>>   ret i1 %r<br>
>><br>
>> -; P32-LABEL: @test1_noinbounds_as1(<br>
>> -; P32-NEXT: trunc i32 %x to i16<br>
>> -; P32-NEXT: %r = icmp eq i16 %1, 9<br>
>> -; P32-NEXT: ret i1 %r<br>
>> +; CHECK-LABEL: @test1_noinbounds_as1(<br>
>> +; CHECK-NEXT: trunc i32 %x to i16<br>
>> +; CHECK-NEXT: %r = icmp eq i16 %1, 9<br>
>> +; CHECK-NEXT: ret i1 %r<br>
>> }<br>
>><br>
>> define i1 @test2(i32 %X) {<br>
>> @@ -77,9 +66,9 @@ define i1 @test2(i32 %X) {<br>
>>   %Q = load i16, i16* %P<br>
>>   %R = icmp slt i16 %Q, 85<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test2(<br>
>> -; NODL-NEXT: %R = icmp ne i32 %X, 4<br>
>> -; NODL-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test2(<br>
>> +; CHECK-NEXT:  %R = icmp ne i32 %X, 4<br>
>> +; CHECK-NEXT:  ret i1 %R<br>
>> }<br>
>><br>
>> define i1 @test3(i32 %X) {<br>
>> @@ -87,13 +76,9 @@ define i1 @test3(i32 %X) {<br>
>>   %Q = load double, double* %P<br>
>>   %R = fcmp oeq double %Q, 1.0<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test3(<br>
>> -; NODL-NEXT: %R = icmp eq i32 %X, 1<br>
>> -; NODL-NEXT: ret i1 %R<br>
>> -<br>
>> -; P32-LABEL: @test3(<br>
>> -; P32-NEXT: %R = icmp eq i32 %X, 1<br>
>> -; P32-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test3(<br>
>> +; CHECK-NEXT: %R = icmp eq i32 %X, 1<br>
>> +; CHECK-NEXT: ret i1 %R<br>
>><br>
>> }<br>
>><br>
>> @@ -102,17 +87,11 @@ define i1 @test4(i32 %X) {<br>
>>   %Q = load i16, i16* %P<br>
>>   %R = icmp sle i16 %Q, 73<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test4(<br>
>> -; NODL-NEXT: lshr i32 933, %X<br>
>> -; NODL-NEXT: and i32 {{.*}}, 1<br>
>> -; NODL-NEXT: %R = icmp ne i32 {{.*}}, 0<br>
>> -; NODL-NEXT: ret i1 %R<br>
>> -<br>
>> -; P32-LABEL: @test4(<br>
>> -; P32-NEXT: lshr i32 933, %X<br>
>> -; P32-NEXT: and i32 {{.*}}, 1<br>
>> -; P32-NEXT: %R = icmp ne i32 {{.*}}, 0<br>
>> -; P32-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test4(<br>
>> +; CHECK-NEXT: lshr i32 933, %X<br>
>> +; CHECK-NEXT: and i32 {{.*}}, 1<br>
>> +; CHECK-NEXT: %R = icmp ne i32 {{.*}}, 0<br>
>> +; CHECK-NEXT: ret i1 %R<br>
>> }<br>
>><br>
>> define i1 @test4_i16(i16 %X) {<br>
>> @@ -120,19 +99,12 @@ define i1 @test4_i16(i16 %X) {<br>
>>   %Q = load i16, i16* %P<br>
>>   %R = icmp sle i16 %Q, 73<br>
>>   ret i1 %R<br>
>> -<br>
>> -; NODL-LABEL: @test4_i16(<br>
>> -; NODL-NEXT: lshr i16 933, %X<br>
>> -; NODL-NEXT: and i16 {{.*}}, 1<br>
>> -; NODL-NEXT: %R = icmp ne i16 {{.*}}, 0<br>
>> -; NODL-NEXT: ret i1 %R<br>
>> -<br>
>> -; P32-LABEL: @test4_i16(<br>
>> -; P32-NEXT: sext i16 %X to i32<br>
>> -; P32-NEXT: lshr i32 933, %1<br>
>> -; P32-NEXT: and i32 {{.*}}, 1<br>
>> -; P32-NEXT: %R = icmp ne i32 {{.*}}, 0<br>
>> -; P32-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test4_i16(<br>
>> +; CHECK-NEXT: sext i16 %X to i32<br>
>> +; CHECK-NEXT: lshr i32 933, %1<br>
>> +; CHECK-NEXT: and i32 {{.*}}, 1<br>
>> +; CHECK-NEXT: %R = icmp ne i32 {{.*}}, 0<br>
>> +; CHECK-NEXT: ret i1 %R<br>
>> }<br>
>><br>
>> define i1 @test5(i32 %X) {<br>
>> @@ -140,17 +112,11 @@ define i1 @test5(i32 %X) {<br>
>>   %Q = load i16, i16* %P<br>
>>   %R = icmp eq i16 %Q, 69<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test5(<br>
>> -; NODL-NEXT: icmp eq i32 %X, 2<br>
>> -; NODL-NEXT: icmp eq i32 %X, 7<br>
>> -; NODL-NEXT: %R = or i1<br>
>> -; NODL-NEXT: ret i1 %R<br>
>> -<br>
>> -; P32-LABEL: @test5(<br>
>> -; P32-NEXT: icmp eq i32 %X, 2<br>
>> -; P32-NEXT: icmp eq i32 %X, 7<br>
>> -; P32-NEXT: %R = or i1<br>
>> -; P32-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test5(<br>
>> +; CHECK-NEXT: icmp eq i32 %X, 2<br>
>> +; CHECK-NEXT: icmp eq i32 %X, 7<br>
>> +; CHECK-NEXT: %R = or i1<br>
>> +; CHECK-NEXT: ret i1 %R<br>
>> }<br>
>><br>
>> define i1 @test6(i32 %X) {<br>
>> @@ -158,15 +124,10 @@ define i1 @test6(i32 %X) {<br>
>>   %Q = load double, double* %P<br>
>>   %R = fcmp ogt double %Q, 0.0<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test6(<br>
>> -; NODL-NEXT: add i32 %X, -1<br>
>> -; NODL-NEXT: %R = icmp ult i32 {{.*}}, 3<br>
>> -; NODL-NEXT: ret i1 %R<br>
>> -<br>
>> -; P32-LABEL: @test6(<br>
>> -; P32-NEXT: add i32 %X, -1<br>
>> -; P32-NEXT: %R = icmp ult i32 {{.*}}, 3<br>
>> -; P32-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test6(<br>
>> +; CHECK-NEXT: add i32 %X, -1<br>
>> +; CHECK-NEXT: %R = icmp ult i32 {{.*}}, 3<br>
>> +; CHECK-NEXT: ret i1 %R<br>
>> }<br>
>><br>
>> define i1 @test7(i32 %X) {<br>
>> @@ -174,15 +135,10 @@ define i1 @test7(i32 %X) {<br>
>>   %Q = load double, double* %P<br>
>>   %R = fcmp olt double %Q, 0.0<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test7(<br>
>> -; NODL-NEXT: add i32 %X, -1<br>
>> -; NODL-NEXT: %R = icmp ugt i32 {{.*}}, 2<br>
>> -; NODL-NEXT: ret i1 %R<br>
>> -<br>
>> -; P32-LABEL: @test7(<br>
>> -; P32-NEXT: add i32 %X, -1<br>
>> -; P32-NEXT: %R = icmp ugt i32 {{.*}}, 2<br>
>> -; P32-NEXT: ret i1 %R<br>
>> +; CHECK-LABEL: @test7(<br>
>> +; CHECK-NEXT: add i32 %X, -1<br>
>> +; CHECK-NEXT: %R = icmp ugt i32 {{.*}}, 2<br>
>> +; CHECK-NEXT: ret i1 %R<br>
>> }<br>
>><br>
>> define i1 @test8(i32 %X) {<br>
>> @@ -191,15 +147,10 @@ define i1 @test8(i32 %X) {<br>
>>   %R = and i16 %Q, 3<br>
>>   %S = icmp eq i16 %R, 0<br>
>>   ret i1 %S<br>
>> -; NODL-LABEL: @test8(<br>
>> -; NODL-NEXT: and i32 %X, -2<br>
>> -; NODL-NEXT: icmp eq i32 {{.*}}, 8<br>
>> -; NODL-NEXT: ret i1<br>
>> -<br>
>> -; P32-LABEL: @test8(<br>
>> -; P32-NEXT: and i32 %X, -2<br>
>> -; P32-NEXT: icmp eq i32 {{.*}}, 8<br>
>> -; P32-NEXT: ret i1<br>
>> +; CHECK-LABEL: @test8(<br>
>> +; CHECK-NEXT: and i32 %X, -2<br>
>> +; CHECK-NEXT: icmp eq i32 {{.*}}, 8<br>
>> +; CHECK-NEXT: ret i1<br>
>> }<br>
>><br>
>> @GA = internal constant [4 x { i32, i32 } ] [<br>
>> @@ -214,23 +165,15 @@ define i1 @test9(i32 %X) {<br>
>>   %Q = load i32, i32* %P<br>
>>   %R = icmp eq i32 %Q, 1<br>
>>   ret i1 %R<br>
>> -; NODL-LABEL: @test9(<br>
>> -; NODL-NEXT: add i32 %X, -1<br>
>> -; NODL-NEXT: icmp ult i32 {{.*}}, 2<br>
>> -; NODL-NEXT: ret i1<br>
>> -<br>
>> -; P32-LABEL: @test9(<br>
>> -; P32-NEXT: add i32 %X, -1<br>
>> -; P32-NEXT: icmp ult i32 {{.*}}, 2<br>
>> -; P32-NEXT: ret i1<br>
>> +; CHECK-LABEL: @test9(<br>
>> +; CHECK-NEXT: add i32 %X, -1<br>
>> +; CHECK-NEXT: icmp ult i32 {{.*}}, 2<br>
>> +; CHECK-NEXT: ret i1<br>
>> }<br>
>><br>
>> define i1 @test10_struct(i32 %x) {<br>
>> -; NODL-LABEL: @test10_struct(<br>
>> -; NODL: getelementptr inbounds %Foo, %Foo* @GS, i32 %x, i32 0<br>
>> -<br>
>> -; P32-LABEL: @test10_struct(<br>
>> -; P32: ret i1 false<br>
>> +; CHECK-LABEL: @test10_struct(<br>
>> +; CHECK: ret i1 false<br>
>>   %p = getelementptr inbounds %Foo, %Foo* @GS, i32 %x, i32 0<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 9<br>
>> @@ -238,11 +181,8 @@ define i1 @test10_struct(i32 %x) {<br>
>> }<br>
>><br>
>> define i1 @test10_struct_noinbounds(i32 %x) {<br>
>> -; NODL-LABEL: @test10_struct_noinbounds(<br>
>> -; NODL: getelementptr %Foo, %Foo* @GS, i32 %x, i32 0<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_noinbounds(<br>
>> -; P32: getelementptr %Foo, %Foo* @GS, i32 %x, i32 0<br>
>> +; CHECK-LABEL: @test10_struct_noinbounds(<br>
>> +; CHECK: getelementptr %Foo, %Foo* @GS, i32 %x, i32 0<br>
>>   %p = getelementptr %Foo, %Foo* @GS, i32 %x, i32 0<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 9<br>
>> @@ -252,11 +192,8 @@ define i1 @test10_struct_noinbounds(i32<br>
>> ; Test that the GEP indices are converted before we ever get here<br>
>> ; Index < ptr size<br>
>> define i1 @test10_struct_i16(i16 %x){<br>
>> -; NODL-LABEL: @test10_struct_i16(<br>
>> -; NODL: getelementptr inbounds %Foo, %Foo* @GS, i16 %x, i32 0<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_i16(<br>
>> -; P32: ret i1 false<br>
>> +; CHECK-LABEL: @test10_struct_i16(<br>
>> +; CHECK: ret i1 false<br>
>>   %p = getelementptr inbounds %Foo, %Foo* @GS, i16 %x, i32 0<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 0<br>
>> @@ -266,11 +203,8 @@ define i1 @test10_struct_i16(i16 %x){<br>
>> ; Test that the GEP indices are converted before we ever get here<br>
>> ; Index > ptr size<br>
>> define i1 @test10_struct_i64(i64 %x){<br>
>> -; NODL-LABEL: @test10_struct_i64(<br>
>> -; NODL: getelementptr inbounds %Foo, %Foo* @GS, i64 %x, i32 0<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_i64(<br>
>> -; P32: ret i1 false<br>
>> +; CHECK-LABEL: @test10_struct_i64(<br>
>> +; CHECK: ret i1 false<br>
>>   %p = getelementptr inbounds %Foo, %Foo* @GS, i64 %x, i32 0<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 0<br>
>> @@ -278,12 +212,9 @@ define i1 @test10_struct_i64(i64 %x){<br>
>> }<br>
>><br>
>> define i1 @test10_struct_noinbounds_i16(i16 %x) {<br>
>> -; NODL-LABEL: @test10_struct_noinbounds_i16(<br>
>> -; NODL: getelementptr %Foo, %Foo* @GS, i16 %x, i32 0<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_noinbounds_i16(<br>
>> -; P32: %1 = sext i16 %x to i32<br>
>> -; P32: getelementptr %Foo, %Foo* @GS, i32 %1, i32 0<br>
>> +; CHECK-LABEL: @test10_struct_noinbounds_i16(<br>
>> +; CHECK: %1 = sext i16 %x to i32<br>
>> +; CHECK: getelementptr %Foo, %Foo* @GS, i32 %1, i32 0<br>
>>   %p = getelementptr %Foo, %Foo* @GS, i16 %x, i32 0<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 0<br>
>> @@ -291,13 +222,9 @@ define i1 @test10_struct_noinbounds_i16(<br>
>> }<br>
>><br>
>> define i1 @test10_struct_arr(i32 %x) {<br>
>> -; NODL-LABEL: @test10_struct_arr(<br>
>> -; NODL-NEXT: %r = icmp ne i32 %x, 1<br>
>> -; NODL-NEXT: ret i1 %r<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_arr(<br>
>> -; P32-NEXT: %r = icmp ne i32 %x, 1<br>
>> -; P32-NEXT: ret i1 %r<br>
>> +; CHECK-LABEL: @test10_struct_arr(<br>
>> +; CHECK-NEXT: %r = icmp ne i32 %x, 1<br>
>> +; CHECK-NEXT: ret i1 %r<br>
>>   %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 9<br>
>> @@ -305,11 +232,8 @@ define i1 @test10_struct_arr(i32 %x) {<br>
>> }<br>
>><br>
>> define i1 @test10_struct_arr_noinbounds(i32 %x) {<br>
>> -; NODL-LABEL: @test10_struct_arr_noinbounds(<br>
>> -; NODL-NEXT  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_arr_noinbounds(<br>
>> -; P32-NEXT  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2<br>
>> +; CHECK-LABEL: @test10_struct_arr_noinbounds(<br>
>> +; CHECK-NEXT  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2<br>
>>   %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 9<br>
>> @@ -317,13 +241,9 @@ define i1 @test10_struct_arr_noinbounds(<br>
>> }<br>
>><br>
>> define i1 @test10_struct_arr_i16(i16 %x) {<br>
>> -; NODL-LABEL: @test10_struct_arr_i16(<br>
>> -; NODL-NEXT: %r = icmp ne i16 %x, 1<br>
>> -; NODL-NEXT: ret i1 %r<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_arr_i16(<br>
>> -; P32-NEXT: %r = icmp ne i16 %x, 1<br>
>> -; P32-NEXT: ret i1 %r<br>
>> +; CHECK-LABEL: @test10_struct_arr_i16(<br>
>> +; CHECK-NEXT: %r = icmp ne i16 %x, 1<br>
>> +; CHECK-NEXT: ret i1 %r<br>
>>   %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i16 0, i16 %x, i32 2<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 9<br>
>> @@ -331,14 +251,10 @@ define i1 @test10_struct_arr_i16(i16 %x)<br>
>> }<br>
>><br>
>> define i1 @test10_struct_arr_i64(i64 %x) {<br>
>> -; NODL-LABEL: @test10_struct_arr_i64(<br>
>> -; NODL-NEXT: %r = icmp ne i64 %x, 1<br>
>> -; NODL-NEXT: ret i1 %r<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_arr_i64(<br>
>> -; P32-NEXT: trunc i64 %x to i32<br>
>> -; P32-NEXT: %r = icmp ne i32 %1, 1<br>
>> -; P32-NEXT: ret i1 %r<br>
>> +; CHECK-LABEL: @test10_struct_arr_i64(<br>
>> +; CHECK-NEXT: trunc i64 %x to i32<br>
>> +; CHECK-NEXT: %r = icmp ne i32 %1, 1<br>
>> +; CHECK-NEXT: ret i1 %r<br>
>>   %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i64 0, i64 %x, i32 2<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 9<br>
>> @@ -346,11 +262,8 @@ define i1 @test10_struct_arr_i64(i64 %x)<br>
>> }<br>
>><br>
>> define i1 @test10_struct_arr_noinbounds_i16(i16 %x) {<br>
>> -; NODL-LABEL: @test10_struct_arr_noinbounds_i16(<br>
>> -; NODL-NEXT:  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i16 %x, i32 2<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_arr_noinbounds_i16(<br>
>> -; P32-NEXT: %r = icmp ne i16 %x, 1<br>
>> +; CHECK-LABEL: @test10_struct_arr_noinbounds_i16(<br>
>> +; CHECK-NEXT: %r = icmp ne i16 %x, 1<br>
>>   %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i16 %x, i32 2<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 9<br>
>> @@ -358,13 +271,9 @@ define i1 @test10_struct_arr_noinbounds_<br>
>> }<br>
>><br>
>> define i1 @test10_struct_arr_noinbounds_i64(i64 %x) {<br>
>> -; FIXME: Should be no trunc?<br>
>> -; NODL-LABEL: @test10_struct_arr_noinbounds_i64(<br>
>> -; NODL-NEXT:  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i64 %x, i32 2<br>
>> -<br>
>> -; P32-LABEL: @test10_struct_arr_noinbounds_i64(<br>
>> -; P32: %r = icmp ne i32 %1, 1<br>
>> -; P32-NEXT: ret i1 %r<br>
>> +; CHECK-LABEL: @test10_struct_arr_noinbounds_i64(<br>
>> +; CHECK: %r = icmp ne i32 %1, 1<br>
>> +; CHECK-NEXT: ret i1 %r<br>
>>   %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i64 %x, i32 2<br>
>>   %q = load i32, i32* %p<br>
>>   %r = icmp eq i32 %q, 9<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/InstCombine/overflow-mul.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/overflow-mul.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/overflow-mul.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/InstCombine/overflow-mul.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/InstCombine/overflow-mul.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -174,6 +174,17 @@ define <4 x i32> @pr20113(<4 x i16> %a,<br>
>>   ret <4 x i32> %vcgez.i<br>
>> }<br>
>><br>
>> +<br>
>> +; The last test needs this weird datalayout.<br>
>> +target datalayout = "i32:8:8"<br>
>> +; Without it, InstCombine will align the pointed on 4 Bytes<br>
>> +; The KnownBitsZero that result from the alignment allows to<br>
>> +; turn:<br>
>> +;    and i32 %mul, 255<br>
>> +; to:<br>
>> +;    and i32 %mul, 252<br>
>> +; The mask is no longer in the form 2^n-1  and this prevents the transformation.<br>
>> +<br>
>> @pr21445_data = external global i32<br>
>> define i1 @pr21445(i8 %a) {<br>
>> ; CHECK-LABEL: @pr21445(<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/InstCombine/pr21651.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/pr21651.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/pr21651.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/InstCombine/pr21651.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/InstCombine/pr21651.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,9 @@<br>
>> ; RUN: opt < %s -instcombine -S | FileCheck %s<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> define void @PR21651() {<br>
>>   switch i2 0, label %out [<br>
>>     i2 0, label %out<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/InstCombine/simplify-libcalls.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/simplify-libcalls.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/simplify-libcalls.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/InstCombine/simplify-libcalls.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/InstCombine/simplify-libcalls.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,4 +1,5 @@<br>
>> ; RUN: opt -S < %s -instcombine | FileCheck %s<br>
>> +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S32"<br>
>><br>
>> @G = constant [3 x i8] c"%s\00"                ; <[3 x i8]*> [#uses=1]<br>
>><br>
>> @@ -19,7 +20,7 @@ define i8* @test1() {<br>
>>         ret i8* %tmp3<br>
>><br>
>> ; CHECK-LABEL: @test1(<br>
>> -; CHECK: ret i8* getelementptr inbounds ([5 x i8]* @str, i32 0, i64 3)<br>
>> +; CHECK: ret i8* getelementptr inbounds ([5 x i8]* @str, i32 0, i32 3)<br>
>> }<br>
>><br>
>> declare i8* @strchr(i8*, i32)<br>
>> @@ -29,7 +30,7 @@ define i8* @test2() {<br>
>>         ret i8* %tmp3<br>
>><br>
>> ; CHECK-LABEL: @test2(<br>
>> -; CHECK: ret i8* getelementptr inbounds ([8 x i8]* @str1, i32 0, i64 7)<br>
>> +; CHECK: ret i8* getelementptr inbounds ([8 x i8]* @str1, i32 0, i32 7)<br>
>> }<br>
>><br>
>> define i8* @test3() {<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/InstCombine/store.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/store.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/store.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/InstCombine/store.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/InstCombine/store.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -41,7 +41,7 @@ Cont:<br>
>> ; CHECK-LABEL: @test3(<br>
>> ; CHECK-NOT: alloca<br>
>> ; CHECK: Cont:<br>
>> -; CHECK-NEXT:  %storemerge = phi i32 [ 47, %Cond2 ], [ -987654321, %Cond ]<br>
>> +; CHECK-NEXT:  %storemerge = phi i32 [ -987654321, %Cond ], [ 47, %Cond2 ]<br>
>> ; CHECK-NEXT:  ret i32 %storemerge<br>
>> }<br>
>><br>
>><br>
>> Modified: llvm/trunk/test/Transforms/InstCombine/type_pun.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/type_pun.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/type_pun.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/InstCombine/type_pun.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/InstCombine/type_pun.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -10,6 +10,10 @@<br>
>> ; cleaning up the alloca/store/GEP/load.<br>
>><br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "p:32:32"<br>
>> +<br>
>> +<br>
>> ; Extracting the zeroth element in an i32 array.<br>
>> define i32 @type_pun_zeroth(<16 x i8> %in) {<br>
>> ; CHECK-LABEL: @type_pun_zeroth(<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopSimplify/preserve-scev.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopSimplify/preserve-scev.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopSimplify/preserve-scev.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopSimplify/preserve-scev.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopSimplify/preserve-scev.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,6 +1,9 @@<br>
>> ; RUN: opt -S < %s -indvars | opt -analyze -iv-users | grep "%cmp = icmp slt i32" | grep "= {%\.ph,+,1}<%for.cond>"<br>
>> ; PR8079<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> ; LoopSimplify should invalidate indvars when splitting out the<br>
>> ; inner loop.<br>
>><br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/2008-08-13-CmpStride.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2008-08-13-CmpStride.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2008-08-13-CmpStride.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/2008-08-13-CmpStride.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/2008-08-13-CmpStride.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,9 @@<br>
>> ; RUN: opt < %s -loop-reduce -S | grep add | count 2<br>
>> ; PR 2662<br>
>> +<br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> @g_3 = common global i16 0             ; <i16*> [#uses=2]<br>
>> @"\01LC" = internal constant [4 x i8] c"%d\0A\00"              ; <[4 x i8]*> [#uses=1]<br>
>><br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/2008-09-09-Overflow.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2008-09-09-Overflow.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2008-09-09-Overflow.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/2008-09-09-Overflow.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/2008-09-09-Overflow.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,9 @@<br>
>> ; RUN: opt < %s -loop-reduce -S | grep phi | count 2<br>
>> ; PR 2779<br>
>> +<br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> @g_19 = common global i32 0            ; <i32*> [#uses=3]<br>
>> @"\01LC" = internal constant [4 x i8] c"%d\0A\00"              ; <[4 x i8]*> [#uses=1]<br>
>><br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-03-CritEdgeMerge.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-03-CritEdgeMerge.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-03-CritEdgeMerge.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-03-CritEdgeMerge.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-03-CritEdgeMerge.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -4,6 +4,10 @@<br>
>><br>
>> target triple = "x86-apple-darwin"<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> ; Verify that identical edges are merged. rdar://problem/6453893<br>
>> ; CHECK-LABEL: @test1(<br>
>> ; CHECK: bb89:<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-06-ReusePhi.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-06-ReusePhi.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-06-ReusePhi.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-06-ReusePhi.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/2011-10-06-ReusePhi.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -5,6 +5,10 @@<br>
>><br>
>> target triple = "x86-apple-darwin"<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> ; CHECK-LABEL: @test(<br>
>> ; multiplies are hoisted out of the loop<br>
>> ; CHECK: <a href="http://while.body.lr.ph" target="_blank">while.body.lr.ph</a>:<br>
>> @@ -17,10 +21,10 @@ target triple = "x86-apple-darwin"<br>
>> ; CHECK: phi<br>
>> ; CHECK: phi<br>
>> ; CHECK-NOT: phi<br>
>> -; CHECK: bitcast float* {{.*}} to i8*<br>
>> -; CHECK: bitcast float* {{.*}} to i8*<br>
>> -; CHECK: getelementptr i8, i8*<br>
>> -; CHECK: getelementptr i8, i8*<br>
>> +; CHECK: bitcast float* {{.*}} to i1*<br>
>> +; CHECK: bitcast float* {{.*}} to i1*<br>
>> +; CHECK: getelementptr i1, i1*<br>
>> +; CHECK: getelementptr i1, i1*<br>
>><br>
>> define float @test(float* nocapture %A, float* nocapture %B, i32 %N, i32 %IA, i32 %IB) nounwind uwtable readonly ssp {<br>
>> entry:<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/2012-07-18-LimitReassociate.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2012-07-18-LimitReassociate.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/2012-07-18-LimitReassociate.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/2012-07-18-LimitReassociate.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/2012-07-18-LimitReassociate.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,4 @@<br>
>> -; RUN: opt -loop-reduce -disable-output -debug-only=loop-reduce < %s 2> %t<br>
>> -; RUN: FileCheck %s < %t<br>
>> +; RUN: opt -loop-reduce -disable-output -debug-only=loop-reduce < %s 2>&1 | FileCheck %s<br>
>> ; REQUIRES: asserts<br>
>> ;<br>
>> ; PR13361: LSR + SCEV "hangs" on reasonably sized test with sequence of loops<br>
>> @@ -18,6 +17,10 @@<br>
>> ; CHECK-NOT:reg<br>
>> ; CHECK: Filtering for use<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> %struct.snork = type { %struct.fuga, i32, i32, i32, i32, i32, i32 }<br>
>> %struct.fuga = type { %struct.gork, i64 }<br>
>> %struct.gork = type { i8*, i32, i32, %struct.noot* }<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2008-08-14-ShadowIV.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2008-08-14-ShadowIV.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2008-08-14-ShadowIV.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2008-08-14-ShadowIV.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2008-08-14-ShadowIV.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,9 @@<br>
>> ; RUN: opt < %s -loop-reduce -S -mtriple=x86_64-unknown-unknown | grep "phi double" | count 1<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> define void @foobar(i32 %n) nounwind {<br>
>> entry:<br>
>>        icmp eq i32 %n, 0               ; <i1>:0 [#uses=2]<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2011-07-20-DoubleIV.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2011-07-20-DoubleIV.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2011-07-20-DoubleIV.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2011-07-20-DoubleIV.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2011-07-20-DoubleIV.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -4,6 +4,10 @@<br>
>> ; nonzero initial value.<br>
>> ; rdar://9786536<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> +<br>
>> ; First, make sure LSR doesn't crash on an empty IVUsers list.<br>
>> ; CHECK-LABEL: @dummyIV(<br>
>> ; CHECK-NOT: phi<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/count-to-zero.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/count-to-zero.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/count-to-zero.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/count-to-zero.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/count-to-zero.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,6 +1,9 @@<br>
>> ; RUN: opt < %s -loop-reduce -S | FileCheck %s<br>
>> ; rdar://7382068<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> define void @t(i32 %c) nounwind optsize {<br>
>> entry:<br>
>>   br label %bb6<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/dont_reverse.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/dont_reverse.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/dont_reverse.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/dont_reverse.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/dont_reverse.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -4,6 +4,10 @@<br>
>> ; Don't reverse the iteration if the rhs of the compare is defined<br>
>> ; inside the loop.<br>
>><br>
>> +; Provide legal integer types.<br>
>> +; Declare i2 as legal so that IVUsers accepts to consider %indvar3451<br>
>> +target datalayout = "n2:8:16:32:64"<br>
>> +<br>
>> define void @Fill_Buffer(i2* %p) nounwind {<br>
>> entry:<br>
>>        br label %bb8<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/ivchain.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/ivchain.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/ivchain.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/ivchain.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/ivchain.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -4,6 +4,10 @@<br>
>> ; A sign extend feeds an IVUser and cannot be hoisted into the AddRec.<br>
>> ; CollectIVChains should bailout on this case.<br>
>><br>
>> +<br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> %struct = type { i8*, i8*, i16, i64, i16, i16, i16, i64, i64, i16, i8*, i64, i64, i64 }<br>
>><br>
>> ; CHECK-LABEL: @test(<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/nested-reduce.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/nested-reduce.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/nested-reduce.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/nested-reduce.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/nested-reduce.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,8 @@<br>
>> ; RUN: opt < %s -loop-reduce -S | not grep mul<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> ; Make sure we don't get a multiply by 6 in this loop.<br>
>><br>
>> define i32 @foo(i32 %A, i32 %B, i32 %C, i32 %D) {<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/pr12691.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/pr12691.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/pr12691.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/pr12691.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/pr12691.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,8 @@<br>
>> ; RUN: opt < %s -loop-reduce -S | FileCheck %s<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> @d = common global i32 0, align 4<br>
>><br>
>> define void @fn2(i32 %x) nounwind uwtable {<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,8 @@<br>
>> ; RUN: opt < %s -analyze -iv-users | FileCheck %s<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> ; The value of %r is dependent on a polynomial iteration expression.<br>
>> ;<br>
>> ; CHECK-LABEL: IV Users for loop %foo.loop<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/remove_indvar.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/remove_indvar.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/remove_indvar.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/remove_indvar.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/remove_indvar.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,6 +1,9 @@<br>
>> ; Check that this test makes INDVAR and related stuff dead.<br>
>> ; RUN: opt < %s -loop-reduce -S | not grep INDVAR<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> declare i1 @pred()<br>
>><br>
>> define void @test(i32* %P) {<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/variable_stride.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/variable_stride.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/variable_stride.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/LoopStrengthReduce/variable_stride.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/LoopStrengthReduce/variable_stride.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,6 +1,9 @@<br>
>> ; Check that variable strides are reduced to adds instead of multiplies.<br>
>> ; RUN: opt < %s -loop-reduce -S | not grep mul<br>
>><br>
>> +; Provide legal integer types.<br>
>> +target datalayout = "n8:16:32:64"<br>
>> +<br>
>> declare i1 @pred(i32)<br>
>><br>
>> define void @test([10000 x i32]* %P, i32 %STRIDE) {<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/PhaseOrdering/scev.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/PhaseOrdering/scev.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/PhaseOrdering/scev.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/PhaseOrdering/scev.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/PhaseOrdering/scev.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -7,7 +7,7 @@<br>
>> ; CHECK: test1<br>
>> ; The loop body contains two increments by %div.<br>
>> ; Make sure that 2*%div is recognizable, and not expressed as a bit mask of %d.<br>
>> -; CHECK: -->  {%p,+,(2 * (%d /u 4) * sizeof(i32))}<br>
>> +; CHECK: -->  {%p,+,(8 * (%d /u 4))}<br>
>> define void @test1(i64 %d, i32* %p) nounwind uwtable ssp {<br>
>> entry:<br>
>>   %div = udiv i64 %d, 4<br>
>> @@ -36,7 +36,7 @@ for.end:<br>
>><br>
>> ; CHECK: test1a<br>
>> ; Same thing as test1, but it is even more tempting to fold 2 * (%d /u 2)<br>
>> -; CHECK: -->  {%p,+,(2 * (%d /u 2) * sizeof(i32))}<br>
>> +; CHECK: -->  {%p,+,(8 * (%d /u 2))}<br>
>> define void @test1a(i64 %d, i32* %p) nounwind uwtable ssp {<br>
>> entry:<br>
>>   %div = udiv i64 %d, 2<br>
>><br>
>> Modified: llvm/trunk/test/Transforms/ScalarRepl/2007-11-03-bigendian_apint.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ScalarRepl/2007-11-03-bigendian_apint.ll?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ScalarRepl/2007-11-03-bigendian_apint.ll?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/ScalarRepl/2007-11-03-bigendian_apint.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/ScalarRepl/2007-11-03-bigendian_apint.ll Wed Mar  4 12:43:29 2015<br>
>> @@ -1,5 +1,11 @@<br>
>> ; RUN: opt < %s -scalarrepl -S | not grep shr<br>
>><br>
>> +; FIXME: I think this test is no longer valid.<br>
>> +; It was working because SROA was aborting when<br>
>> +; no datalayout was supplied<br>
>> +; XFAIL: *<br>
>> +<br>
>> +<br>
>> %struct.S = type { i16 }<br>
>><br>
>> define zeroext i1 @f(i16 signext  %b)   {<br>
>><br>
>> Removed: llvm/trunk/test/Transforms/Scalarizer/no-data-layout.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Scalarizer/no-data-layout.ll?rev=231269&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Scalarizer/no-data-layout.ll?rev=231269&view=auto</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Transforms/Scalarizer/no-data-layout.ll (original)<br>
>> +++ llvm/trunk/test/Transforms/Scalarizer/no-data-layout.ll (removed)<br>
>> @@ -1,25 +0,0 @@<br>
>> -; RUN: opt %s -scalarizer -scalarize-load-store -S | FileCheck %s<br>
>> -<br>
>> -; Test the handling of loads and stores when no data layout is available.<br>
>> -define void @f1(<4 x float> *%dest, <4 x float> *%src) {<br>
>> -; CHECK: @f1(<br>
>> -; CHECK: %val = load <4 x float>, <4 x float>* %src, align 4<br>
>> -; CHECK: %val.i0 = extractelement <4 x float> %val, i32 0<br>
>> -; CHECK: %add.i0 = fadd float %val.i0, %val.i0<br>
>> -; CHECK: %val.i1 = extractelement <4 x float> %val, i32 1<br>
>> -; CHECK: %add.i1 = fadd float %val.i1, %val.i1<br>
>> -; CHECK: %val.i2 = extractelement <4 x float> %val, i32 2<br>
>> -; CHECK: %add.i2 = fadd float %val.i2, %val.i2<br>
>> -; CHECK: %val.i3 = extractelement <4 x float> %val, i32 3<br>
>> -; CHECK: %add.i3 = fadd float %val.i3, %val.i3<br>
>> -; CHECK: %add.upto0 = insertelement <4 x float> undef, float %add.i0, i32 0<br>
>> -; CHECK: %add.upto1 = insertelement <4 x float> %add.upto0, float %add.i1, i32 1<br>
>> -; CHECK: %add.upto2 = insertelement <4 x float> %add.upto1, float %add.i2, i32 2<br>
>> -; CHECK: %add = insertelement <4 x float> %add.upto2, float %add.i3, i32 3<br>
>> -; CHECK: store <4 x float> %add, <4 x float>* %dest, align 8<br>
>> -; CHECK: ret void<br>
>> -  %val = load <4 x float> , <4 x float> *%src, align 4<br>
>> -  %add = fadd <4 x float> %val, %val<br>
>> -  store <4 x float> %add, <4 x float> *%dest, align 8<br>
>> -  ret void<br>
>> -}<br>
>><br>
>> Modified: llvm/trunk/tools/llc/llc.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/tools/llc/llc.cpp (original)<br>
>> +++ llvm/trunk/tools/llc/llc.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -306,8 +306,7 @@ static int compileModule(char **argv, LL<br>
>><br>
>>   // Add the target data from the target machine, if it exists, or the module.<br>
>>   if (const DataLayout *DL = Target->getDataLayout())<br>
>> -    M->setDataLayout(DL);<br>
>> -  PM.add(new DataLayoutPass());<br>
>> +    M->setDataLayout(*DL);<br>
>><br>
>>   if (RelaxAll.getNumOccurrences() > 0 &&<br>
>>       FileType != TargetMachine::CGFT_ObjectFile)<br>
>><br>
>> Modified: llvm/trunk/tools/llvm-extract/llvm-extract.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-extract/llvm-extract.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-extract/llvm-extract.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/tools/llvm-extract/llvm-extract.cpp (original)<br>
>> +++ llvm/trunk/tools/llvm-extract/llvm-extract.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -247,7 +247,6 @@ int main(int argc, char **argv) {<br>
>>   // In addition to deleting all other functions, we also want to spiff it<br>
>>   // up a little bit.  Do this now.<br>
>>   legacy::PassManager Passes;<br>
>> -  Passes.add(new DataLayoutPass()); // Use correct DataLayout<br>
>><br>
>>   std::vector<GlobalValue*> Gvs(GVs.begin(), GVs.end());<br>
>><br>
>><br>
>> Modified: llvm/trunk/tools/opt/opt.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/opt.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/opt.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/tools/opt/opt.cpp (original)<br>
>> +++ llvm/trunk/tools/opt/opt.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -419,15 +419,11 @@ int main(int argc, char **argv) {<br>
>>   Passes.add(new TargetLibraryInfoWrapperPass(TLII));<br>
>><br>
>>   // Add an appropriate DataLayout instance for this module.<br>
>> -  const DataLayout *DL = M->getDataLayout();<br>
>> -  if (!DL && !DefaultDataLayout.empty()) {<br>
>> +  const DataLayout &DL = M->getDataLayout();<br>
>> +  if (DL.isDefault() && !DefaultDataLayout.empty()) {<br>
>>     M->setDataLayout(DefaultDataLayout);<br>
>> -    DL = M->getDataLayout();<br>
>>   }<br>
>><br>
>> -  if (DL)<br>
>> -    Passes.add(new DataLayoutPass());<br>
>> -<br>
>>   // Add internal analysis passes from the target machine.<br>
>>   Passes.add(createTargetTransformInfoWrapperPass(TM ? TM->getTargetIRAnalysis()<br>
>>                                                      : TargetIRAnalysis()));<br>
>> @@ -435,8 +431,6 @@ int main(int argc, char **argv) {<br>
>>   std::unique_ptr<legacy::FunctionPassManager> FPasses;<br>
>>   if (OptLevelO1 || OptLevelO2 || OptLevelOs || OptLevelOz || OptLevelO3) {<br>
>>     FPasses.reset(new legacy::FunctionPassManager(M.get()));<br>
>> -    if (DL)<br>
>> -      FPasses->add(new DataLayoutPass());<br>
>>     FPasses->add(createTargetTransformInfoWrapperPass(<br>
>>         TM ? TM->getTargetIRAnalysis() : TargetIRAnalysis()));<br>
>>   }<br>
>><br>
>> Modified: llvm/trunk/unittests/IR/IRBuilderTest.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/IRBuilderTest.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/IRBuilderTest.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/unittests/IR/IRBuilderTest.cpp (original)<br>
>> +++ llvm/trunk/unittests/IR/IRBuilderTest.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -111,9 +111,9 @@ TEST_F(IRBuilderTest, LandingPadName) {<br>
>> TEST_F(IRBuilderTest, DataLayout) {<br>
>>   std::unique_ptr<Module> M(new Module("test", Ctx));<br>
>>   M->setDataLayout("e-n32");<br>
>> -  EXPECT_TRUE(M->getDataLayout()->isLegalInteger(32));<br>
>> +  EXPECT_TRUE(M->getDataLayout().isLegalInteger(32));<br>
>>   M->setDataLayout("e");<br>
>> -  EXPECT_FALSE(M->getDataLayout()->isLegalInteger(32));<br>
>> +  EXPECT_FALSE(M->getDataLayout().isLegalInteger(32));<br>
>> }<br>
>><br>
>> TEST_F(IRBuilderTest, GetIntTy) {<br>
>><br>
>> Modified: llvm/trunk/unittests/IR/LegacyPassManagerTest.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/LegacyPassManagerTest.cpp?rev=231270&r1=231269&r2=231270&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/LegacyPassManagerTest.cpp?rev=231270&r1=231269&r2=231270&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/unittests/IR/LegacyPassManagerTest.cpp (original)<br>
>> +++ llvm/trunk/unittests/IR/LegacyPassManagerTest.cpp Wed Mar  4 12:43:29 2015<br>
>> @@ -98,7 +98,6 @@ namespace llvm {<br>
>>         initializeModuleNDMPass(*PassRegistry::getPassRegistry());<br>
>>       }<br>
>>       bool runOnModule(Module &M) override {<br>
>> -        EXPECT_TRUE(getAnalysisIfAvailable<DataLayoutPass>());<br>
>>         run++;<br>
>>         return false;<br>
>>       }<br>
>> @@ -175,7 +174,6 @@ namespace llvm {<br>
>>         initializeCGPassPass(*PassRegistry::getPassRegistry());<br>
>>       }<br>
>>       bool runOnSCC(CallGraphSCC &SCMM) override {<br>
>> -        EXPECT_TRUE(getAnalysisIfAvailable<DataLayoutPass>());<br>
>>         run();<br>
>>         return false;<br>
>>       }<br>
>> @@ -214,7 +212,6 @@ namespace llvm {<br>
>>         return false;<br>
>>       }<br>
>>       bool runOnLoop(Loop *L, LPPassManager &LPM) override {<br>
>> -        EXPECT_TRUE(getAnalysisIfAvailable<DataLayoutPass>());<br>
>>         run();<br>
>>         return false;<br>
>>       }<br>
>> @@ -251,7 +248,6 @@ namespace llvm {<br>
>>         return false;<br>
>>       }<br>
>>       bool runOnBasicBlock(BasicBlock &BB) override {<br>
>> -        EXPECT_TRUE(getAnalysisIfAvailable<DataLayoutPass>());<br>
>>         run();<br>
>>         return false;<br>
>>       }<br>
>> @@ -276,7 +272,6 @@ namespace llvm {<br>
>>         initializeFPassPass(*PassRegistry::getPassRegistry());<br>
>>       }<br>
>>       bool runOnModule(Module &M) override {<br>
>> -        EXPECT_TRUE(getAnalysisIfAvailable<DataLayoutPass>());<br>
>>         for (Module::iterator I=M.begin(),E=M.end(); I != E; ++I) {<br>
>>           Function &F = *I;<br>
>>           {<br>
>> @@ -302,7 +297,6 @@ namespace llvm {<br>
>>       mNDM->run = mNDNM->run = mDNM->run = mNDM2->run = 0;<br>
>><br>
>>       legacy::PassManager Passes;<br>
>> -      Passes.add(new DataLayoutPass());<br>
>>       Passes.add(mNDM2);<br>
>>       Passes.add(mNDM);<br>
>>       Passes.add(mNDNM);<br>
>> @@ -326,7 +320,6 @@ namespace llvm {<br>
>>       mNDM->run = mNDNM->run = mDNM->run = mNDM2->run = 0;<br>
>><br>
>>       legacy::PassManager Passes;<br>
>> -      Passes.add(new DataLayoutPass());<br>
>>       Passes.add(mNDM);<br>
>>       Passes.add(mNDNM);<br>
>>       Passes.add(mNDM2);// invalidates mNDM needed by mDNM<br>
>> @@ -348,7 +341,6 @@ namespace llvm {<br>
>>       std::unique_ptr<Module> M(makeLLVMModule());<br>
>>       T *P = new T();<br>
>>       legacy::PassManager Passes;<br>
>> -      Passes.add(new DataLayoutPass());<br>
>>       Passes.add(P);<br>
>>       Passes.run(*M);<br>
>>       T::finishedOK(run);<br>
>> @@ -359,7 +351,6 @@ namespace llvm {<br>
>>       Module *M = makeLLVMModule();<br>
>>       T *P = new T();<br>
>>       legacy::PassManager Passes;<br>
>> -      Passes.add(new DataLayoutPass());<br>
>>       Passes.add(P);<br>
>>       Passes.run(*M);<br>
>>       T::finishedOK(run, N);<br>
>> @@ -397,7 +388,6 @@ namespace llvm {<br>
>>         SCOPED_TRACE("Running OnTheFlyTest");<br>
>>         struct OnTheFlyTest *O = new OnTheFlyTest();<br>
>>         legacy::PassManager Passes;<br>
>> -        Passes.add(new DataLayoutPass());<br>
>>         Passes.add(O);<br>
>>         Passes.run(*M);<br>
>><br>
>><br>
>><br>
>> _______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
><br>
><br>
><br>
> --<br>
> H.J.<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div></div>
</div></div>