[LLVMbugs] [Bug 7081] New: Assertion "Stack not empty at end of basic block?" when using target_cpu=i486

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu May 6 17:20:33 PDT 2010


           Summary: Assertion "Stack not empty at end of basic block?"
                    when using target_cpu=i486
           Product: tools
           Version: trunk
          Platform: PC
        OS/Version: FreeBSD
            Status: NEW
          Severity: normal
          Priority: P
         Component: llc
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: dimitry at andric.com
                CC: llvmbugs at cs.uiuc.edu

While compiling a file from the ntp component of FreeBSD using clang
r103176, I ended up with the following assertion:

Assertion failed: (isStackEmpty() && "Stack not empty at end of basic
block?"), function processBasicBlock, file X86FloatingPoint.cpp, line
Stack dump:
0.      Program arguments: /home/dim/llvm/103176-gcc-dbg-1/bin/clang
  -cc1 -triple i386-undermydesk-freebsd9.0 -S -disable-free
  -main-file-name ntp_proto.i -mrelocation-model static
  -mdisable-fp-elim -mconstructor-aliases -target-cpu i486
  -resource-dir /usr/obj/home/dim/src/clangbsd/tmp/usr/lib/clang/2.0
  -O2 -Wno-pointer-sign -std=gnu99 -ferror-limit 19 -fmessage-length
  254 -fheinous-gnu-extensions -stack-protector 1 -fgnu-runtime
  -fdiagnostics-show-option -fcolor-diagnostics -x cpp-output
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'X86 FP Stackifier' on function '@clock_filter'

This is because the clang imported in FreeBSD uses 'i486' as its
default target CPU, not 'pentium4', which is the clang default.

When clang passes -mcpu=pentium4 to llc, it generates SSE
instructions, but when -mcpu=i486 is used instead, it apparently uses
'old-school' FP instructions.

The reduced testcase in C is this:

extern signed char sys_precision;
void clock_filter(void)
  double dst[8];
  int ord[8];
  int i, j, k, m;
  double dtemp, etemp;
  for (i = 1; i < 8; i++) {
    for (j = 0; j < i; j++) {
      if (dst[j] > dst[i] + ((sys_precision) < 0 ?
          1. / (1L << -(sys_precision)) :
          1L << (int)(sys_precision))) {
        k = ord[j];
        ord[j] = ord[i];
        ord[i] = k;
        etemp = dst[j];
        dst[j] = dst[i];
        dst[i] = etemp;

compiling this with:

clang -cc1 -target-cpu i486 -O2 -emit-llvm ntp_proto.i -o - | \
  llc -mcpu=i486 

will fire the assertion.

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list