[LLVMdev] long double type on ARM

Jin Gu Kang jaykang10 at imrc.kist.re.kr
Wed Sep 30 09:44:16 PDT 2009


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
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/4374d534/attachment.html>


More information about the llvm-dev mailing list