This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/16364] New: IA-64 long double/union argument causes ICE


A testcase that passes an argument consisting of a union with a single long
double field gets an ICE.  The union has size 16 and mode TImode.  The ABI says
that this is an HFA which must be passed in an FP register.  The FP regs can
hold at most XFmode.  So we end up with a TImode move into/out of an FP reg
which generates an unrecognizable insn.

Defining MEMBER_TYPE_FORCES_BLK does not help.  We don't get an abort, but we
end up with block moves into/out of the FP regs which use DImode, and hence
require two FP regs which is wrong.  The union fits in one FP reg as XFmode, and
requires an XFmode load/store instruction to move it between FP regs and memory.

-- 
           Summary: IA-64 long double/union argument causes ICE
           Product: gcc
           Version: 3.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: target
        AssignedTo: wilson at gcc dot gnu dot org
        ReportedBy: wilson at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org
  GCC host triplet: ia64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16364


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]