[LLVMdev] Problem with PTX assembly printing (NVPTX backend)
nkavv at physics.auth.gr
nkavv at physics.auth.gr
Mon Feb 4 11:49:14 PST 2013
Hi Justin,
thank you for your time, you were right!
This helloworld.c (no I/O calls):
int main(void) {return 0;}
produces the following PTX output:
//
// Generated by LLVM NVPTX Back-End
//
.version 3.1
.target sm_10, texmode_independent
.address_size 32
// .globl main
.func (.reg .b32 func_retval0) main(
) // @main
{
.reg .pred %p<396>;
.reg .s16 %rc<396>;
.reg .s16 %rs<396>;
.reg .s32 %r<396>;
.reg .s64 %rl<396>;
.reg .f32 %f<396>;
.reg .f64 %fl<396>;
// BB#0:
mov.u32 %r0, 0;
mov.b32 func_retval0, %r0;
ret;
}
Best regards
Nikolaos Kavvadias
Quoting Justin Holewinski <justin.holewinski at gmail.com>:
> Alright, couple of points here:
>
> 1. Address space 0 is invalid for global variables. This is causing a
> crash in llc where we use llvm_unreachable() on this case. This is most
> likely why you're seeing llc run forever. The fix for this is to use
> address space 1 for globals, which puts them into PTX global memory. On
> our side, we should provide a meaningful error message in this case.
>
> 2. The stdio.h header you're using has no chance of producing IR that is
> valid for NVPTX. In this case, printf gets translated into a call to
> puts(), which will be undefined if you try to execute the PTX.
>
> I'm putting together some documentation on using the back-end; hopefully
> I'll have something ready soon.
>
>
> On Mon, Feb 4, 2013 at 2:04 PM, <nkavv at physics.auth.gr> wrote:
>
>> Hi,
>>
>>
>> Can you post the llc command line you're using? Can you post an LLVM IR
>>> file that causes this behavior?
>>>
>>
>> yes:
>>
>> ${LLVM_PATH}/bin/llc -o helloworld.s -march=nvptx helloworld.ll
>>
>> where LLVM_PATH my local installation path for LLVM.
>>
>> Also attaching helloworld.c:
>>
>> #include <stdio.h>
>>
>> int main(void) {
>> printf("Hello World!\n");
>> return 0;
>> }
>>
>>
>>
>> and helloworld.ll:
>>
>> ; ModuleID = 'helloworld.c'
>> target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-**
>> i16:16:16-i32:32:32-i64:64:64-**f32:32:32-f64:64:64-f80:128:**
>> 128-v64:64:64-v128:128:128-a0:**0:64-f80:32:32-n8:16:32-S32"
>> target triple = "i686-w64-mingw32"
>>
>> @str = private unnamed_addr constant [13 x i8] c"Hello World!\00"
>>
>> define i32 @main() nounwind {
>> %puts = tail call i32 @puts(i8* getelementptr inbounds ([13 x i8]* @str,
>> i32 0, i32 0))
>> ret i32 0
>> }
>>
>> declare i32 @puts(i8* nocapture) nounwind
>>
>>
>> For instance, the "mips" target produces this:
>>
>> .section .mdebug.abi32
>> .previous
>> .file "helloworld.ll"
>> .text
>> .globl main
>> .align 2
>> .type main, at function
>> .set nomips16 # @main
>> .ent main
>> main:
>> .frame $sp,24,$ra
>> .mask 0x80000000,-4
>> .fmask 0x00000000,0
>> .set noreorder
>> .set nomacro
>> .set noat
>> # BB#0:
>> lui $2, %hi(_gp_disp)
>> addiu $2, $2, %lo(_gp_disp)
>> addiu $sp, $sp, -24
>> sw $ra, 20($sp) # 4-byte Folded Spill
>> addu $gp, $2, $25
>> lw $1, %got($str)($gp)
>> lw $25, %call16(puts)($gp)
>> jalr $25
>> addiu $4, $1, %lo($str)
>> addiu $2, $zero, 0
>> lw $ra, 20($sp) # 4-byte Folded Reload
>> jr $ra
>> addiu $sp, $sp, 24
>> .set at
>> .set macro
>> .set reorder
>> .end main
>> $tmp2:
>> .size main, ($tmp2)-main
>>
>> .type $str, at object # @str
>> .section .rodata.str1.4,"aMS",@**progbits,1
>> .align 2
>> $str:
>> .asciz "Hello World!"
>> .size $str, 13
>>
>>
>>
>>
>>
>> Best regards
>> Nikolaos Kavvadias
>>
>>
>> BTW I've built LLVM with mingw (strange mixture of gcc-3.4.5 and
>>>>
>>>>> g++-4.6.1). Native compilation, MIPS backend and other things that i've
>>>>>> tested, all work properly.
>>>>>>
>>>>>>
>>>>> Perhaps this "strange mixture" is causing some symbol errors somewhere.
>>>>> Can you post the exact sequence of steps you used to build LLVM, along
>>>>> with
>>>>> the llc command-line that fails for you?
>>>>>
>>>>>
>>>> My configuration options were:
>>>>
>>>> --prefix=/my/local/path/or/so --enable-shared --enable-targets=all
>>>> --enable-optimized --disable-libffi --disable-debug-runtime
>>>> --disable-assertions --disable-expensive-checks
>>>>
>>>> Following configuration i did the typical make and make install (to a
>>>> selected path by --prefix.
>>>>
>>>>
>>>> Best regards
>>>> Nikolaos Kavvadias
>>>>
>>>>
>>>>
>>>>
>>>>>
>>>>> Any help is appreciated.
>>>>>>
>>>>>> Best regards,
>>>>>> Nikolaos Kavvadias
>>>>>>
>>>>>>
>>>>>>
>>>>>> ______________________________******_________________
>>>>>>
>>>>>>
>>>>>> LLVM Developers mailing list
>>>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>>>>>> http://lists.cs.uiuc.edu/******mailman/listinfo/llvmdev<http://lists.cs.uiuc.edu/****mailman/listinfo/llvmdev>
>>>>>> <http:**//lists.cs.uiuc.edu/**mailman/**listinfo/llvmdev<http://lists.cs.uiuc.edu/**mailman/listinfo/llvmdev>
>>>>>> >
>>>>>> <http:**//lists.cs.uiuc.edu/**mailman/**listinfo/llvmdev<http://lists.cs.uiuc.edu/mailman/**listinfo/llvmdev>
>>>>>> <htt**p://lists.cs.uiuc.edu/mailman/**listinfo/llvmdev<http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>
>>>>>> >
>>>>>> >
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Justin Holewinski
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>> --
>>>
>>> Thanks,
>>>
>>> Justin Holewinski
>>>
>>>
>>
>>
>
>
> --
>
> Thanks,
>
> Justin Holewinski
>
More information about the llvm-dev
mailing list