[LLVMdev] adding support for -ffixed-<reg>

Matthew Curtis mcurtis at codeaurora.org
Tue Oct 2 08:59:53 PDT 2012

On 10/2/2012 10:14 AM, 陳韋任 (Wei-Ren Chen) wrote:
>>  From the GCC manual (http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/
>> Code-Gen-Options.html#index-ffixed-2267)
>> -ffixed-reg
>>      Treat the register named reg as a fixed register; generated code should
>>      never refer to it (except perhaps as a stack pointer, frame pointer or in
>>      some other fixed role).
>>      reg must be the name of a register. The register names accepted are
>>      machine-specific and are defined in the REGISTER_NAMES macro in the machine
>>      description macro file.
>> Useful when writing kernel code or other low-level code (e.g. a VM) where you
>> want to reserve a particular register for your own use.
>    Ya, I saw people writing VM often ask for this functionality on ML.
> But I have a question, what the difference between this and global
> register [1]? To me, they both seems to reserve particular register
> from being used by the compiler. If they're the same, I remember Chris
> objected to add global register feature in LLVM.
> Regards,
> chenwj
> [1] http://nondot.org/sabre/LLVMNotes/GlobalRegisterVariables.txt

 From my understanding ...

The two features are often used together. -ffixed-reg must usually be 
passed to other compilation units in a program that don't actually use a 
given global register, or to ensure that it is not used by preceding 
function definitions.[1]

Global registers imply some level of language/IR support.

In the absence of global register support, use of the register must be 
written outside of the compiler (e.g. in assembly).

Matthew C.


Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation

More information about the llvm-dev mailing list