[LLVMdev] Help with error in pass

Fernando Magno Quintao Pereira fernando at CS.UCLA.EDU
Fri Jun 23 16:53:35 PDT 2006


Dear LLVM guys,

    I am getting an error with my pass implementation, and I cannot figure
it out. Basically, I've implemented part of a register allocation
algorithm, but I am having problems to set the passes correctly. For
instance, for this program below, the following error message is
produced:

.c ----------------------|     .bc ---------------------------------
                         |     Live Outs: EAX
                         |
#include <stdio.h>       |     entry (0x8d4c6c0, LLVM BB @0x8d46970):
                         |     FNSTCW16m <fi#0>, 1, %NOREG, 0
int main() {             |     MOV8mi <fi#0>, 1, %NOREG, 1, 2
    return 0;            |     FLDCW16m <fi#0>, 1, %NOREG, 0
}                        |     %reg1024 = MOV32r0
                         |     %EAX = MOV32rr %reg1024
                         |     RET

llc((anonymous namespace)::PrintStackTrace()+0x18)[0x88cfa30]
llc((anonymous namespace)::SignalHandler(int)+0x107)[0x88cfcc1]
/lib/tls/libc.so.6[0x239f48]
llc(llvm::MachineFunctionPass::runOnFunction(llvm::Function&)+0x28)[0x8400638]
llc(llvm::FunctionPassManagerT::runPass(llvm::FunctionPass*,
llvm::Function*)+0x1b)[0x8857349]
llc(llvm::PassManagerT<llvm::FTraits>::runPasses(llvm::Function*,
std::map<llvm::Pass*, std::vector<llvm::Pass*, std::allocator<llvm::Pass*>
>, std::less<llvm::Pass*>, std::allocator<std::pair<llvm::Pass* const,
std::vector<llvm::Pass*, std::allocator<llvm::Pass*> > > >
>&)+0x11c)[0x8858bca]
llc(llvm::PassManagerT<llvm::FTraits>::runOnUnit(llvm::Function*)+0x16f)[0x885865f]
llc(llvm::FunctionPassManagerT::runOnFunction(llvm::Function&)+0x22)[0x8858e84]
llc(llvm::FunctionPass::runOnModule(llvm::Module&)+0xa6)[0x8854bd2]
llc(llvm::ModulePassManager::runPass(llvm::ModulePass*,
llvm::Module*)+0x1b)[0x8857541]
llc(llvm::PassManagerT<llvm::MTraits>::runPasses(llvm::Module*,
std::map<llvm::Pass*, std::vector<llvm::Pass*, std::allocator<llvm::Pass*>
>, std::less<llvm::Pass*>, std::allocator<std::pair<llvm::Pass* const,
std::vector<llvm::Pass*, std::allocator<llvm::Pass*> > > >
>&)+0x11c)[0x88596cc]
llc(llvm::PassManagerT<llvm::MTraits>::runOnUnit(llvm::Module*)+0x16f)[0x8859161]
llc(llvm::ModulePassManager::runOnModule(llvm::Module&)+0x22)[0x8853bea]
llc(llvm::PassManager::run(llvm::Module&)+0x1f)[0x8853f81]
llc(main+0xee2)[0x83d36ea]
/lib/tls/libc.so.6(__libc_start_main+0xe4)[0x227ad4]
llc[0x83d2779]
Segmentation fault (core dumped)
------------------------------------------------------------------------------

My allocator is assigning EAX to %reg1024, and this is exactly what any of
the LLVM built-in allocators do. The list of passes that I am invoking is
as follows:

Pass Arguments:  -verify -loopsimplify -loop-reduce -lowergc -lowerinvoke
-unreachableblockelim
Target Data Layout
Debug Information
Module Pass Manager
  Function Pass Manager
    Immediate Dominators Construction
    ET Forest Construction
    Module Verifier
--  Module Verifier
    Natural Loop Construction
    Dominator Set Construction
    Dominator Tree Construction
--  Immediate Dominators Construction
    Canonicalize natural loops
--  Dominator Set Construction
--  Dominator Tree Construction
    Scalar Evolution Analysis
    Loop Strength Reduction
--  ET Forest Construction
--  Scalar Evolution Analysis
--  Canonicalize natural loops
--  Loop Strength Reduction
--  Natural Loop Construction
    Lower GC intrinsics, for GCless code generators
--  Lower GC intrinsics, for GCless code generators
    Lower invoke and unwind, for unwindless code generators
--  Lower invoke and unwind, for unwindless code generators
    Remove unreachable blocks from the CFG
--  Remove unreachable blocks from the CFG
    X86 DAG->DAG Instruction Selection
--  X86 DAG->DAG Instruction Selection
**************** Due to my register allocator *******************
    Immediate Dominators Construction
    ET Forest Construction
--  Immediate Dominators Construction
    Natural Loop Construction
--  ET Forest Construction
    Virtual to def/use mapping - Fernando.
--  Natural Loop Construction
    Edge liveness analyses - Fernando.
    Register allocation via coloring of chordal graphs.
--  Register allocation via coloring of chordal graphs.
--  Virtual to def/use mapping - Fernando.
--  Edge liveness analyses - Fernando.
*****************************************************************
    Live Variable Analysis
    X86 FP Stackifier
--  X86 FP Stackifier
--  Live Variable Analysis
    Prolog/Epilog Insertion & Frame Finalization
--  Prolog/Epilog Insertion & Frame Finalization
    X86 AT&T-Style Assembly Printer
--  X86 AT&T-Style Assembly Printer
    Machine Code Deleter
--  Machine Code Deleter

Could some one tell me what is(are) the most likely reason(s) for this
error? I would really appreciate any help,

Thanks a lot,

Fernando



More information about the llvm-dev mailing list