[LLVMdev] opt + fastcc bug?

Reid Kleckner reid.kleckner at gmail.com
Thu Apr 7 08:58:55 PDT 2011


See http://llvm.org/docs/FAQ.html#callconvwrong if you're wondering
why LLVM can't just take the calling convention from the
definition/declaration.

Reid

On Thu, Apr 7, 2011 at 1:56 AM, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Wed, Apr 6, 2011 at 10:48 PM, Nicolas Ojeda Bar
> <nojb at math.harvard.edu> wrote:
>> Hi,
>>
>> Is this correct behaviour?
>>
>> test.ll:
>>
>> declare {} @__ex__print_int(i64)
>>
>> define i32 @main() {
>> entry:
>>  %0 = call i64 @f.1()
>>  %1 = call {} @__ex__print_int(i64 %0)
>>  ret i32 0
>> }
>>
>> define internal fastcc i64 @f.1() {
>> entry:
>>  ret i64 7
>> }
>>
>>> opt -std-compile-opts test.ll -S
>>
>> ; ModuleID = 'test.ll'
>>
>> define i32 @main() noreturn nounwind {
>> entry:
>>  tail call void @llvm.trap()
>>  unreachable
>> }
>>
>> declare void @llvm.trap() nounwind
>>
>> If I remove fastcc then everything works as expected.
>> Does this mean that one shouldn't use opt when you
>> use fastcc functions (which are required when implementing
>> tail recursive languages!)?
>
> Try "%0 = call fastcc i64 @f.1()"; the conventions of the call and the
> callee are required to match.
>
> -Eli
>
> _______________________________________________
> 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