[LLVMdev] Using CallingConvLower in ARM target
Evan Cheng
evan.cheng at apple.com
Mon Jan 5 00:13:56 PST 2009
Hi Sandeep,
Dan's idea of adding CC custom lowering support is sound. Can you add
that support?
Your patch looks good. I look forward to a more complete patch. But I
do have a nitpick:
Index: include/llvm/CodeGen/CallingConvLower.h
===================================================================
--- include/llvm/CodeGen/CallingConvLower.h (revision 60966)
+++ include/llvm/CodeGen/CallingConvLower.h (working copy)
@@ -32,7 +32,8 @@
Full, // The value fills the full location.
SExt, // The value is sign extended in the location.
ZExt, // The value is zero extended in the location.
- AExt // The value is extended with undefined upper bits.
+ AExt, // The value is extended with undefined upper bits.
+ BCnv // The value is bitconverted in the location
// TODO: a subset of the value is in the location.
};
How about BCvt instead of BCnv? Also, please substitue bit-convert for
bitconvert in comments.
Thanks,
Evan
On Jan 3, 2009, at 11:46 AM, Dan Gohman wrote:
>
> On Dec 27, 2008, at 4:30 AM, Sandeep Patel wrote:
>
>> Attached is a prototype patch that uses CCState to lower RET nodes in
>> the ARM target. Lowering CALL nodes will come later.
>>
>> This patch does not handle f64 and i64 types. For these types, it
>> would be ideal to request the conversions below:
>
> i64 isn't Legal on ARM, so it should already be handled.
>
>>
>>
>> def RetCC_ARM_APCS : CallingConv<[
>> CCIfType<[f32], CCBitConvertToType<i32>>,
>> CCIfType<[f64], CCBitConvertToType<i64>>,
>> CCIfType<[i64], CCExtractElements<2, i32>>,
>>
>> CCIfType<[i32], CCAssignToReg<[R0, R1]>>
>> ]>;
>>
>> The problem is that i64 handling requires splitting into 2 x i32
>> registers. I am not sure how to build CCExtractElements as shown. The
>> current organization of CCState::AnalyzeReturn does not allow for
>> reissuing of the RET with an altered set of operands which is the
>> solution used elsewhere. Can anyone suggest a better way to express
>> this lowering?
>
> One problem with this approach is that since i64 isn't legal, the
> bitcast would require custom C++ code in the ARM target to
> handle properly. It might make sense to introduce something
> like
>
> CCIfType<[f64], CCCustom>
>
> where CCCustom is a new entity that tells the calling convention
> code to to let the target do something not easily representable
> in the tablegen minilanguage.
>
> Dan
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list