[LLVMdev] [HEADS-UP] API changes for <class Use> size reduction.

Gabor Greif gabor at mac.com
Sun Apr 6 14:06:03 PDT 2008

Hi all,

with r49277 I have checked in the API changes for
the first wave of modifications related to the size
reduction of Use objects. Several creation methods
take the place of the previously used "operator new".

I have changed the llvm-gcc4.2 and clang projects, but
if you have any llvm projects that tracks the SVN trunk
of the API you will have to upgrade.

in *tcsh* I have used scripts like this to do the transition:

setenv CLASS BasicBlock
setenv SUBST1 "s/new $CLASS/${CLASS}::Create/g"
setenv SUBST2 "s/new llvm::$CLASS/llvm::${CLASS}::Create/g"
foreach i (*.cpp)
sed -e "$SUBST1" -e "$SUBST2" < $i > 2$i
rm $i
mv 2$i $i

for visiting all .cpp files in a tree you can use:

foreach i (`find . -name "*.cpp"`)

The other classes off the top of my head:

setenv CLASS Function
setenv CLASS SwitchInst
setenv CLASS PHINode
setenv CLASS BranchInst
setenv CLASS CallInst
setenv CLASS ReturnInst
setenv CLASS InvokeInst
setenv CLASS GetElementPtrInst
setenv CLASS SelectInst
setenv CLASS InsertElementInst

There are some false substitutions that arise this way, but it mostly  
works. Be sure
to recompile.

Below I give an (marginally tested) monster script that should  
transform all these classes at once
in your whole tree. Be sure to only use it on a tree without  

Unfortunately there will be more API changes related to allocation and
deallocation of objects, but these will be reviewed upfront on this  
list, so you will be warned. I will try to make the transition as  
painless as




foreach CLASS (BasicBlock Function SwitchInst PHINode BranchInst  
CallInst ReturnInst InvokeInst GetElementPtrInst SelectInst  
setenv SUBST1 "s/new $CLASS/${CLASS}::Create/g"
setenv SUBST2 "s/new llvm::$CLASS/llvm::${CLASS}::Create/g"
foreach i (`find . -name "*.cpp"`)
sed -e "$SUBST1" -e "$SUBST2" < $i > $i.2
rm $i
mv $i.2 $i
foreach i (`find . -name "*.h"`)
sed -e "$SUBST1" -e "$SUBST2" < $i > $i.2
rm $i
mv $i.2 $i

More information about the llvm-dev mailing list