[LLVMdev] Node definitions, Pseudo ops and lowering SELECT/COND_BRANCH to branch instructions
Andy Nisbet
A.Nisbet at mmu.ac.uk
Thu Jun 14 08:09:44 PDT 2007
Hello,
Im back trying to finish my backend to a simple RISC cpu SABRE now
that most of the tedious process of examining undergraduate students
is out of the way. I have managed to describe the registers and the
instructions in the architecture and have added support for 32 bit
immediates (thanks to Christopher Lamb) as the instruction set only
supports 17 bit immediates directly.
Could anyone please describe the main features of how an llvm
instruction such as SELECT and COND_BRANCH are lowered/expanded into
branch instructions?
I have seen this thread
http://lists.cs.uiuc.edu/pipermail/llvmdev/2006-October/006892.html
but was wondering if anyone could comment on this process in a little
more detail.
I presume I need to define various target independent nodes, like below ...
def SDT_SABREcondbr : SDTypeProfile<0,3, // no result, 3 operands,
rega, regb, immediate
[ SDTCisVT<1,i32>, SDTCisVT<2,OtherVT> ]>;
def SABREcondbranch: SDNode <"SABREISD::COND_BRANCH" , SDT_SABREcondbr,
[SDNPHasChain]>;
def COND_BRANCH: Pseudo<(ops IntRegs:$a, IntRegs:$b, target:$dst),
"${:comment}COND_BRANCH $a, $b, $dst",
[(SABREcondbranch IntRegs:$a, IntRegs:$bm bb:$dst)]>;
and I need a setOperationAction(ISD::BRCOND, MVT::Other, Expand);
Im a little confused as to how BRCOND (or select for that matter) are
then actually lowered to a particular branch instruction that is for
the sake of argument ....
BLE %a, %b, newpc ie iff %a <= %b then branch to newpc.
I have been looking at the PPC and the sparc backend sources for
information. I'd just like a little more (abstract) clarification
before diving into this in some detail and gdb-ing through the
specifics of the PPC/Sparc codegeneration for my helloworld bytecode.
Thanks,
Andy
Dr. Andy Nisbet: URL http://www.docm.mmu.ac.uk/STAFF/A.Nisbet
Department of Computing and Mathematics, John Dalton Building, Manchester
Metropolitan University, Chester Street, Manchester M1 5GD, UK.
Email: A.Nisbet at mmu.ac.uk, Phone:(+44)-161-247-1556; Fax:(+44)-161-247-1483.
"Before acting on this email or opening any attachments you
should read the Manchester Metropolitan University's email
disclaimer available on its website
http://www.mmu.ac.uk/emaildisclaimer "
More information about the llvm-dev
mailing list