[LLVMdev] fp_round libcall

Bruno Cardoso Lopes bruno.cardoso at gmail.com
Mon Jul 7 13:04:16 PDT 2008


On Mon, Jul 7, 2008 at 4:30 PM, Duncan Sands <baldrick at free.fr> wrote:
> Hi Bruno,
>
>> I'm trying to emit FP_ROUND f64 -> f32 considering a mips target that
>> only supports single
>> float point operations. The problem is that f32 is considered legal on this
>> target but f64 doesn't and the only way I can codegen this instruction is using
>> setConvertAction(MVT::f64, MVT::f32, Expand), which issues a EmitStackConvert.
>> What if I want a libcall instead? What should I do? The libcall FROUND_F64_F32
>> is there, but it seems that it cannot be reached without hacking. What
>> should I do
>> to support this? Am I missing something?
>
> with the new LegalizeTypes infrastructure you could add a method to
> DAGTypeLegalizer::SoftenFloatOperand which would turn FP_ROUND into
> a libcall (this logic will only be called if FP_ROUND has a legal
> return value but an illegal operand [f64] that is converted to an
> integer of the same size [i64]).

Seems that it's exactly what I'm looking for!
Thanks Duncan

-- 
Bruno Cardoso Lopes
http://www.brunocardoso.cc
"When faced with untenable alternatives, you
 should consider your imperative."



More information about the llvm-dev mailing list