Joseph Reddington
2012-Nov-11 12:41 UTC
[LLVMdev] Tracing nodes in selectionDAG to final code...
Hello everyone. I use this command clang -emit-llvm hello.c -c -o hello.bc llc hello.bc -march=mipsel -relocation-model=static -o hello.s to produce this MIPS code: .section .mdebug.abi32 .previous .file "hello.bc" .text .globl main .align 2 .type main, at function .set nomips16 # @main .ent main main: .cfi_startproc .frame $sp,32,$ra .mask 0x80000000,-4 .fmask 0x00000000,0 .set noreorder .set nomacro # BB#0: # %entry addiu $sp, $sp, -32 $tmp2: .cfi_def_cfa_offset 32 sw $ra, 28($sp) # 4-byte Folded Spill $tmp3: .cfi_offset 31, -4 lui $2, %hi(__gnu_local_gp) addiu $2, $2, %lo(__gnu_local_gp) sw $2, 16($sp) sw $zero, 24($sp) lui $2, %hi($.str) addiu $4, $2, %lo($.str) jal printf nop addiu $2, $zero, 0 lw $ra, 28($sp) # 4-byte Folded Reload addiu $sp, $sp, 32 jr $ra nop .set macro .set reorder .end main $tmp4: .size main, ($tmp4)-main .cfi_endproc .type $.str, at object # @.str .section .rodata.str1.1,"aMS", at progbits,1 $.str: .asciz "hello world\n" .size $.str, 13 from a simple hello world example that looks like: #include <stdio.h> int main() { printf("hello world\n"); return 0; } I use the method I talked about at (http://markmail.org/message/3micyhqjpgx7fwvv) to itterate over the nodes in the selectionDAG, the operations are effectively... -Operation EntryToken has number 0 -Operation Constant has number 1 -Operation FrameIndex has number 2 -Operation undef has number 3 -Operation store has number 4 -Operation GlobalAddress has number 5 -Operation GlobalAddress has number 6 -Operation TargetConstant has number 7 -Operation callseq_start has number 8 -Operation TargetGlobalAddress has number 9 -Operation Register has number 10 -Operation CopyToReg has number 11 -Operation RegisterMask has number 12 -Operation MipsISD::JmpLink has number 13 -Operation TargetConstant has number 14 -Operation TargetConstant has number 15 -Operation callseq_end has number 16 -Operation Register has number 17 -Operation CopyFromReg has number 18 -Operation CopyToReg has number 19 -Operation Register has number 20 -Operation MipsISD::Ret has number 21 What I'd like to know now is how I might tell which parts of MIPS each operation in the selectionDAG produced? I'm pressuming there is a specification in the filesystem somewhere and it would be great to get a pointer... Thanks Joe -- Dr Joseph Reddington Computer Science, Royal Holloway For 2012 I have a resolution to write all my email responses within 24-hours - no exceptions. If you've not had a response, there's been a misunderstanding somewhere, and it's worth reminding me.
Krzysztof Parzyszek
2012-Nov-11 12:46 UTC
[LLVMdev] Tracing nodes in selectionDAG to final code...
On 11/11/2012 6:41 AM, Joseph Reddington wrote:> > What I'd like to know now is how I might tell which parts of MIPS each > operation in the selectionDAG produced? I'm pressuming there is a > specification in the filesystem somewhere and it would be great to get > a pointer...Try -debug-only=isel. It would dump the DAG nodes from a given BB after each stage of instruction selection. -Krzysztof -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Arnold Schwaighofer
2012-Nov-11 13:04 UTC
[LLVMdev] Tracing nodes in selectionDAG to final code...
What Krzysztof said and you might want to look at lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp to see when the various stages happen during ISel (SelectionDAGISel::CodeGenAndEmitDAG()). There are also the various -view-<some>-dag flags that you can use with llc if you have dotty or graphviz installed to watch instruction lowering happening in a more graphical manner. See also http://llvm.org/docs/CodeGenerator.html#instruction-selection-section. For code and instruction lowering description specific to MIPS look in lib/Target/Mips/Mips-ISelLowering.cpp, -InstrInfo.td, and -ISelDAGToDAG.cpp. On Sun, Nov 11, 2012 at 6:41 AM, Joseph Reddington <joseph at cs.rhul.ac.uk> wrote:> Hello everyone. > > I use this command > > clang -emit-llvm hello.c -c -o hello.bc > llc hello.bc -march=mipsel -relocation-model=static -o hello.s > > to produce this MIPS code: > > .section .mdebug.abi32 > .previous > .file "hello.bc" > .text > .globl main > .align 2 > .type main, at function > .set nomips16 # @main > .ent main > main: > .cfi_startproc > .frame $sp,32,$ra > .mask 0x80000000,-4 > .fmask 0x00000000,0 > .set noreorder > .set nomacro > # BB#0: # %entry > addiu $sp, $sp, -32 > $tmp2: > .cfi_def_cfa_offset 32 > sw $ra, 28($sp) # 4-byte Folded Spill > $tmp3: > .cfi_offset 31, -4 > lui $2, %hi(__gnu_local_gp) > addiu $2, $2, %lo(__gnu_local_gp) > sw $2, 16($sp) > sw $zero, 24($sp) > lui $2, %hi($.str) > addiu $4, $2, %lo($.str) > jal printf > nop > addiu $2, $zero, 0 > lw $ra, 28($sp) # 4-byte Folded Reload > addiu $sp, $sp, 32 > jr $ra > nop > .set macro > .set reorder > .end main > $tmp4: > .size main, ($tmp4)-main > .cfi_endproc > > .type $.str, at object # @.str > .section .rodata.str1.1,"aMS", at progbits,1 > $.str: > .asciz "hello world\n" > .size $.str, 13 > > > > from a simple hello world example that looks like: > > > #include <stdio.h> > > int main() { > printf("hello world\n"); > return 0; > } > > > I use the method I talked about at > (http://markmail.org/message/3micyhqjpgx7fwvv) to itterate over the > nodes in the selectionDAG, the operations are effectively... > > -Operation EntryToken has number 0 > -Operation Constant has number 1 > -Operation FrameIndex has number 2 > -Operation undef has number 3 > -Operation store has number 4 > -Operation GlobalAddress has number 5 > -Operation GlobalAddress has number 6 > -Operation TargetConstant has number 7 > -Operation callseq_start has number 8 > -Operation TargetGlobalAddress has number 9 > -Operation Register has number 10 > -Operation CopyToReg has number 11 > -Operation RegisterMask has number 12 > -Operation MipsISD::JmpLink has number 13 > -Operation TargetConstant has number 14 > -Operation TargetConstant has number 15 > -Operation callseq_end has number 16 > -Operation Register has number 17 > -Operation CopyFromReg has number 18 > -Operation CopyToReg has number 19 > -Operation Register has number 20 > -Operation MipsISD::Ret has number 21 > > What I'd like to know now is how I might tell which parts of MIPS each > operation in the selectionDAG produced? I'm pressuming there is a > specification in the filesystem somewhere and it would be great to get > a pointer... > > Thanks > > Joe > > > > > > -- > Dr Joseph Reddington > Computer Science, Royal Holloway > For 2012 I have a resolution to write all my email responses within > 24-hours - no exceptions. If you've not had a response, there's been a > misunderstanding somewhere, and it's worth reminding me. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Possibly Parallel Threads
- [LLVMdev] Mips backend -- Incorrect globaladdr/constpool address generation when bit 15 of address is set?
- [LLVMdev] backend problem with LiveInterval::removeRange
- [LLVMdev] Is va_arg correct on Mips backend?
- [LLVMdev] Is va_arg correct on Mips backend?
- [LLVMdev] Problem with PTX assembly printing (NVPTX backend)