[LLVMdev] api changes in llvm 2.4

Pekka Jääskeläinen pekka.jaaskelainen at tut.fi
Mon Oct 13 09:00:49 PDT 2008


Chris Lattner wrote:
> In the 2.3 release, we included a list of the major LLVM API changes. If you
> are working on upgrading your code from 2.3 to 2.4,  I'd appreciate it if you
> could compile a list of the major stumbling blocks you have, so that others
> can benefit from your experience. Please send any info to the list, thanks!

No major stumbling blocks during our backend porting,
just minor changes.

I'll list them anyways:

1) Some method names in MachineOperand were renamed
to abbreviated names like isFrameIndex() -> isFI().

2) const class llvm::MachineInstr has no member named clone()

The call to could be replaced with

3) llvm::TargetInstrInfo::copyRegToReg() now returns 'bool'

This used to be a void function. Easy to fix by just returning a boolean.

However, the comment in TargetInstrInfo.h does not state what the
return value means, so one has to dig into the source code of the
other backends. Looking at the ARM backend, the return value seems
to just denote success, in case trying to copy between end points
that are not supported by the instruction set (?).

4) SDOperand replaced with SDValue

A simple text search-replace in the backend's TargetLowering
implementation seemed to fix this.

5) ‘struct llvm::MVT::ValueType’ has not been declared

typedef uint32_t ValueType is replaced with struct llvm::MVT.
A text replace cured this.

6) error: ‘LABEL’ is not a member of ‘llvm::ISD’

Split to DBG_LABEL and EH_LABEL. In our case we needed

7) ‘LOCATION’ is not a member of ‘llvm::ISD’


8) error: ‘class llvm::SDValue’ has no member named ‘Val’

SDOperand had 'Val' which can be replaced by getNode().

9) switch(op.getOperand(1).getValueType()) does not work

In our case I could replace it with


10) SelectionDAGIsel::InstructionSelectBasicBlock removed

Replaced with InstructionSelect()

11) no matching function for call to

The stream argument has been changed to llvm::raw_ostream

Also had to change std::endls to '\n' in the AssemblyPrinter.

12) getSectionForFunction(*f) to f->getSection()

13) TargetLowering::LowerArguments() fingerprint changed

It now takes the SmallVectorImpl<SDValue>& argValues as an
output reference parameter and is a void function.

14) TargetLowering::LowerCallTo() has an additional
     bool argument isInreg

--Pekka, visit0r @ IRC

More information about the llvm-dev mailing list