[LLVMdev] Linux/ppc backend

Chris Lattner sabre at nondot.org
Sun Feb 4 11:28:20 PST 2007

On Sun, 4 Feb 2007, Nicolas Geoffray wrote:
>> 2. The X86 backend has the unfortunate habit of saying "if !darwin" "if
>>     !cygwin" etc.  Most of the changes you've made are actually ABI related
>>     changes, not OS-specific changes.  As such, I'd prefer it if you added
>>     two methods to PPCSubtarget: isMachoABI() and isELF_ABI() (or whatever
>>     is the right name of the ABI that linux uses) and use those instead.
> Well all of the changes are ABI related. In fact, could you give me an
> example of what is os-specific and not abi-specific? I'm not sure.

Most of the things you are doing are ABI-related, and until we have 
multiple targets using the same ABI, it doesn't make sense to have 
os-specific aspects.

An example of an OS-specific aspect: cygwin and mingw on x86 use the same 
ABI, however, mingw refers to longjmp as "longjmp" and cygwin refers to it 
as "_longjmp".

>>> 3) R31, which replaces R1 as stack pointer when there is a dynamic allocation
>>> in a method, must be seen as a callee-saved register and must not be saved
>>> and restored like it is actually for Darwin. I don't know how to specify
>>> that, when there is a dynamic allocation, R31 must be added to the set of
>>> registers that are saved before entering the method and restored at the end.
>> Can you just mark it callee saved?  If so, and if there is an instruction
>> in the function that clobbers R31, it should automatically be saved and
>> restored.

> It is marked callee saved. Because when it is not needed as frame 
> pointer it is used like an ordinary register. But when it is used as 
> frame pointer, the prologue and epilogue change its value, but the 
> algorithm in llvm that finds clobbered register does not select it.

Okay, I'm not sure.  If you describe the constraints better, perhaps Jim 
or Evan will have an idea :)



More information about the llvm-dev mailing list