[LLVMdev] Help with error in pass

Chris Lattner sabre at nondot.org
Fri Jun 23 20:35:34 PDT 2006


On Fri, 23 Jun 2006, Fernando Magno Quintao Pereira wrote:
>    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:

It's hard to say without more details, i.e. a stack trace in gdb.  What 
pass is it crashing in, for example?

-Chris

> .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
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/



More information about the llvm-dev mailing list