[llvm-dev] How to specify the RegisterClass of an IMPLICIT_DEF?

Dominique Torette via llvm-dev llvm-dev at lists.llvm.org
Fri Apr 13 03:12:23 PDT 2018


After further investigation of the TargetLoweringBase class, the register is allocated from RegisterClass defined by the RegClassForVT[] table.
This table is defined by the addRegisterClass() sequence. Only the last RegisterClass for a given type is kept.
So by ordering the addRegisterClass() sequence, you can enforce the allocated RegisterClass.
I my case, this lead to a more optimized generated code.

Thanks for your general advice.	Regards,	Dominique Torette.

-----Original Message-----
From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Krzysztof Parzyszek via llvm-dev
Sent: jeudi 12 avril 2018 15:17
To: llvm-dev at lists.llvm.org
Subject: Re: [llvm-dev] How to specify the RegisterClass of an IMPLICIT_DEF?

On 4/12/2018 8:01 AM, Dominique Torette via llvm-dev wrote:
> 
> But there is one small issue in the inference of RegisterClass of the 
> implicitly defined register.
> 
> As shown below, the %vreg6<def> is implicitly defined as FPUabRegisterClass.
> 
> This register class accepts the v2f32 type, but for others addressing 
> mode context this register should be FPUabOffsetClass.
> 
> Is there a mechanism, an option to inforce/control the RegisterClass 
> of registers defined by IMPLICIT_DEF ?

A virtual register has a specific register class assigned to it, and is implicitly a member of any superclass of that class. If you want to use the register in a place that requires another class, you will need to create a new virtual register for the new class and copy the value into it.

In instruction selection, it's usually the type of the value that determines the register class of the register holding it. Also, the register classes of instruction operands can restrict it further. If you want to put a certain value into a register from a specific class, you can use COPY_TO_REGCLASS (just like the code you quoted does):
   Dst = COPY_TO_REGCLASS Src, RegClass

-Krzysztof

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation _______________________________________________
LLVM Developers mailing list
llvm-dev at lists.llvm.org
https://clicktime.symantec.com/a/1/yyga0upCI09vWEKek6fAaRRLUrEDjE2_L7scU6fCdkQ=?d=3Vtt0OP2EHibCaMmXm1--GE5qtSFwEIhVoVTa3LNW5vGkgRqAnWHb2E6XQKcDZOVyXuDlNevouXFSlP2UaKbccIyZKYhrdpfuqFxXnamtgdmiqnvVi1ruGqvR7YE_TrbFXiFRqw3AwYYmkzb8kRbr3jMPRJ03J1-lcoU3hAsSBCC3Ijd3kEoVTRg0LCaCoZyzX4zdLrOh6Jiq8lTpqS_J02q8_Pix1JxFG_hVlOR431ohQrFN8r1u00IxMd4iWt-Drmc_sDcLNm2M5KVhK-wNw2EcFxgX6lpCnDr34KTa2n988wdWK2YTdbBKEb11PapWzGDtpdm19D5ElKsBXd1p6TY3g-HkYNq9oIeM4fYxYn0Ka4sYNg8DI0ojmlH0lo5wSm51kUjQBdZBCuVtrjCzen5ZxjwOKluND4OWYyeD--5Mx6WsOVtwCf3jTk%3D&u=http%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fllvm-dev

 ------------------------------------------------------------------------------

E-MAIL DISCLAIMER

The present message may contain confidential and/or legally privileged information. If you are not the intended addressee and in case of a transmission error, please notify the sender immediately and destroy this E-mail. Disclosure, reproduction or distribution of this document and its possible attachments is strictly forbidden.

SPACEBEL denies all liability for incomplete, improper, inaccurate, intercepted, (partly) destroyed, lost and/or belated transmission of the current information given that unencrypted electronic transmission cannot currently be guaranteed to be secure or error free.
Upon request or in conformity with formal, contractual agreements, an originally signed hard copy will be sent to you to confirm the information contained in this E-mail.

SPACEBEL denies all liability where E-mail is used for private use.

SPACEBEL cannot be held responsible for possible viruses that might corrupt this message and/or your computer system.
 -------------------------------------------------------------------------------


More information about the llvm-dev mailing list