PATCH: Use size reduction -- wave1

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

PATCH: Use size reduction -- wave1

Gabor Greif
Hi all,

here comes the patch for the first wave of Use class size reduction.

I have split it into 3 files, corresponding to
- header changes
- implementation changes
- applications

This at the moment does not contain the description how the
size of the Use class will be reduced from 16 to 12 bytes,
I am going to send that in a separate patch.

This wave primarily consists of changes that are needed
to allocate objects with a variable number of embedded <Use>s.

Where the number of <Use>s is constant in the lifetime of an object,
I preferred to keep the 'new Instr(...)' syntax. Otherwise I have
introduced static 'Create(...)' methods, which are used instead of the
'new Instr(...)' construct. These replace the constructors and the
constructors become private/protected. The arguments of the 'Create'
methods are identical to the corresponding constructors.
Essentially at the moment all introduced 'operator new's end up calling
'::operator new(size_t)', so there should be no functionality change  
at all.
This will change in subsequent waves.

At the moment of writing this my trunk working copy is at r48837,
I have used this command to do the merge:

svn merge http://llvm.org/svn/llvm-project/llvm/branches/ggreif/use- 
diet@48564 http://llvm.org/svn/llvm-project/llvm/branches/ggreif/use- 
diet .

This is what it printed on the console:

U    include/llvm/BasicBlock.h
U    include/llvm/GlobalVariable.h
U    include/llvm/Support/LLVMBuilder.h
U    include/llvm/Instructions.h
U    include/llvm/GlobalAlias.h
U    include/llvm/Constants.h
U    include/llvm/User.h
U    include/llvm/InstrTypes.h
U    include/llvm/Function.h
U    tools/bugpoint/CrashDebugger.cpp
U    tools/bugpoint/Miscompilation.cpp
U    lib/Analysis/ScalarEvolutionExpander.cpp
U    lib/CodeGen/ShadowStackCollector.cpp
U    lib/CodeGen/IntrinsicLowering.cpp
U    lib/Linker/LinkModules.cpp
U    lib/Target/X86/X86TargetAsmInfo.cpp
U    lib/Bitcode/Reader/BitcodeReader.cpp
U    lib/ExecutionEngine/JIT/JIT.cpp
U    lib/VMCore/Instructions.cpp
U    lib/VMCore/Constants.cpp
U    lib/VMCore/AutoUpgrade.cpp
U    lib/VMCore/Function.cpp
U    lib/VMCore/Module.cpp
U    lib/VMCore/Core.cpp
U    lib/VMCore/BasicBlock.cpp
U    lib/AsmParser/llvmAsmParser.y
U    lib/AsmParser/llvmAsmParser.cpp.cvs
U    lib/AsmParser/llvmAsmParser.h.cvs
U    lib/AsmParser/llvmAsmParser.y.cvs
U    lib/Transforms/Utils/LowerInvoke.cpp
U    lib/Transforms/Utils/LCSSA.cpp
U    lib/Transforms/Utils/CodeExtractor.cpp
U    lib/Transforms/Utils/CloneModule.cpp
U    lib/Transforms/Utils/CloneFunction.cpp
U    lib/Transforms/Utils/BreakCriticalEdges.cpp
U    lib/Transforms/Utils/LowerSwitch.cpp
U    lib/Transforms/Utils/SimplifyCFG.cpp
U    lib/Transforms/Utils/BasicBlockUtils.cpp
U    lib/Transforms/Utils/LowerAllocations.cpp
U    lib/Transforms/Utils/UnifyFunctionExitNodes.cpp
U    lib/Transforms/Utils/InlineFunction.cpp
U    lib/Transforms/Utils/LoopSimplify.cpp
U    lib/Transforms/Utils/PromoteMemoryToRegister.cpp
U    lib/Transforms/Utils/Local.cpp
U    lib/Transforms/Instrumentation/RSProfiling.cpp
U    lib/Transforms/Instrumentation/ProfilingUtils.cpp
U    lib/Transforms/Scalar/LoopUnswitch.cpp
U    lib/Transforms/Scalar/IndVarSimplify.cpp
U    lib/Transforms/Scalar/GVNPRE.cpp
U    lib/Transforms/Scalar/InstructionCombining.cpp
U    lib/Transforms/Scalar/SimplifyCFG.cpp
U    lib/Transforms/Scalar/TailRecursionElimination.cpp
U    lib/Transforms/Scalar/LoopIndexSplit.cpp
U    lib/Transforms/Scalar/LoopStrengthReduce.cpp
U    lib/Transforms/Scalar/GCSE.cpp
U    lib/Transforms/Scalar/ScalarReplAggregates.cpp
U    lib/Transforms/Scalar/SCCP.cpp
U    lib/Transforms/Scalar/LoopRotation.cpp
U    lib/Transforms/Scalar/GVN.cpp
U    lib/Transforms/Scalar/ADCE.cpp
U    lib/Transforms/IPO/IndMemRemoval.cpp
U    lib/Transforms/IPO/SimplifyLibCalls.cpp
U    lib/Transforms/IPO/PruneEH.cpp
U    lib/Transforms/IPO/StructRetPromotion.cpp
U    lib/Transforms/IPO/ExtractGV.cpp
U    lib/Transforms/IPO/LowerSetJmp.cpp
Skipped missing target: 'lib/Transforms/IPO/ExtractFunction.cpp'
U    lib/Transforms/IPO/GlobalOpt.cpp
U    lib/Transforms/IPO/DeadArgumentElimination.cpp
U    lib/Transforms/IPO/ArgumentPromotion.cpp
U    lib/Transforms/IPO/RaiseAllocations.cpp
U    examples/BrainF/BrainF.cpp
U    examples/BrainF/BrainFDriver.cpp
U    examples/ParallelJIT/ParallelJIT.cpp
U    examples/HowToUseJIT/HowToUseJIT.cpp
U    examples/ModuleMaker/ModuleMaker.cpp
U    examples/Fibonacci/fibonacci.cpp

