On May 24, 2008, at 12:12 PM, Bill Wendling wrote:> Let us know if you would like extra eyes on the two PPC failures. Many > of us have a lot of experience with C++. :-) Do you know where these > allocations are?I don't mind if people help out, so here's some information: FAIL: /nfs/llvm/src/llvm/test/Transforms/PredicateSimplifier/ 2006-11-04-ReplacingZeros.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /nfs/llvm/src/llvm/test/Transforms/ PredicateSimplifier/2006-11-04-ReplacingZeros.ll | opt -predsimplify - disable-output Assertion failed: (validPredicate(R) && "Invalid predicate."), function update, file /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp, line 702. xserve% Debug/bin/llvm-as < /nfs/llvm/src/llvm/test/Transforms/ PredicateSimplifier/2006-11-04-ReplacingZeros.ll > x.bc xserve% gdb Debug/bin/opt GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "powerpc-marcel-freebsd"... (gdb) set args -predsimplify -disable-output < x.bc (gdb) run Starting program: /nfs/llvm/obj/powerpc/Debug/bin/opt -predsimplify - disable-output < x.bc [New LWP 100048] [New Thread 0x2002040 (LWP 100048)] Assertion failed: (validPredicate(R) && "Invalid predicate."), function update, file /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp, line 702. Program received signal SIGABRT, Aborted. [Switching to Thread 0x2002040 (LWP 100048)] 0x2229ce08 in kill () from /lib/libc.so.7 (gdb) bt #0 0x2229ce08 in kill () from /lib/libc.so.7 #1 0x22000848 in raise () from /lib/libthr.so.3 #2 0x2229b6a4 in abort () from /lib/libc.so.7 #3 0x22281d80 in __assert () from /lib/libc.so.7 #4 0x01c34a78 in update (this=0x200c940, n=1515870810, R=1515870810, Subtree=0x20298c0) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp:702 #5 0x01c3d134 in makeEqual (this=0x7fffd550, V1=0x2009730, V2=0x2006624) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp:1614 #6 0x01c3db18 in solve (this=0x7fffd550) at /nfs/llvm/src/llvm/lib/ Transforms/Scalar/PredicateSimplifier.cpp:2151 #7 0x01c3f95c in visitBranchInst (this=0x7fffd648, BI=@0x2006714) at / nfs/llvm/src/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:2447 #8 0x01c3fb90 in visitBr (this=0x7fffd648, I=@0x2006714) at Instruction.def:98 #9 0x01c40038 in visit (this=0x7fffd648, I=@0x2006714) at Instruction.def:98 #10 0x01c40aa8 in visitInstruction (this=0x2006790, I=0x2006714, DT=0x2029800) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp:2376 #11 0x01c40c48 in visitBasicBlock (this=0x2006790, Node=0x2029800) at / nfs/llvm/src/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:2320 #12 0x01c410b8 in runOnFunction (this=0x2006790, F=@0x2006510) at /nfs/ llvm/src/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:2398 #13 0x01e84760 in llvm::FPPassManager::runOnFunction (this=0x2021080, F=@0x2006510) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1178 #14 0x01e84998 in llvm::FPPassManager::runOnModule (this=0x2021080, M=@0x20093a0) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1198 #15 0x01e84218 in llvm::MPPassManager::runOnModule (this=0x202c110, M=@0x20093a0) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1248 #16 0x01e84474 in llvm::PassManagerImpl::run (this=0x201d100, M=@0x20093a0) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1322 #17 0x01e84534 in llvm::PassManager::run (this=0x7fffdb10, M=@0x20093a0) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1354 #18 0x01a70774 in main (argc=3, argv=0x7fffdbc4) at /nfs/llvm/src/llvm/ tools/opt/opt.cpp:431 (gdb) frame 5 #5 0x01c3d134 in makeEqual (this=0x7fffd550, V1=0x2009730, V2=0x2006624) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp:1614 1614 IG.node(n1)->update(NI->To, NI->LV, Top); (gdb) p NI $1 = ((anonymous namespace)::InequalityGraph::Edge *) 0x2036390 (gdb) p /x *NI $2 = {To = 0x5a5a5a5a, LV = 0x5a5a5a5a, Subtree = 0x5a5a5a5a} (gdb) p NE $3 = ((anonymous namespace)::InequalityGraph::Edge *) 0x203639c (gdb) p /x *NE $4 = {To = 0x5a5a5a5a, LV = 0x5a5a5a5a, Subtree = 0x5a5a5a5a} Both NI and NE are defined by the for loop: 1603 for (Node::iterator NI = IG.node(n)->begin(), NE = IG.node(n)->end(); 1604 NI != NE; ++NI) { In this case: (gdb) p n $5 = 4 (gdb) p IG.node(n)->begin() $12 = ((anonymous namespace)::InequalityGraph::Edge *) 0x1f59378 (gdb) p IG.node(n)->end() $14 = ((anonymous namespace)::InequalityGraph::Edge *) 0xa5a5a5a5>> My current plan is as follows: >> o Resolve powerpc failures to bring it in line with amd64 & i386. >> o Adding support for inline assembly for ia64 (already started) and >> improving ia64 in general. This is longer term work... > > Is the lack of inline assembly the cause of the 21 regressions on > ia64? Or is it something more systemic?No, not entirely. I added some debug printf's and I see them pop up in the output, but there are more failures: FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/GC/ frame_size.ll Failed with exit(1) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/GC/frame_size.ll | llc -asm-verbose | grep {frame size} | grep -v 0x0 Assertion failed: (ResNo < NumValues && "Illegal result number!"), function getValueType, file /dumpster/home/marcel/LLVM/src/llvm/ include/llvm/CodeGen/SelectionDAGNodes.h, line 1220. FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ 2003-05-27-phifcmpd.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/2003-05-27-phifcmpd.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 Cannot yet select: 0x2000000001d76120: i1 = setcc 0x2000000001d46520, 0x2000000001d48240, 0x2000000001d08fe0 FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ 2003-05-27-useboolinotherbb.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/2003-05-27-useboolinotherbb.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 Cannot yet select: 0x2000000001d76120: i1 = setcc 0x2000000001d463e0, 0x2000000001d341d0, 0x2000000001d08f20 FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ 2003-05-27-usefsubasbool.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/2003-05-27-usefsubasbool.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 Cannot yet select: 0x2000000001d76120: i1 = setcc 0x2000000001d463e0, 0x2000000001d341d0, 0x2000000001d08f20 FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ 2005-10-21-longlonggtu.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/2005-10-21-longlonggtu.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 Assertion failed: (MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) && "Invalid TRUNCATE!"), function getNode, file /dumpster/home/marcel/LLVM/src/llvm/lib/CodeGen/ SelectionDAG/SelectionDAG.cpp, line 2011. FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ 2006-04-28-Sign-extend-bool.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/2006-04-28-Sign-extend-bool.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 Cannot yet select: 0x2000000001d523e0: i64 = sign_extend_inreg 0x2000000001d52340, 0x2000000001d08f80 FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ 2007-04-08-MultipleFrameIndices.ll for PR1308,1557 Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/2007-04-08-MultipleFrameIndices.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 NODE: 0x2000000001d09460: i32 = TargetConstant <1> Assertion failed: (0 && "Do not know how to promote this operator!"), function PromoteOp, file /dumpster/home/marcel/LLVM/src/llvm/lib/ CodeGen/SelectionDAG/LegalizeDAG.cpp, line 4089. FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ 2007-04-27-LargeMemObject.ll for PR1557 Failed with exit(1) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/2007-04-27-LargeMemObject.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 XXX: getRegForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegClassForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegClassForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegClassForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegClassForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegClassForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegClassForInlineAsmConstraint Could not match memory address. Inline asm failure! FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ 2008-02-20-MatchingMem.ll for PR1133 Failed with exit(1) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/2008-02-20-MatchingMem.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 XXX: getRegForInlineAsmConstraint XXX: getRegForInlineAsmConstraint XXX: getRegClassForInlineAsmConstraint Could not match memory address. Inline asm failure! FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/i128- addsub.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/i128-addsub.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 Cannot yet select: 0x2000000001d78120: i64,flag = adde 0x2000000001d3c520, 0x2000000001d3c3e0, 0x2000000001d3cc00:1 FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ multiple-return-values-cross-block-with-invoke.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 Assertion failed: (0 && "Unknown type!"), function getValueType, file / dumpster/home/marcel/LLVM/src/llvm/lib/VMCore/ValueTypes.cpp, line 108. FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/nested- select.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/nested-select.ll | llc -o /dev/null -f Cannot yet select: 0x2000000001d78120: i1 = setcc 0x2000000001d3a5c0, 0x2000000001d4c2b0, 0x2000000001d08e00 FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/print- arith-fp.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/print-arith-fp.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 Cannot yet select: 0x2000000001d7dd90: i1 = setcc 0x2000000001d82100, 0x2000000001d82220, 0x2000000001d09ac0 FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/select.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/Generic/select.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 .section .text, "ax", "progbits" .align 32 .global testConsts .type testConsts, @function testConsts: alloc r3 = ar.pfs,0,0,0,0 // PSEUDO_ALLOC ;; mov ar.pfs = r3 br.ret.sptk.many rp .align 32 .global unusedBool .type unusedBool, @function unusedBool: alloc r3 = ar.pfs,0,0,0,0 // PSEUDO_ALLOC ;; mov ar.pfs = r3 br.ret.sptk.many rp .align 32 .global mergeConstants .type mergeConstants, @function mergeConstants: alloc r3 = ar.pfs,0,0,0,0 // PSEUDO_ALLOC .BB3_1: // Top (p0) brl.cond.sptk .BB3_1 // Top .BB3_2: // Next (p0) brl.cond.sptk .BB3_1 // Top .align 32 .global castconst .type castconst, @function castconst: ;; alloc r3 = ar.pfs,0,0,0,0 // PSEUDO_ALLOC adds r8 = 0, r0 ;; mov ar.pfs = r3 br.ret.sptk.many rp .align 32 .global testbool .type testbool, @function testbool: alloc r3 = ar.pfs,0,2,0,0 // PSEUDO_ALLOC .BB5_1: // Top add r8 = r32, r33 ;; adds r9 = 4, r8 ;; sxt4 r9 = r9 adds r10 = 1, r0 ;; cmp.lt p6, p0 = r9, r10 ;; (p6) brl.cond.sptk .BB5_3 // retlbl .BB5_2: // loop adds r9 = 4, r8 ;; sxt4 r9 = r9 adds r10 = 0, r0 ;; cmp.gt p6, p0 = r9, r10 ;; (p6) brl.cond.sptk .BB5_2 // loop (p0) brl.cond.sptk .BB5_1 // Top .BB5_3: // retlbl mov ar.pfs = r3 br.ret.sptk.many rp .align 32 .global castbool .type castbool, @function castbool: alloc r3 = ar.pfs,0,2,0,0 // PSEUDO_ALLOC sxt4 r9 = r33 sxt4 r10 = r32 adds r8 = 0, r0 ;; cmp.lt p6, p0 = r10, r9 ;; (p6) add r8 = 1, r8 mov ar.pfs = r3 ;; br.ret.sptk.many rp .align 32 .global boolexpr .type boolexpr, @function boolexpr: alloc r3 = ar.pfs,0,2,0,0 // PSEUDO_ALLOC sxt4 r8 = r33 adds r9 = -1, r0 cmp.ne p6, p0 = r32, r0 cmp.eq p7, p0 = r0, r0 ;; cmp.gt p8, p0 = r8, r9 (p7) cmp.eq.unc p7, p0 = r0, r0 ;; (p8) cmp.ne p7, p0 = r0, r0 (p6) cmp.eq.unc p6, p0 = r0, r0 adds r8 = 0, r0 ;; (p6) cmp.eq.unc p6, p0 = r0, r0 ;; (p7) cmp.ne p6, p0 = r0, r0 ;; (p6) add r8 = 1, r8 mov ar.pfs = r3 ;; br.ret.sptk.many rp Cannot yet select: 0x2000000001d78120: i1 = setcc 0x2000000001d44ca0, 0x2000000001d44d40, 0x2000000001d095e0 FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/X86/2007-10-04- AvoidEFLAGSCopy.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/X86/2007-10-04-AvoidEFLAGSCopy.ll | llc | not grep pushf Assertion failed: (MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) && "Invalid TRUNCATE!"), function getNode, file /dumpster/home/marcel/LLVM/src/llvm/lib/CodeGen/ SelectionDAG/SelectionDAG.cpp, line 2011. FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/X86/fold-load.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/X86/fold-load.ll | llc .ident "LLVM-ia64" .psr lsb .radix C .psr abi64 Assertion failed: (ResNo < NumValues && "Illegal result number!"), function getValueType, file /dumpster/home/marcel/LLVM/src/llvm/ include/llvm/CodeGen/SelectionDAGNodes.h, line 1220. FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/X86/memcpy-2.ll Failed with exit(1) at line 2 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/X86/memcpy-2.ll | llc -march=x86 -mattr=+sse | grep mov | count 5 count: expected 5 lines and got 6. child process exited abnormally FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/X86/memset.ll Failed with exit(1) at line 2 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/X86/memset.ll | llc -march=x86 -mattr=+sse | grep mov | count 3 count: expected 3 lines and got 5. child process exited abnormally FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/X86/pmul.ll Failed with exit(1) at line 3 while running: grep mov pmul.ll.tmp | count 8 count: expected 8 lines and got 20. child process exited abnormally FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/X86/ vec_shuffle-18.ll Failed with exit(1) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ CodeGen/X86/vec_shuffle-18.ll | llc -march=x86 -mattr=+sse2 | grep mov | count 7 count: expected 7 lines and got 9. child process exited abnormally FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/ExecutionEngine/ 2003-08-21-EnvironmentTest.ll Failed with signal(SIGABRT) at line 2 while running: lli 2003-08-21-EnvironmentTest.ll.tmp.bc > /dev/null Assertion failed: (BitWidth == RHS.BitWidth && "Comparison requires equal bit widths"), function operator==, file /dumpster/home/marcel/ LLVM/src/llvm/lib/Support/APInt.cpp, line 518. FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/Transforms/ PredicateSimplifier/2006-10-25-AddSetCC.ll Failed with exit(1) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ Transforms/PredicateSimplifier/2006-10-25-AddSetCC.ll | opt - predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | grep pass | count 2 count: expected 2 lines and got 0. Assertion failed: (validPredicate(R) && "Invalid predicate."), function update, file /dumpster/home/marcel/LLVM/src/llvm/lib/ Transforms/Scalar/PredicateSimplifier.cpp, line 701. llvm-dis: Invalid bitcode signature FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/Transforms/ PredicateSimplifier/2006-11-04-ReplacingZeros.ll Failed with signal(SIGABRT) at line 1 while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ Transforms/PredicateSimplifier/2006-11-04-ReplacingZeros.ll | opt - predsimplify -disable-output Assertion failed: (validPredicate(R) && "Invalid predicate."), function update, file /dumpster/home/marcel/LLVM/src/llvm/lib/ Transforms/Scalar/PredicateSimplifier.cpp, line 701. FYI, -- Marcel Moolenaar xcllnt at mac.com
On May 24, 2008, at 4:25 PM, Marcel Moolenaar wrote:> > On May 24, 2008, at 12:12 PM, Bill Wendling wrote: > >> Let us know if you would like extra eyes on the two PPC failures. >> Many >> of us have a lot of experience with C++. :-) Do you know where these >> allocations are? > > I don't mind if people help out, so here's some information: > > FAIL: /nfs/llvm/src/llvm/test/Transforms/PredicateSimplifier/ > 2006-11-04-ReplacingZeros.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /nfs/llvm/src/llvm/test/Transforms/ > PredicateSimplifier/2006-11-04-ReplacingZeros.ll | opt -predsimplify - > disable-output > Assertion failed: (validPredicate(R) && "Invalid predicate."), > function update, file /nfs/llvm/src/llvm/lib/Transforms/Scalar/ > PredicateSimplifier.cpp, line 702. > > xserve% Debug/bin/llvm-as < /nfs/llvm/src/llvm/test/Transforms/ > PredicateSimplifier/2006-11-04-ReplacingZeros.ll > x.bc > > xserve% gdb Debug/bin/opt > GNU gdb 6.1.1 [FreeBSD] > Copyright 2004 Free Software Foundation, Inc....> #3 0x22281d80 in __assert () from /lib/libc.so.7 > #4 0x01c34a78 in update (this=0x200c940, n=1515870810, R=1515870810, > Subtree=0x20298c0) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ > PredicateSimplifier.cpp:702 > #5 0x01c3d134 in makeEqual (this=0x7fffd550, V1=0x2009730, > V2=0x2006624) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ > PredicateSimplifier.cpp:1614...> (gdb) frame 5 > #5 0x01c3d134 in makeEqual (this=0x7fffd550, V1=0x2009730, > V2=0x2006624) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ > PredicateSimplifier.cpp:1614 > 1614 IG.node(n1)->update(NI->To, NI->LV, Top); > (gdb) p NI > $1 = ((anonymous namespace)::InequalityGraph::Edge *) 0x2036390 > (gdb) p /x *NI > $2 = {To = 0x5a5a5a5a, LV = 0x5a5a5a5a, Subtree = 0x5a5a5a5a} > (gdb) p NE > $3 = ((anonymous namespace)::InequalityGraph::Edge *) 0x203639c > (gdb) p /x *NE > $4 = {To = 0x5a5a5a5a, LV = 0x5a5a5a5a, Subtree = 0x5a5a5a5a} > > Both NI and NE are defined by the for loop: > > 1603 for (Node::iterator NI = IG.node(n)->begin(), NE > IG.node(n)->end(); > 1604 NI != NE; ++NI) { > > In this case: > > (gdb) p n > $5 = 4 > (gdb) p IG.node(n)->begin() > $12 = ((anonymous namespace)::InequalityGraph::Edge *) 0x1f59378 > (gdb) p IG.node(n)->end() > $14 = ((anonymous namespace)::InequalityGraph::Edge *) 0xa5a5a5a5 >Before it hits these "update" calls, what is the value of *NI and n? My hypothesis is that the first "update" call is invalidating the NI/ NE iterators because it's inserting things into the list. Because the SmallVector is only declared to hold 4 things, the 5th iteration (n == 4) would cause it to reallocate the internal storage. If both NI->To and n are the same, then this would cause NI (and NE) to get bad values. -bw
On May 24, 2008, at 4:25 PM, Marcel Moolenaar wrote:> On May 24, 2008, at 12:12 PM, Bill Wendling wrote: > >> Let us know if you would like extra eyes on the two PPC failures. >> Many >> of us have a lot of experience with C++. :-) Do you know where these >> allocations are? > > I don't mind if people help out, so here's some information: >Could you try this (massively hacky) patch out to see if it fixes your problem? -bw Index: lib/Transforms/Scalar/PredicateSimplifier.cpp ==================================================================--- lib/Transforms/Scalar/PredicateSimplifier.cpp (revision 51554) +++ lib/Transforms/Scalar/PredicateSimplifier.cpp (working copy) @@ -674,6 +674,15 @@ const_iterator begin() const { return Relations.begin(); } const_iterator end() const { return Relations.end(); } + Edge &operator[](unsigned Idx) { + return Relations[Idx]; + } + const Edge &operator[](unsigned Idx) const { + return Relations[Idx]; + } + + size_t size() const { return Relations.size(); } + iterator find(unsigned n, DomTreeDFS::Node *Subtree) { iterator E = end(); for (iterator I = std::lower_bound(begin(), E, n); @@ -1599,18 +1608,23 @@ for (SetVector<unsigned>::iterator I = Remove.begin(), E = Remove.end(); I != E; ++I) { unsigned n = *I; - for (Node::iterator NI = IG.node(n)->begin(), NE = IG.node(n)->end(); - NI != NE; ++NI) { - if (NI->Subtree->DominatedBy(Top)) { - if (NI->To == n1) { - assert((NI->LV & EQ_BIT) && "Node inequal to itself."); + Node *N = IG.node(n); + for (unsigned Size = N->size(), i = 0; i < Size; ++i) { + InequalityGraph::Edge *E = &(*N)[i]; + if (E->Subtree->DominatedBy(Top)) { + if (E->To == n1) { + assert((E->LV & EQ_BIT) && "Node inequal to itself."); continue; } - if (Remove.count(NI->To)) + if (Remove.count(E->To)) continue; - IG.node(NI->To)->update(n1, reversePredicate(NI->LV), Top); - IG.node(n1)->update(NI->To, NI->LV, Top); + IG.node(E->To)->update(n1, reversePredicate(E->LV), Top); + E = &(*N)[i]; + Size = N->size(); + IG.node(n1)->update(E->To, E->LV, Top); + E = &(*N)[i]; + Size = N->size(); } } }
On May 25, 2008, at 12:58 AM, Bill Wendling wrote:> On May 24, 2008, at 4:25 PM, Marcel Moolenaar wrote: > >> On May 24, 2008, at 12:12 PM, Bill Wendling wrote: >> >>> Let us know if you would like extra eyes on the two PPC failures. >>> Many >>> of us have a lot of experience with C++. :-) Do you know where these >>> allocations are? >> >> I don't mind if people help out, so here's some information: >> > Could you try this (massively hacky) patch out to see if it fixes your > problem? > > Index: lib/Transforms/Scalar/PredicateSimplifier.cpp > ==================================================================> --- lib/Transforms/Scalar/PredicateSimplifier.cpp (revision 51554) > +++ lib/Transforms/Scalar/PredicateSimplifier.cpp (working copy) > @@ -674,6 +674,15 @@ > const_iterator begin() const { return Relations.begin(); } > const_iterator end() const { return Relations.end(); } > > + Edge &operator[](unsigned Idx) { > + return Relations[Idx]; > + } > + const Edge &operator[](unsigned Idx) const { > + return Relations[Idx]; > + } > + > + size_t size() const { return Relations.size(); } > + > iterator find(unsigned n, DomTreeDFS::Node *Subtree) { > iterator E = end(); > for (iterator I = std::lower_bound(begin(), E, n); > @@ -1599,18 +1608,23 @@ > for (SetVector<unsigned>::iterator I = Remove.begin(), E > Remove.end(); > I != E; ++I) { > unsigned n = *I; > - for (Node::iterator NI = IG.node(n)->begin(), NE > IG.node(n)->end(); > - NI != NE; ++NI) { > - if (NI->Subtree->DominatedBy(Top)) { > - if (NI->To == n1) { > - assert((NI->LV & EQ_BIT) && "Node inequal to > itself."); > + Node *N = IG.node(n); > + for (unsigned Size = N->size(), i = 0; i < Size; ++i) { > + InequalityGraph::Edge *E = &(*N)[i]; > + if (E->Subtree->DominatedBy(Top)) { > + if (E->To == n1) { > + assert((E->LV & EQ_BIT) && "Node inequal to > itself."); > continue; > } > - if (Remove.count(NI->To)) > + if (Remove.count(E->To)) > continue; > > - IG.node(NI->To)->update(n1, reversePredicate(NI->LV), > Top); > - IG.node(n1)->update(NI->To, NI->LV, Top); > + IG.node(E->To)->update(n1, reversePredicate(E->LV), > Top); > + E = &(*N)[i]; > + Size = N->size(); > + IG.node(n1)->update(E->To, E->LV, Top); > + E = &(*N)[i]; > + Size = N->size(); > } > } > }Alas, it didn't fix the problem: ... gmake[3]: Entering directory `/nfs/llvm/obj/powerpc/lib/Transforms/ Scalar' llvm[3]: Compiling PredicateSimplifier.cpp for Debug build /nfs/llvm/src/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp: In constructor '<unnamed>::InequalityGraph::Edge::Edge()': /nfs/llvm/src/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:607: warning: format '%p' expects type 'void*', but argument 2 has type '<unnamed>::InequalityGraph::Edge*' llvm[3]: Building Debug Archive Library libLLVMScalarOpts.a gmake[3]: Leaving directory `/nfs/llvm/obj/powerpc/lib/Transforms/ Scalar' ... xserve% Debug/bin/opt -predsimplify -disable-output < x.bc Assertion failed: (validPredicate(R) && "Invalid predicate."), function update, file /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp, line 711. Abort (core dumped) (gdb) bt #0 0x2229ce08 in kill () from /lib/libc.so.7 #1 0x22000848 in raise () from /lib/libthr.so.3 #2 0x2229b6ec in abort () from /lib/libc.so.7 #3 0x22281d80 in __assert () from /lib/libc.so.7 #4 0x01c34b4c in update (this=0x200c940, n=1515870810, R=1515870810, Subtree=0x20298c0) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp:711 #5 0x01c3d224 in makeEqual (this=0x7fffd580, V1=0x2009730, V2=0x2006624) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp:1626 #6 0x01c3dc2c in solve (this=0x7fffd580) at /nfs/llvm/src/llvm/lib/ Transforms/Scalar/PredicateSimplifier.cpp:2165 #7 0x01c3fa70 in visitBranchInst (this=0x7fffd678, BI=@0x2006714) at / nfs/llvm/src/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:2461 #8 0x01c3fca4 in visitBr (this=0x7fffd678, I=@0x2006714) at Instruction.def:98 #9 0x01c4014c in visit (this=0x7fffd678, I=@0x2006714) at Instruction.def:98 #10 0x01c40bbc in visitInstruction (this=0x2006790, I=0x2006714, DT=0x2029800) at /nfs/llvm/src/llvm/lib/Transforms/Scalar/ PredicateSimplifier.cpp:2390 #11 0x01c40d5c in visitBasicBlock (this=0x2006790, Node=0x2029800) at / nfs/llvm/src/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:2334 #12 0x01c411cc in runOnFunction (this=0x2006790, F=@0x2006510) at /nfs/ llvm/src/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:2412 #13 0x01e84874 in llvm::FPPassManager::runOnFunction (this=0x2021080, F=@0x2006510) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1178 #14 0x01e84aac in llvm::FPPassManager::runOnModule (this=0x2021080, M=@0x20093a0) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1198 #15 0x01e8432c in llvm::MPPassManager::runOnModule (this=0x202c110, M=@0x20093a0) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1248 #16 0x01e84588 in llvm::PassManagerImpl::run (this=0x201d100, M=@0x20093a0) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1322 #17 0x01e84648 in llvm::PassManager::run (this=0x7fffdb40, M=@0x20093a0) at /nfs/llvm/src/llvm/lib/VMCore/PassManager.cpp:1354 #18 0x01a70774 in main (argc=3, argv=0x7fffdbf8) at /nfs/llvm/src/llvm/ tools/opt/opt.cpp:431 (gdb) x /x E 0x2036390: 0x5a5a5a5a (gdb) p n1 $1 = 5 (gdb) p *N $2 = {_vptr$Node = 0x5a5a5a5a, Relations = {<llvm::SmallVectorImpl<<unnamed>::InequalityGraph::Edge>> = {Begin = 0x5a5a5a5a, End = 0x5a5a5a5a, Capacity = 0x5a5a5a5a, FirstEl = 90 'Z'}, InlineElts = 'Z' <repeats 47 times>}} FYI, -- Marcel Moolenaar xcllnt at mac.com
On May 24, 2008, at 4:25 PM, Marcel Moolenaar wrote:> On May 24, 2008, at 12:12 PM, Bill Wendling wrote: >> Let us know if you would like extra eyes on the two PPC failures. >> Many >> of us have a lot of experience with C++. :-) Do you know where these >> allocations are? > > I don't mind if people help out, so here's some information:Nice!>>> My current plan is as follows: >>> o Resolve powerpc failures to bring it in line with amd64 & i386. >>> o Adding support for inline assembly for ia64 (already started) and >>> improving ia64 in general. This is longer term work... >> >> Is the lack of inline assembly the cause of the 21 regressions on >> ia64? Or is it something more systemic? > > No, not entirely. I added some debug printf's and I see them > pop up in the output, but there are more failures: > > FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/GC/ > frame_size.ll > Failed with exit(1) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/GC/frame_size.ll | llc -asm-verbose | grep {frame > size} | grep -v 0x0 > Assertion failed: (ResNo < NumValues && "Illegal result number!"), > function getValueType, file /dumpster/home/marcel/LLVM/src/llvm/ > include/llvm/CodeGen/SelectionDAGNodes.h, line 1220. > > FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > 2003-05-27-phifcmpd.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/2003-05-27-phifcmpd.ll | llcThis looks like the isel pass is creating an LD8 node with no chain result: 0x1204e00: i64 = LD8 0x1204da0 This patch should help: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20080526/062966.html This now looks like the fp compare issue below.> > > .ident "LLVM-ia64" > > .psr lsb > .radix C > .psr abi64 > Cannot yet select: 0x2000000001d76120: i1 = setcc 0x2000000001d46520, > 0x2000000001d48240, 0x2000000001d08fe0 > > FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > 2003-05-27-useboolinotherbb.llThis looks like ia64 backend isn't handling 'setune' (set if unordered or not equal), and looks like an easy place to start. Check out IA64InstrInfo.td, around line 292 for a place to start: def FCMPEQ : AForm_DAG<0x03, 0x0b, (outs PR:$dst), (ins FP:$src1, FP: $src2), "fcmp.eq $dst, p0 = $src1, $src2", [(set PR:$dst, (seteq FP:$src1, FP:$src2))]>, isF; def FCMPGT : AForm_DAG<0x03, 0x0b, (outs PR:$dst), (ins FP:$src1, FP: $src2), "fcmp.gt $dst, p0 = $src1, $src2", [(set PR:$dst, (setgt FP:$src1, FP:$src2))]>, isF; ... You probably just need another line for setune. It looks like several other FP compares are missing, you might want to make sure the full list in lib/Target/TargetSelectionDAG.td:843 is supported.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > 2003-05-27-usefsubasbool.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/2003-05-27-usefsubasbool.ll | llcSame thing.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > 2005-10-21-longlonggtu.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/2005-10-21-longlonggtu.ll | llcFixed: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20080526/062967.html> .psr lsb > .radix C > .psr abi64 > Assertion failed: (MVT::isInteger(VT) && > MVT::isInteger(Operand.getValueType()) && "Invalid TRUNCATE!"), > function getNode, file /dumpster/home/marcel/LLVM/src/llvm/lib/ > CodeGen/ > SelectionDAG/SelectionDAG.cpp, line 2011.I assume this is the same.> > > FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > 2006-04-28-Sign-extend-bool.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/2006-04-28-Sign-extend-bool.ll | llcThis should now be fixed: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20080526/062965.html> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > 2007-04-08-MultipleFrameIndices.ll for PR1308,1557 > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/2007-04-08-MultipleFrameIndices.ll | llcI get: Couldn't allocate output reg for contraint 'r'! so it looks like inline asm related.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > 2007-04-27-LargeMemObject.ll for PR1557Likewise.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > 2008-02-20-MatchingMem.ll for PR1133Likewise.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/i128- > addsub.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/i128-addsub.ll | llc > > .ident "LLVM-ia64" > > .psr lsb > .radix C > .psr abi64 > Cannot yet select: 0x2000000001d78120: i64,flag = adde > 0x2000000001d3c520, 0x2000000001d3c3e0, 0x2000000001d3cc00:1This is ia64 not supporting add/sub with carry on i64 values. This should also be relatively easy to tackle.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > multiple-return-values-cross-block-with-invoke.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll | > llcThis is ia64 not handling multiple return values correctly. The calling convention stuff should switch over to using the new "autogenerate from .td files" mechanism the other backends are now using.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/nested- > select.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/nested-select.ll | llc -o /dev/null -f > Cannot yet select: 0x2000000001d78120: i1 = setcc 0x2000000001d3a5c0, > 0x2000000001d4c2b0, 0x2000000001d08e00more missing FP comparisons.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/print- > arith-fp.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/print-arith-fp.ll | llcLikewise.> > FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/Generic/ > select.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/Generic/select.ll | llc > .ret.sptk.many rp > Cannot yet select: 0x2000000001d78120: i1 = setcc 0x2000000001d44ca0, > 0x2000000001d44d40, 0x2000000001d095e0Likewise.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/X86/2007-10-04- > AvoidEFLAGSCopy.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/X86/2007-10-04-AvoidEFLAGSCopy.ll | llc | not grep pushf > Assertion failed: (MVT::isInteger(VT) && > MVT::isInteger(Operand.getValueType()) && "Invalid TRUNCATE!"), > function getNode, file /dumpster/home/marcel/LLVM/src/llvm/lib/ > CodeGen/ > SelectionDAG/SelectionDAG.cpp, line 2011.I assume this is fixed.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/X86/fold- > load.ll > Failed with signal(SIGABRT) at line 1 > while running: llvm-as < /dumpster/home/marcel/LLVM/src/llvm/test/ > CodeGen/X86/fold-load.ll | llcThis looks like some issue with loads. The IA64 backend is doing some funky stuff with custom isel'ing various loads. It may have been required in the past, but can now probably be all moved to the .td file, cleaning up a lot of gross code in IA64ISelDAGToDAG.cpp.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/CodeGen/X86/memcpy-2.ll > Failed with exit(1) at line 2This should be fixed on mainline.> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/ExecutionEngine/ > 2003-08-21-EnvironmentTest.ll > Failed with signal(SIGABRT) at line 2 > while running: lli 2003-08-21-EnvironmentTest.ll.tmp.bc > /dev/null > Assertion failed: (BitWidth == RHS.BitWidth && "Comparison requires > equal bit widths"), function operator==, file /dumpster/home/marcel/ > LLVM/src/llvm/lib/Support/APInt.cpp, line 518.I can't repro this one. Is it trying to run the jit or is this an abort in the interpreter? Hope this helps. It looks like the remaining issues are pretty simple. -Chris
On May 27, 2008, at 9:28 PM, Chris Lattner wrote:>>>> My current plan is as follows: >>>> o Resolve powerpc failures to bring it in line with amd64 & i386.BTW: PowerPC is now inline with amd64 and powerpc. See also: http://wiki.freebsd.org/LowLevelVirtualMachine>>>> No, not entirely. I added some debug printf's and I see them >> pop up in the output, but there are more failures:[skipping valuable feedback and suggestions...]> I get: > Couldn't allocate output reg for contraint 'r'!I'm running with local mods. I implemented the 'r' constraint already. Sorry, I didn't make that clear...>> FAIL: /dumpster/home/marcel/LLVM/src/llvm/test/ExecutionEngine/ >> 2003-08-21-EnvironmentTest.ll >> Failed with signal(SIGABRT) at line 2 >> while running: lli 2003-08-21-EnvironmentTest.ll.tmp.bc > /dev/null >> Assertion failed: (BitWidth == RHS.BitWidth && "Comparison requires >> equal bit widths"), function operator==, file /dumpster/home/marcel/ >> LLVM/src/llvm/lib/Support/APInt.cpp, line 518. > > I can't repro this one. Is it trying to run the jit or is this an > abort in the interpreter?It's an abort in the interpreter. Consider the input: \begin{input} declare i32 @strlen(i8*) define i32 @main(i32 %argc.1, i8** %argv.1, i8** %envp.1) { %tmp.2 = load i8** %envp.1 ; <i8*> [#uses=1] %tmp.3 = call i32 @strlen( i8* %tmp.2 ) ; <i32> [#uses=1] %T = icmp eq i32 %tmp.3, 0 ; <i1> [#uses=1] %R = zext i1 %T to i32 ; <i32> [#uses=1] ret i32 %R } \end{input} The compare gets a 64-bit integer (the result of strlen()) and a 32-bit integer (the constant 0). This may be a problem with the input, because the call to strlen() is declared as returning an i32, but a size_t on ia64 is 64-bits. However, this would assume that the interpreter knows about it, so it may not be that simple :-) pluto2% gdb ../../Debug/bin/lli GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "ia64-marcel-freebsd"... (gdb) set args < EnvironmentTest.bc (gdb) br __assert Function "__assert" not defined. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 1 (__assert) pending. (gdb) run Starting program: /dumpster/home/marcel/LLVM/obj/ia64/Debug/bin/lli < EnvironmentTest.bc Breakpoint 2 at 0x200000004163c3b0 Pending breakpoint "__assert" resolved Breakpoint 2, 0x200000004163c3b0 in __assert () from /lib/libc.so.7 Current language: auto; currently c (gdb) bt #0 0x200000004163c3b0 in __assert () from /lib/libc.so.7 #1 0x2000000000e3c490 in llvm::APInt::operator== (this=0x9fffffffffffe7a0, RHS=@0x9fffffffffffe788) at /dumpster/home/ marcel/LLVM/src/llvm/lib/Support/APInt.cpp:518 #2 0x20000000003cb9f0 in llvm::APInt::eq (this=0x9fffffffffffe7a0, RHS=@0x9fffffffffffe788) at APInt.h:719 #3 0x20000000003931e0 in executeICMP_EQ (Src1=@0x9fffffffffffe798, Src2=@0x9fffffffffffe780, Ty=0x200000000120a300) at /dumpster/home/ marcel/LLVM/src/llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:152 #4 0x20000000003a1c60 in llvm::Interpreter::visitICmpInst (this=0x2000000001240200, I=@0x200000000122c130) at /dumpster/home/ marcel/LLVM/src/llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:286 #5 0x20000000003cd020 in llvm::InstVisitor<llvm::Interpreter, void>::visitICmp (this=0x2000000001240200, I=@0x200000000122c130) at Instruction.def:156 #6 0x20000000003cdf00 in llvm::InstVisitor<llvm::Interpreter, void>::visit (this=0x2000000001240200, I=@0x200000000122c130) at Instruction.def:156 #7 0x20000000003a35c0 in llvm::Interpreter::run (this=0x2000000001240200) at /dumpster/home/marcel/LLVM/src/llvm/lib/ ExecutionEngine/Interpreter/Execution.cpp:1338 #8 0x20000000003b01a0 in llvm::Interpreter::runFunction (this=0x2000000001240200, F=0x2000000001232230, ArgValues=@0x9fffffffffffe978) at /dumpster/home/marcel/LLVM/src/llvm/ lib/ExecutionEngine/Interpreter/Interpreter.cpp:99 #9 0x20000000003e4a80 in llvm::ExecutionEngine::runFunctionAsMain (this=0x2000000001240200, Fn=0x2000000001232230, argv=@0x2000000001132f08, envp=0x9fffffffffffeb08) at /dumpster/home/ marcel/LLVM/src/llvm/lib/ExecutionEngine/ExecutionEngine.cpp:338 #10 0x2000000000309930 in main (argc=1, argv=0x9fffffffffffeaf8, envp=0x9fffffffffffeb08) at /dumpster/home/marcel/LLVM/src/llvm/tools/ lli/lli.cpp:163 (gdb) up #1 0x2000000000e3c490 in llvm::APInt::operator== (this=0x9fffffffffffe7a0, RHS=@0x9fffffffffffe788) at /dumpster/home/ marcel/LLVM/src/llvm/lib/Support/APInt.cpp:518 518 assert(BitWidth == RHS.BitWidth && "Comparison requires equal bit widths"); Current language: auto; currently c++ (gdb) p BitWidth $1 = 64 (gdb) p RHS.BitWidth $2 = 32 (gdb) frame 3 #3 0x20000000003931e0 in executeICMP_EQ (Src1=@0x9fffffffffffe798, Src2=@0x9fffffffffffe780, Ty=0x200000000120a300) at /dumpster/home/ marcel/LLVM/src/llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:152 152 IMPLEMENT_INTEGER_ICMP(eq,Ty); (gdb) p Src1 $3 = (class llvm::GenericValue &) @0x9fffffffffffe798: {{DoubleVal = 0, FloatVal = 0, PointerVal = 0x0, UIntPairVal = {first = 0, second = 0}, Untyped = "\000\000\000\000\000\000\000"}, IntVal = {BitWidth = 64, {VAL = 10, pVal = 0xa}}} (gdb) p Src2 $4 = (class llvm::GenericValue &) @0x9fffffffffffe780: {{DoubleVal = 0, FloatVal = 0, PointerVal = 0x0, UIntPairVal = {first = 0, second = 0}, Untyped = "\000\000\000\000\000\000\000"}, IntVal = {BitWidth = 32, {VAL = 0, pVal = 0x0}}} (gdb) I decided not to worry about it. Let me know if you like to know where the 64-bit value (i.e. Src1) comes from... -- Marcel Moolenaar xcllnt at mac.com