[LLVMdev] PHI
reed kotler
rkotler at mips.com
Wed Aug 29 20:45:47 PDT 2012
I'm getting this error in my mips16 port. I think that PHI replacement
is done in some target independent phase. In the process of debugging
this. Maybe to someone else it's obvious how this can happen .
tia,
Reed
*** Bad machine code: MBB exits via unconditional fall-through but its
successor differs from its CFG successor! ***
- function: main
- basic block: BB#0 entry (0x2412320)
*** Bad machine code: PHI operand is not in the CFG ***
- function: main
- basic block: BB#0 entry (0x2412320)
- instruction: PHI <BB#1>
- operand 0: <BB#1>
LLVM ERROR: Found 2 machine code errors.
....
From trace:
0. Program arguments: /home/rkotler/llvmpb/install/bin/llc
-mcpu=mips16 forloop1.ll -march=mipsel -relocation-model=pic -o
forloop1.s -O3
1. Running pass 'Function Pass Manager' on module 'forloop1.ll'.
2. Running pass 'Mips Assembly Printer' on function '@main'
Aborted
rkotler at ubuntu-rkotler:~/workspace/llvm_base_test/src$
/home/rkotler/llvmpb/install/bin/llc -mcpu=mips16 forloop1.ll
-march=mipsel -relocation-model=pic -o forloop1.s -O3
-verify-machineinstrs -verify-loop-info -verify-dom-info
-verify-regalloc
# After machine block placement.
# Machine code for function main: Post SSA
Frame Objects:
fi#0: size=4, align=4, at location [SP-8]
fi#1: size=4, align=4, at location [SP-12]
fi#2: size=4, align=4, at location [SP-4]
Function Live Outs: %V0
BB#0: derived from LLVM BB %entry
%V0<def> = LiRxImmX16 <es:_gp_disp>[TF=5]
SaveRaF16 32
%V1<def> = AddiuRxPcImmX16 <es:_gp_disp>[TF=6]
%V0<def> = SllX16 %V0<kill>, 16
%S0<def> = AdduRxRyRz16 %V1<kill>, %V0<kill>
%V0<def> = LiRxImmX16 0
SwRxRyOffMemX16 %V0, %SP, 24; mem:ST4[%retval]
SwRxRyOffMemX16 %V0<kill>, %SP, 20; mem:ST4[%i]
PHI <BB#1>
Successors according to CFG: BB#1
BB#2: derived from LLVM BB %for.body
Live Ins: %S0
Predecessors according to CFG: BB#1
%A0<def> = LwRxRyOffMemX16 %S0, <ga:@.str>[TF=2]; mem:LD4[<unknown>]
%V0<def> = LwRxRyOffMemX16 %S0, <ga:@printf>[TF=3]; mem:LD4[GOT]
%A1<def> = LwRxRyOffMemX16 %SP, 20; mem:LD4[%i]
%T9<def> = Move32R16 %V0
%A0<def,tied> = AddiuRxRxImmX16 %A0<tied>, <ga:@.str>[TF=6]
%GP<def> = Move32R16 %S0
JumpLinkReg16 %V0<kill>, <regmask>, %A0<imp-use,kill>,
%A1<imp-use,kill>, %GP<imp-use,kill>, %T9<imp-use,kill>, %SP<imp-def>,
%V0<imp-def,dead>
%V0<def> = LwRxRyOffMemX16 %SP, 20; mem:LD4[%i]
%V0<def,tied> = AddiuRxRxImmX16 %V0<tied>, 1
SwRxRyOffMemX16 %V0<kill>, %SP, 20; mem:ST4[%i]
BimmX16 <BB#1>
Successors according to CFG: BB#1
BB#1: derived from LLVM BB %for.cond
Live Ins: %S0
Predecessors according to CFG: BB#0 BB#2
%V0<def> = LwRxRyOffMemX16 %SP, 20; mem:LD4[%i]
%V1<def> = LiRxImmX16 9
BtnezT8SltX16 %V1<kill>, %V0<kill>, <BB#3>
BimmX16 <BB#2>
Successors according to CFG: BB#2(124) BB#3(4)
BB#3: derived from LLVM BB %for.end
Predecessors according to CFG: BB#1
%V0<def> = LwRxRyOffMemX16 %SP, 24; mem:LD4[%retval]
%S0<def> = LwRxSpImmX16 %SP, 28; mem:LD4[FixedStack2]
RestoreRaF16 32
JrRa16
# End machine code for function main.
More information about the llvm-dev
mailing list