On Tuesday, 21 February 2017 12:23:44 UTC-5, Arpit Aggarwal wrote:
>
> I am doing a project in which I need Go compiler's intermediate 
> representation(IR) (which is semantics preserving and I can get all all 
> info like line number and data type and other features) (human readable) to 
> convert to another IR of a tool.
>

The most convenient way to access the semantics of a Go program is to use 
the golang.org/x/tools/go/ssa package, which builds a high-level SSA-based 
intermediate representation.

$ cat fib.go
package fib

func fib(x int) int {
        if x < 2 {
                return x
        }
        return fib(x-2) + fib(x-1)
}

$ go build golang.org/x/tools/cmd/ssadump
$ ./ssadump -build=F fib.go
# Name: fib.fib
# Package: fib
# Location: fib.go:3:6
func fib(x int) int:
0:                                                                entry P:0 
S:2
        t0 = x < 2:int                                                     
bool
        if t0 goto 1 else 2
1:                                                              if.then P:1 
S:0
        return x
2:                                                              if.done P:1 
S:0
        t1 = x - 2:int                                                     
 int
        t2 = fib(t1)                                                       
 int
        t3 = x - 1:int                                                     
 int
        t4 = fib(t3)                                                       
 int
        t5 = t2 + t4                                                       
 int
        return t5

# Name: fib.init
# Package: fib
# Synthetic: package initializer
func init():
0:                                                                entry P:0 
S:2
        t0 = *init$guard                                                   
bool
        if t0 goto 2 else 1
1:                                                           init.start P:1 
S:1
        *init$guard = true:bool
        jump 2
2:                                                            init.done P:2 
S:0
        return

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to