[LLVMdev] long double type on ARM

Jin Gu Kang jaykang10 at imrc.kist.re.kr
Wed Sep 30 15:55:15 PDT 2009


Until now, I didn't know that llvm-gcc is target dependent.
and I could see the ARM-related changes to config.gcc in llvm-gcc for 2.6 ver.

I appreciate your kindly help.

Thank you.

Best regards,
Jin-Gu Kang
________________________________
From: Bob Wilson [bob.wilson at apple.com]
Sent: Thursday, October 01, 2009 1:45 AM
To: Jin Gu Kang
Cc: llvmdev at cs.uiuc.edu
Subject: Re: [LLVMdev] long double type on ARM

That is from 2.5, and just because there is nothing special listed in config.gcc does not mean it doesn't work.  For 2.5, the ARM port of llvm-gcc did not require a separate llvm-arm.cpp source file, so nothing needed to be added to config.gcc.  It worked fine as far as I know.

For 2.6, you will see that there are some ARM-related changes to config.gcc in llvm-gcc.

On Sep 30, 2009, at 9:44 AM, Jin Gu Kang wrote:

Hi Bob!

I could not find llvm file for ARM target in llvm-gcc 4.2 front end source code.

$llvm-gcc-src/gcc/config.gcc file

alpha*-*-*)
  cpu_type=alpha
  need_64bit_hwint=yes
# LLVM LOCAL begin
  out_cxx_file=alpha/llvm-alpha.cpp
# LLVM LOCAL end
  ;;
...
arm*-*-*)
  cpu_type=arm
  extra_headers="mmintrin.h"
  ;;
...
i[34567]86-*-*)
  cpu_type=i386
# LLVM LOCAL begin
  out_cxx_file=i386/llvm-i386.cpp
# LLVM LOCAL end
  # APPLE LOCAL begin 5612787 mainline sse4
    extra_headers="mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h
           pmmintrin.h tmmintrin.h ammintrin.h smmintrin.h
           nmmintrin.h"

(out_cxx_file variable is empty for ARM target)
I wonder if llvm-gcc 4.2 front-end support bitcode conversion for ARM target.

Thank you.

Best regards,

Jin-Gu Kang

________________________________
From: Bob Wilson [bob.wilson at apple.com]
Sent: Thursday, October 01, 2009 1:23 AM
To: Jin Gu Kang
Cc: llvmdev at cs.uiuc.edu<mailto:llvmdev at cs.uiuc.edu>
Subject: Re: [LLVMdev] long double type on ARM

Unlike llvm itself, llvm-gcc needs to be configured for a particular target architecture.  It looks like you're using a copy of llvm-gcc that was built to generate x86 code.

On Sep 30, 2009, at 6:27 AM, Jin Gu Kang wrote:

Dear LLVM members.

I am compiling coreutils-7.4 package for ARM linux using LLVM 2.5 version.

When i compiled 'od' program in coreutils package using LLVM 2.5,
i could see the error message on llc processing.

> llvm-gcc -emit-llvm  ./od.c  -c  -o  ./od.bc  -other-options...
> llc -march=arm ./od.bc -f -o ./od.s
llc: /home/jaykang10/HardDisk2/Projects/LLVM/src/llvm-2.5/lib/Target/TargetData.cpp:305: unsigned int llvm::TargetData::getAlignmentInfo(llvm::AlignTypeEnum, uint32_t, bool, const llvm::Type*) const: Assertion `AlignType == VECTOR_ALIGN && "Unknown alignment type!"' failed.

The problem was that
when i converted 'od' source code to llvm bitcode, long double type of 'od' source code was changed to x86_fp80 type in llvm bitcode and then llc on ARM target was not support x86_fp80 type.

I think that long double type on ARM is 8 byte. (same as double type)

When we use llvm on ARM target,(or other target not support x86_fp80)
i think it might be better to convert long double type in C to double type in llvm bitcode on llvm-gcc or
treat x86_fp80 type in llvm bitcode as double type on llc.
(I wonder if we select the target at llvm-gcc build time)

I would like to know how to solve the above problem.

Thank you

Best regards,

Jin-Gu Kang








_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu<mailto:LLVMdev at cs.uiuc.edu>         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20091001/7bbcd21d/attachment.html>


More information about the llvm-dev mailing list