Notes:

- I shall take the *.cvs files out of the patch.
- lib/Transforms/IPO/ExtractFunction.cpp seems to have been deleted  
from trunk
- GVN.cpp had a compile error due to changes --> I had to manually  
change the file
    emacs +1224 lib/Transforms/Scalar/GVN.cpp
    emacs +1231 lib/Transforms/Scalar/GVN.cpp
- the patch is pretty dull, mostly mechanical changes
- r48837 + this patch builds and the tests run without errors
- I have omitted Create-ifying llvm-upgrade, as it is not on trunk  
any more
- Some statistics:
  ggreif$ svn diff include > wave1-include.diff
  ggreif$ svn diff lib > wave1-lib.diff
  ggreif$ svn diff examples tools > wave1-rest.diff
  ggreif$ wc *.diff
      798    3883   33028 wave1-include.diff
     3894   16494  179719 wave1-lib.diff
      441    1769   18291 wave1-rest.diff
     5133   22146  231038 total
- I cared about
   o Tab-freeness
   o correct re-indentation
- I did not (yet) care about the 80-column regime
- the explanation of my wave nomenclature is here:
   svn cat http(s)://llvm.org/svn/llvm-project/llvm/branches/ggreif/
README


Cheers,

        Gabor





_______________________________________________
LLVM Developers mailing list
[hidden email]         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

wave1-include.diff (33K) Download Attachment
wave1-lib.diff (179K) Download Attachment
wave1-rest.diff (18K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: PATCH: Use size reduction -- wave1

Chris Lattner
On Mar 26, 2008, at 3:16 PM, Gabor Greif wrote:
> here comes the patch for the first wave of Use class size reduction.
>
> I have split it into 3 files, corresponding to
> - header changes
> - implementation changes
> - applications

nice!

> This at the moment does not contain the description how the
> size of the Use class will be reduced from 16 to 12 bytes,
> I am going to send that in a separate patch.

Right, sounds great.

> This wave primarily consists of changes that are needed
> to allocate objects with a variable number of embedded <Use>s.

Ok.

> Where the number of <Use>s is constant in the lifetime of an object,
> I preferred to keep the 'new Instr(...)' syntax. Otherwise I have
> introduced static 'Create(...)' methods, which are used instead of the
> 'new Instr(...)' construct.

The bad thing about this is that it is inconsistent.  I'd prefer to  
have consistent use of ::Create for all IR classes to make it easier  
to learn the API.  That said, a temporary moment of inconsistency is  
ok: you could commit this part, then switch the remaining classes over.

> These replace the constructors and the
> constructors become private/protected. The arguments of the 'Create'
> methods are identical to the corresponding constructors.
> Essentially at the moment all introduced 'operator new's end up  
> calling
> '::operator new(size_t)', so there should be no functionality change  
> at all.
> This will change in subsequent waves.


This basically looks good, some thoughts for the future:

1) Please (eventually) don't make the 'operator new' override be  
public.  I'd actually prefer all memory alloc/dealloc stuff to be done  
privately to the (vmcore) .cpp files, not exposed through the header.

2) Eventually we'll need to make the dtor private as well.

3) Make sure that make check and some reasonable subset of llvm-test  
passes with this patch :)

Finally, please update llvm-gcc 4.2 as well when you commit this.  
I'll update clang after you commit.

When you commit, please email llvmdev/commits with an email that says  
"API CHANGE" in the subject line with info on how to upgrade out-of-
tree projects (e.g. vmkit).

Thanks Gabor!

-Chris
_______________________________________________
LLVM Developers mailing list
[hidden email]         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev