[llvm-dev] DragonEgg for GCC v8.x and LLVM v6.x is just able to work
Tobias Grosser via llvm-dev
llvm-dev at lists.llvm.org
Mon Aug 21 03:42:30 PDT 2017
On Mon, Aug 21, 2017, at 05:31, Leslie Zhai via llvm-dev wrote:
> Hi LLVM and GCC developers,
>
> My sincere thanks will goto:
>
> * Duncan, the core developer of llvm-gcc and dragonegg
> http://llvm.org/devmtg/2009-10/Sands_LLVMGCCPlugin.pdf
>
> * David, the innovator and developer of GCC
> https://dmalcolm.fedorapeople.org/gcc/global-state/requirements.html
>
> and others who give me kind response for teaching me patiently and
> carefully about how to migrate GCC v4.8.x to GCC v8.x (git-20170818)
>
> DragonEgg has been migrated to GCC v8.x and LLVM v6.x (svn-r311142), but
> also able to work for GCC v4.8.x and LLVM v3.3
> https://reviews.llvm.org/D35667 and it is just able to work now, for
> example:
Very interesting. We are still using dragonegg to process our weather
modeling codes here at ETH / CSCS. Having it updated to work with latest
LLVM will provide us with a current baseline which will also be helpful
to evaluate flang further. Thanks a lot for your effort.
Best,
Tobias
PS: Would be great to have a flang update on the mailing list as well. I
will ask for this in a separate email.
>
>
> $CC -fplugin=./dragonegg.so \
> -fplugin-arg-dragonegg-debug-pass-arguments \
> -ftime-report \
> -fverbose-asm \
> -fplugin-arg-dragonegg-enable-gcc-optzns \
> -fplugin-arg-dragonegg-emit-ir \
> -S \
> test/hello.c \
> -wrapper gdb,--args
>
>
> hello.s (LLVM IR, the extension name is not important)
>
> ; ModuleID = 'test/hello.c'
> source_filename = "test/hello.c"
> target triple = "x86_64-redhat-linux"
>
> module asm "\09.ident\09\22GCC: (GNU) 6.4.1 20170727 (Red Hat 6.4.1-1)
> LLVM: 3.9.1\22"
>
> @__func__.2210 = internal local_unnamed_addr constant [4 x i8] c"foo\00"
> @.cst = private local_unnamed_addr constant [24 x i8] c"DEBUG: %s, line
> %d: %s\0A\00", align 8
> @.cst.1 = private local_unnamed_addr constant [13 x i8]
> c"test/hello.c\00", align 8
> @.cst.2 = private local_unnamed_addr constant [12 x i8] c"Leslie
> Zhai\00", align 8
> @.cst.3 = private local_unnamed_addr constant [20 x i8] c"%s: Hello
> World %d\0A\00", align 8
>
> ; Function Attrs: nounwind uwtable
> define void @foo(...) unnamed_addr #0 {
> entry:
> %"ssa point" = bitcast i32 0 to i32
> br label %"<bb 2>"
>
> "<bb 2>": ; preds = %entry
> %0 = call i32 (i8*, ...) @printf(i8* noalias getelementptr inbounds
> ([24 x i8], [24 x i8]* @.cst, i64 0, i64 0), [13 x i8]* @.cst.1, i32 4,
> [4 x i8]* @__func__.2210) #1
> br label %return
>
> return: ; preds = %"<bb 2>"
> ret void
> }
>
> declare i32 @printf(i8*, ...)
>
> ; Function Attrs: nounwind uwtable
> define i32 @main(i32 %argc, i8** %argv) unnamed_addr #0 {
> entry:
> %argc_addr = alloca i32, align 4
> %argv_addr = alloca i8**, align 8
> %n = alloca i32
> %s = alloca i8*
> %"<retval>" = alloca i32
> %"alloca point" = bitcast i32 0 to i32
> store i32 %argc, i32* %argc_addr, align 1
> store i8** %argv, i8*** %argv_addr, align 1
> %"ssa point" = bitcast i32 0 to i32
> br label %"<bb 2>"
>
> "<bb 2>": ; preds = %entry
> %0 = call i32 (i8*, ...) @printf(i8* noalias getelementptr inbounds
> ([20 x i8], [20 x i8]* @.cst.3, i64 0, i64 0), i8* getelementptr
> inbounds ([12 x i8], [12 x i8]* @.cst.2, i64 0, i64 0), i32 1) #1
> br label %"<L0>"
>
> "<L0>": ; preds = %"<bb 2>"
> store i32 0, i32* %"<retval>", align 1
> br label %return
>
> return: ; preds = %"<L0>"
> %1 = load i32, i32* %"<retval>", align 4
> ret i32 %1
> }
>
> attributes #0 = { nounwind uwtable
> "no-frame-pointer-elim-non-leaf"="true" }
> attributes #1 = { nounwind }
>
> !llvm.module.flags = !{!0}
>
> !0 = !{i32 1, !"PIE Level", i32 2}
>
>
> $ llc hello.s
>
> .text
> .file "hello.s"
> # Start of file scope inline
> assembly
> .ident "GCC: (GNU) 6.4.1 20170727 (Red Hat 6.4.1-1) LLVM: 3.9.1"
>
> # End of file scope inline
> assembly
> .globl foo
> .p2align 4, 0x90
> .type foo, at function
> foo: # @foo
> .cfi_startproc
> # BB#0: # %entry
> pushq %rbp
> .Ltmp0:
> .cfi_def_cfa_offset 16
> .Ltmp1:
> .cfi_offset %rbp, -16
> movq %rsp, %rbp
> .Ltmp2:
> .cfi_def_cfa_register %rbp
> movl $.L.cst, %edi
> movl $.L.cst.1, %esi
> movl $4, %edx
> movl $__func__.2210, %ecx
> xorl %eax, %eax
> callq printf
> popq %rbp
> retq
> .Lfunc_end0:
> .size foo, .Lfunc_end0-foo
> .cfi_endproc
>
> .globl main
> .p2align 4, 0x90
> .type main, at function
> main: # @main
> .cfi_startproc
> # BB#0: # %entry
> pushq %rbp
> .Ltmp3:
> .cfi_def_cfa_offset 16
> .Ltmp4:
> .cfi_offset %rbp, -16
> movq %rsp, %rbp
> .Ltmp5:
> .cfi_def_cfa_register %rbp
> subq $32, %rsp
> movl %edi, -8(%rbp)
> movq %rsi, -16(%rbp)
> movl $.L.cst.3, %edi
> movl $.L.cst.2, %esi
> movl $1, %edx
> xorl %eax, %eax
> callq printf
> movl $0, -4(%rbp)
> movl -4(%rbp), %eax
> addq $32, %rsp
> popq %rbp
> retq
> .Lfunc_end1:
> .size main, .Lfunc_end1-main
> .cfi_endproc
>
> .type __func__.2210, at object # @__func__.2210
> .section .rodata,"a", at progbits
> __func__.2210:
> .asciz "foo"
> .size __func__.2210, 4
>
> .type .L.cst, at object # @.cst
> .p2align 3
> .L.cst:
> .asciz "DEBUG: %s, line %d: %s\n"
> .size .L.cst, 24
>
> .type .L.cst.1, at object # @.cst.1
> .p2align 3
> .L.cst.1:
> .asciz "test/hello.c"
> .size .L.cst.1, 13
>
> .type .L.cst.2, at object # @.cst.2
> .p2align 3
> .L.cst.2:
> .asciz "Leslie Zhai"
> .size .L.cst.2, 12
>
> .type .L.cst.3, at object # @.cst.3
> .p2align 3
> .L.cst.3:
> .asciz "%s: Hello World %d\n"
> .size .L.cst.3, 20
>
>
> .section ".note.GNU-stack","", at progbits
>
>
> $ clang hello.s.s
>
> $ ./a.out
>
> Leslie Zhai: Hello World 1
>
>
> WIP:
>
> * fix issues https://github.com/xiangzhai/dragonegg/issues
>
> * gengtype not support macro
> https://gcc.gnu.org/ml/gcc/2017-07/msg00045.html
>
> --
> Regards,
> Leslie Zhai - a LLVM developer https://reviews.llvm.org/p/xiangzhai/
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the llvm-dev
mailing list