https://bugs.llvm.org/show_bug.cgi?id=49200

            Bug ID: 49200
           Summary: Crash with microMIPS + "-mfp64" on floating-point
                    store
           Product: new-bugs
           Version: 11.0
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: new bugs
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected], [email protected]

Created attachment 24534
  --> https://bugs.llvm.org/attachment.cgi?id=24534&action=edit
Clang output, crash report files, and bugpoint output

The following code will crash Clang with a stack trace when building it using
microMIPS, hardware floating-point, and the "-mfp64" option.

----------
#define __CMPLX(x, y, t) \
        ((union { _Complex t __z; t __xy[2]; }){.__xy = {(x),(y)}}.__z)

#define CMPLX(x, y) __CMPLX(x, y, double)

void foo(void)
{
    double bleh = CMPLX(0, 0);
}
----------

I realized after I put together a report that the assignment probably isn't
correct, but changing it to "_Complex double bleh" caused the same crash.

Here is the beginning portion of the crash, which also shows the options I
invoke Clang with.

----------
fatal error: error in backend: Cannot select: t15: ch = store<(store 8 into
%ir.bleh.imagp)> t14, t10, t12, undef:i32, micromips_fpu_cmplx_check.c:24:21
  t10: f64,ch = load<(dereferenceable load 8 from %ir.__z.imagp)> t22, t7,
undef:i32, micromips_fpu_cmplx_check.c:24:28
    t7: i32 = add nuw FrameIndex:i32<1>, Constant:i32<8>,
micromips_fpu_cmplx_check.c:24:28
      t1: i32 = FrameIndex<1>
      t6: i32 = Constant<8>
    t4: i32 = undef
  t12: i32 = add nuw FrameIndex:i32<0>, Constant:i32<8>,
micromips_fpu_cmplx_check.c:24:21
    t11: i32 = FrameIndex<0>
    t6: i32 = Constant<8>
  t4: i32 = undef
In function: foo
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash
backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: ./pic32clang/install/bin/clang -g -target
mipsel-linux-gnu-musl -march=mips32r5 -mdspr2 -mmicromips -mhard-float -mfp64
-G0 -fomit-frame-pointer -O0 -c -o micromips_fpu_cmplx_check.o
micromips_fpu_cmplx_check.c 
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module
'micromips_fpu_cmplx_check.c'.
4.      Running pass 'MIPS DAG->DAG Pattern Instruction Selection' on function
'@foo'
----------

Removing EITHER the "-mmicromips" or the "-mfp64" option will allow this code
to build.

I followed the "How to submit an LLVM bug report" document to generate a .bc
file to give to "llc", which also crashed. I then used "bugpoint -llc-safe"
with that .bc file to generate more files. These files, the original sample
code, the files requested by the crash log, and the output of Clang and llc are
included in the attached ZIP file.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to