[LLVMbugs] [Bug 8672] New: emitting SFENCE memory barrier for JIT fails with assertion / unreachable

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Nov 23 08:44:01 PST 2010


           Summary: emitting SFENCE memory barrier for JIT fails with
                    assertion / unreachable
           Product: new-bugs
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: hammacher at cs.uni-saarland.de
                CC: llvmbugs at cs.uiuc.edu

Created an attachment (id=5823)
 --> (http://llvm.org/bugs/attachment.cgi?id=5823)
bitcode file causing lli to crash

I found that lli is unable to execute a memory barrier which only requires an
SFENCE instruction in x86. I can reproduce the behavior in TOT (r120026).

Simple bitcode file (bc file attached):
    define internal i32 @main() {
      call void @llvm.memory.barrier(i1 false, i1 false, i1 false, i1 true, i1
      ret i32 47

    declare void @llvm.memory.barrier(i1, i1, i1, i1, i1) nounwind

The error disappears if any of the first three arguments to llvm.memory.barrier
is changed to true, because then an MFENCE is generated instead of SFENCE
(checked by adding --debug-only=x86-emitter).
Setting only the first and the last parameter produces an LFENCE which
surprisingly does also work!

Trying to run the "program" with lli version 2.7 fails with this assertion:
Assertion failed: (i < getNumOperands() && "getOperand() out of range!"),
function getOperand, file
/usr/src/llvm-2.7/include/llvm/CodeGen/MachineInstr.h, line 159.

    #0  0x00007fff85fd5616 in __kill ()
    #1  0x00007fff86075cca in abort ()
    #2  0x00007fff86062c90 in __assert_rtn ()
    #3  0x000000010013549f in llvm::MachineInstr::getOperand (this=0x103836a20,
i=0) at MachineInstr.h:159
    #4  0x0000000100133bb2 in emitInstruction (this=0x10311c310,
MI=@0x103836a20, Desc=0x10028f6f8) at X86CodeEmitter.cpp:765
    #5  0x0000000100132760 in runOnMachineFunction (this=0x10311c310,
MF=@0x10311d550) at X86CodeEmitter.cpp:136
    #6  0x0000000100d77faf in llvm::MachineFunctionPass::runOnFunction
(this=0x10311c310, F=@0x103107cf0) at MachineFunctionPass.cpp:27
    #7  0x000000010271de13 in llvm::FPPassManager::runOnFunction
(this=0x10310a190, F=@0x103107cf0) at PassManager.cpp:1350
    #8  0x000000010271daeb in llvm::FunctionPassManagerImpl::run
(this=0x103109c20, F=@0x103107cf0) at PassManager.cpp:1301
    #9  0x000000010271d791 in llvm::FunctionPassManager::run (this=0x103109210,
F=@0x103107cf0) at PassManager.cpp:1231
    #10 0x0000000100b1e3d2 in llvm::JIT::runJITOnFunctionUnlocked
(this=0x103109b20, F=0x103107cf0, locked=@0x7fff5fbfef80) at JIT.cpp:631
    #11 0x0000000100b1e7a3 in llvm::JIT::getPointerToFunction
(this=0x103109b20, F=0x103107cf0) at JIT.cpp:683
    #12 0x0000000100b1d09b in llvm::JIT::runFunction (this=0x103109b20,
F=0x103107cf0, ArgValues=@0x7fff5fbff440) at JIT.cpp:401
    #13 0x0000000100c4a0f1 in llvm::ExecutionEngine::runFunctionAsMain
(this=0x103109b20, Fn=0x103107cf0, argv=@0x10000f138, envp=0x7fff5fbff788) at
    #14 0x0000000100003c7c in main (argc=3, argv=0x7fff5fbff768,
envp=0x7fff5fbff788) at lli.cpp:234

lli version:
    Low Level Virtual Machine (http://llvm.org/):
      llvm version 2.7
      DEBUG build with assertions.
      Built Nov 20 2010 (11:44:09).
      Host: x86_64-apple-darwin10
      Host CPU: penryn

      Registered Targets:
        x86    - 32-bit X86: Pentium-Pro and above
        x86-64 - 64-bit X86: EM64T and AMD64

lli from TOT (2.9svn) produces these errors:
    Unknown FormMask value in X86 MachineCodeEmitter!
    UNREACHABLE executed at X86CodeEmitter.cpp:712!

    #0  0x00007fff86062cae in __pthread_kill ()
    #1  0x00007fff860625d2 in pthread_kill ()
    #2  0x00000001000259ab in raise (sig=6) at Signals.inc:278
    #3  0x0000000100025a40 in abort () at Signals.inc:298
    #4  0x00000001007c0155 in llvm::llvm_unreachable_internal (msg=Could not
find the frame base for "llvm::llvm_unreachable_internal(char const*, char
const*, unsigned int)".
) at ErrorHandling.cpp:99
    #5  0x0000000100082294 in emitInstruction (this=0x10231b5b0,
MI=@0x102838e60, Desc=0x100c24680) at X86CodeEmitter.cpp:712
    #6  0x00000001000818bc in runOnMachineFunction (this=0x10231b5b0,
MF=@0x10231c300) at X86CodeEmitter.cpp:136
    #7  0x00000001003b6987 in llvm::MachineFunctionPass::runOnFunction
(this=0x10231b5b0, F=@0x102305c70) at MachineFunctionPass.cpp:33
    #8  0x0000000100756c55 in llvm::FPPassManager::runOnFunction
(this=0x1023054a0, F=@0x102305c70) at PassManager.cpp:1452
    #9  0x000000010075691d in llvm::FunctionPassManagerImpl::run
(this=0x102305160, F=@0x102305c70) at PassManager.cpp:1403
    #10 0x00000001007565c3 in llvm::FunctionPassManager::run (this=0x102304e40,
F=@0x102305c70) at PassManager.cpp:1333
    #11 0x0000000100315342 in llvm::JIT::jitTheFunction (this=0x102306eb0,
F=0x102305c70, locked=@0x7fff5fbfef60) at JIT.cpp:661
    #12 0x0000000100315209 in llvm::JIT::runJITOnFunctionUnlocked
(this=0x102306eb0, F=0x102305c70, locked=@0x7fff5fbfef60) at JIT.cpp:640
    #13 0x0000000100315617 in llvm::JIT::getPointerToFunction
(this=0x102306eb0, F=0x102305c70) at JIT.cpp:697
    #14 0x0000000100313eef in llvm::JIT::runFunction (this=0x102306eb0,
F=0x102305c70, ArgValues=@0x7fff5fbff460) at JIT.cpp:412
    #15 0x000000010060af3f in llvm::ExecutionEngine::runFunctionAsMain
(this=0x102306eb0, Fn=0x102305c70, argv=@0x100c51478, envp=0x7fff5fbff810) at
    #16 0x000000010002685d in main (argc=3, argv=0x7fff5fbff7f0,
envp=0x7fff5fbff810) at lli.cpp:251

lli version:
    Low Level Virtual Machine (http://llvm.org/):
      llvm version 2.9svn
      DEBUG build with assertions.
      Built Nov 23 2010 (17:00:30).
      Host: x86_64-apple-darwin10
      Host CPU: penryn

      Registered Targets:
        x86    - 32-bit X86: Pentium-Pro and above
        x86-64 - 64-bit X86: EM64T and AMD64

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