[LLVMbugs] [Bug 9235] New: JIT: uitofp on vector type hits assert in X86TargetLowering / SelectionDAG

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Feb 16 08:44:32 PST 2011


http://llvm.org/bugs/show_bug.cgi?id=9235

           Summary: JIT: uitofp on vector type hits assert in
                    X86TargetLowering / SelectionDAG
           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: matt at pharr.org
                CC: llvmbugs at cs.uiuc.edu


Given this program:

define <4 x float> @f_f(<4 x i32>) nounwind {
entry:
  %uint2float.i = uitofp <4 x i32> %0 to <4 x float>
  ret <4 x float> %uint2float.i
}

If I try to run it with the JIT with the test program below, then I hit the
following assert.  (Note that this happens in the dev branch, but it works fine
with the 2.8 release).

SelectionDAG.cpp:2693: llvm::SDValue llvm::SelectionDAG::getNode(unsigned int,
llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue): Assertion
`N1.getValueType() == N2.getValueType() && N1.getValueType() == VT && "Binary
operator types must match!"' failed.

with the following stack trace:

(gdb) where
#0  0x00002aaaab8d2a75 in *__GI_raise (sig=<value optimized out>) at
../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00002aaaab8d65c0 in *__GI_abort () at abort.c:92
#2  0x00002aaaab8cb941 in *__GI___assert_fail (
    assertion=0xbc8220 "N1.getValueType() == N2.getValueType() &&
N1.getValueType() == VT && \"Binary operator types must match!\"", file=<value
optimized out>, line=2693, 
    function=0xbcf360 "llvm::SDValue llvm::SelectionDAG::getNode(unsigned int,
llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue)") at assert.c:81
#3  0x00000000005c4bf4 in llvm::SelectionDAG::getNode (this=0x11ce000,
Opcode=47, DL=..., VT=..., N1=..., N2=...)
    at SelectionDAG.cpp:2693
#4  0x00000000004df47d in PerformEXTRACT_VECTOR_ELTCombine (N=0x11f4b00,
DAG=..., TLI=...)
    at X86ISelLowering.cpp:10893
#5  0x00000000004e8279 in llvm::X86TargetLowering::PerformDAGCombine
(this=0x11afb48, N=0x11f4b00, DCI=...)
    at X86ISelLowering.cpp:11948
#6  0x000000000056a999 in combine (this=0x7fffffffd930, N=0x11f4b00) at
DAGCombiner.cpp:1109
#7  0x00000000005697c5 in Run (this=0x7fffffffd930,
AtLevel=llvm::NoIllegalOperations) at DAGCombiner.cpp:966
#8  0x00000000005a0ee8 in llvm::SelectionDAG::Combine (this=0x11ce000,
Level=llvm::NoIllegalOperations, AA=..., 
    OptLevel=llvm::CodeGenOpt::Default) at DAGCombiner.cpp:7573
#9  0x0000000000637ab9 in llvm::SelectionDAGISel::CodeGenAndEmitDAG
(this=0x11ccaa0) at SelectionDAGISel.cpp:585
#10 0x0000000000636bb4 in llvm::SelectionDAGISel::SelectBasicBlock
(this=0x11ccaa0, Begin=..., End=..., 
    HadTailCall=@0x7fffffffddff) at SelectionDAGISel.cpp:439
#11 0x000000000063917e in llvm::SelectionDAGISel::SelectAllBasicBlocks
(this=0x11ccaa0, Fn=...)
    at SelectionDAGISel.cpp:970
#12 0x0000000000636121 in llvm::SelectionDAGISel::runOnMachineFunction
(this=0x11ccaa0, mf=...)
    at SelectionDAGISel.cpp:306
#13 0x0000000000744a19 in llvm::MachineFunctionPass::runOnFunction
(this=0x11ccaa0, F=...)
    at MachineFunctionPass.cpp:33
#14 0x0000000000a75679 in llvm::FPPassManager::runOnFunction (this=0x11a7dd0,
F=...) at PassManager.cpp:1483
#15 0x0000000000a75341 in llvm::FunctionPassManagerImpl::run (this=0x11a7a80,
F=...) at PassManager.cpp:1434
#16 0x0000000000a74ff1 in llvm::FunctionPassManager::run (this=0x11af3a0,
F=...) at PassManager.cpp:1364
#17 0x000000000041a57e in llvm::JIT::jitTheFunction (this=0x11a6d10,
F=0x11a9160, locked=...) at JIT.cpp:661
#18 0x000000000041a457 in llvm::JIT::runJITOnFunctionUnlocked (this=0x11a6d10,
F=0x11a9160, locked=...)
    at JIT.cpp:640
#19 0x000000000041a84d in llvm::JIT::getPointerToFunction (this=0x11a6d10,
F=0x11a9160) at JIT.cpp:697
#20 0x0000000000417dff in main (argc=2, argv=0x7fffffffe5c8) at
build/linux2-debug/test.cpp:42

(Sorry I couldn't get this to reproduce with lli, but the following short
program will reproduce it.)

#include <stdio.h>

#include <llvm/LLVMContext.h>
#include <llvm/Module.h>
#include <llvm/DerivedTypes.h>
#include <llvm/ExecutionEngine/ExecutionEngine.h>
#include <llvm/ExecutionEngine/JIT.h>
#include <llvm/Target/TargetSelect.h>
#include <llvm/Target/TargetOptions.h>
#include <llvm/Target/TargetData.h>
#include <llvm/Analysis/Verifier.h>
#include <llvm/Support/raw_ostream.h>
#include <llvm/Bitcode/ReaderWriter.h>
#include <llvm/Support/MemoryBuffer.h>
#include <llvm/Support/system_error.h>

int main(int argc, char *argv[]) {
    const char *fn = argv[1];

    llvm::InitializeNativeTarget();

    llvm::LLVMContext *ctx = new llvm::LLVMContext;
    llvm::OwningPtr<llvm::MemoryBuffer> buf;
    llvm::error_code err = llvm::MemoryBuffer::getFileOrSTDIN(fn, buf);
    if (err) {
        fprintf(stderr, "Unable to open file \"%s\": %s\n", fn,
err.message().c_str());
        delete ctx;
        return 1;
    }
    std::string bcErr;
    llvm::Module *module = llvm::ParseBitcodeFile(buf.get(), *ctx, &bcErr);
    if (!module) {
        fprintf(stderr, "Bitcode reader failed for \"%s\": %s\n", fn,
bcErr.c_str());
        delete ctx;
        return false;
    }
    llvm::ExecutionEngine *ee = llvm::ExecutionEngine::createJIT(module);
    llvm::Function *func = module->getFunction("f_f");
    assert(func != NULL);

    void *ptr = ee->getPointerToFunction(func);

    return 0;
}

-- 
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