github.com/llir/llvm@v0.3.6/example.go (about)

     1  package llvm
     2  
     3  import (
     4  	"log"
     5  
     6  	"github.com/kr/pretty"
     7  	"github.com/llir/llvm/asm"
     8  )
     9  
    10  func Example() {
    11  	// Parse the LLVM IR assembly file `rand.ll`.
    12  	m, err := asm.ParseFile("testdata/rand.ll")
    13  	if err != nil {
    14  		log.Fatalf("%+v", err)
    15  	}
    16  	// Pretty-print the data types of the parsed LLVM IR module.
    17  	pretty.Println(m)
    18  	// Output:
    19  	//
    20  	// &ir.Module{
    21  	//     TypeDefs: nil,
    22  	//     Globals:  {
    23  	//         &ir.Global{
    24  	//             GlobalIdent: ir.GlobalIdent{GlobalName:"seed", GlobalID:0},
    25  	//             Immutable:   false,
    26  	//             ContentType: &types.IntType{TypeName:"", BitSize:0x20},
    27  	//             Init:        &constant.Int{
    28  	//                 Typ: &types.IntType{(CYCLIC REFERENCE)},
    29  	//                 X:   &big.Int{},
    30  	//             },
    31  	//             Typ: &types.PointerType{
    32  	//                 TypeName:  "",
    33  	//                 ElemType:  &types.IntType{(CYCLIC REFERENCE)},
    34  	//                 AddrSpace: 0x0,
    35  	//             },
    36  	//             Linkage:               0x0,
    37  	//             Preemption:            0x0,
    38  	//             Visibility:            0x0,
    39  	//             DLLStorageClass:       0x0,
    40  	//             TLSModel:              0x0,
    41  	//             UnnamedAddr:           0x0,
    42  	//             AddrSpace:             0x0,
    43  	//             ExternallyInitialized: false,
    44  	//             Section:               "",
    45  	//             Partition:             "",
    46  	//             Comdat:                (*ir.ComdatDef)(nil),
    47  	//             Align:                 0x0,
    48  	//             FuncAttrs:             nil,
    49  	//             Metadata:              nil,
    50  	//         },
    51  	//     },
    52  	//     Funcs: {
    53  	//         &ir.Func{
    54  	//             GlobalIdent: ir.GlobalIdent{GlobalName:"abs", GlobalID:0},
    55  	//             Sig:         &types.FuncType{
    56  	//                 TypeName: "",
    57  	//                 RetType:  &types.IntType{TypeName:"", BitSize:0x20},
    58  	//                 Params:   {
    59  	//                     &types.IntType{TypeName:"", BitSize:0x20},
    60  	//                 },
    61  	//                 Variadic: false,
    62  	//             },
    63  	//             Params: {
    64  	//                 &ir.Param{
    65  	//                     LocalIdent: ir.LocalIdent{LocalName:"x", LocalID:0},
    66  	//                     Typ:        &types.IntType{TypeName:"", BitSize:0x20},
    67  	//                     Attrs:      nil,
    68  	//                 },
    69  	//             },
    70  	//             Blocks: nil,
    71  	//             Typ:    &types.PointerType{
    72  	//                 TypeName:  "",
    73  	//                 ElemType:  &types.FuncType{(CYCLIC REFERENCE)},
    74  	//                 AddrSpace: 0x0,
    75  	//             },
    76  	//             Linkage:         0x0,
    77  	//             Preemption:      0x0,
    78  	//             Visibility:      0x0,
    79  	//             DLLStorageClass: 0x0,
    80  	//             CallingConv:     0x0,
    81  	//             ReturnAttrs:     nil,
    82  	//             UnnamedAddr:     0x0,
    83  	//             AddrSpace:       0x0,
    84  	//             FuncAttrs:       nil,
    85  	//             Section:         "",
    86  	//             Partition:       "",
    87  	//             Comdat:          (*ir.ComdatDef)(nil),
    88  	//             Align:           0x0,
    89  	//             GC:              "",
    90  	//             Prefix:          nil,
    91  	//             Prologue:        nil,
    92  	//             Personality:     nil,
    93  	//             UseListOrders:   nil,
    94  	//             Metadata:        nil,
    95  	//             Parent:          &ir.Module{(CYCLIC REFERENCE)},
    96  	//             mu:              sync.Mutex{},
    97  	//         },
    98  	//         &ir.Func{
    99  	//             GlobalIdent: ir.GlobalIdent{GlobalName:"rand", GlobalID:0},
   100  	//             Sig:         &types.FuncType{
   101  	//                 TypeName: "",
   102  	//                 RetType:  &types.IntType{TypeName:"", BitSize:0x20},
   103  	//                 Params:   nil,
   104  	//                 Variadic: false,
   105  	//             },
   106  	//             Params: nil,
   107  	//             Blocks: {
   108  	//                 &ir.Block{
   109  	//                     LocalIdent: ir.LocalIdent{},
   110  	//                     Insts:      {
   111  	//                         &ir.InstLoad{
   112  	//                             LocalIdent: ir.LocalIdent{LocalName:"", LocalID:1},
   113  	//                             ElemType:   &types.IntType{TypeName:"", BitSize:0x20},
   114  	//                             Src:        &ir.Global{(CYCLIC REFERENCE)},
   115  	//                             Atomic:     false,
   116  	//                             Volatile:   false,
   117  	//                             SyncScope:  "",
   118  	//                             Ordering:   0x0,
   119  	//                             Align:      0x0,
   120  	//                             Metadata:   nil,
   121  	//                         },
   122  	//                         &ir.InstMul{
   123  	//                             LocalIdent: ir.LocalIdent{LocalName:"", LocalID:2},
   124  	//                             X:          &ir.InstLoad{(CYCLIC REFERENCE)},
   125  	//                             Y:          &constant.Int{
   126  	//                                 Typ: &types.IntType{(CYCLIC REFERENCE)},
   127  	//                                 X:   &big.Int{
   128  	//                                     neg: false,
   129  	//                                     abs: {0x15a4e35},
   130  	//                                 },
   131  	//                             },
   132  	//                             Typ:           &types.IntType{TypeName:"", BitSize:0x20},
   133  	//                             OverflowFlags: nil,
   134  	//                             Metadata:      nil,
   135  	//                         },
   136  	//                         &ir.InstAdd{
   137  	//                             LocalIdent: ir.LocalIdent{LocalName:"", LocalID:3},
   138  	//                             X:          &ir.InstMul{(CYCLIC REFERENCE)},
   139  	//                             Y:          &constant.Int{
   140  	//                                 Typ: &types.IntType{(CYCLIC REFERENCE)},
   141  	//                                 X:   &big.Int{
   142  	//                                     neg: false,
   143  	//                                     abs: {0x1},
   144  	//                                 },
   145  	//                             },
   146  	//                             Typ:           &types.IntType{TypeName:"", BitSize:0x20},
   147  	//                             OverflowFlags: nil,
   148  	//                             Metadata:      nil,
   149  	//                         },
   150  	//                         &ir.InstStore{
   151  	//                             Src:       &ir.InstAdd{(CYCLIC REFERENCE)},
   152  	//                             Dst:       &ir.Global{(CYCLIC REFERENCE)},
   153  	//                             Atomic:    false,
   154  	//                             Volatile:  false,
   155  	//                             SyncScope: "",
   156  	//                             Ordering:  0x0,
   157  	//                             Align:     0x0,
   158  	//                             Metadata:  nil,
   159  	//                         },
   160  	//                         &ir.InstCall{
   161  	//                             LocalIdent: ir.LocalIdent{LocalName:"", LocalID:4},
   162  	//                             Callee:     &ir.Func{(CYCLIC REFERENCE)},
   163  	//                             Args:       {
   164  	//                                 &ir.InstAdd{(CYCLIC REFERENCE)},
   165  	//                             },
   166  	//                             Typ:            &types.IntType{TypeName:"", BitSize:0x20},
   167  	//                             Tail:           0x0,
   168  	//                             FastMathFlags:  nil,
   169  	//                             CallingConv:    0x0,
   170  	//                             ReturnAttrs:    nil,
   171  	//                             AddrSpace:      0x0,
   172  	//                             FuncAttrs:      nil,
   173  	//                             OperandBundles: nil,
   174  	//                             Metadata:       nil,
   175  	//                         },
   176  	//                     },
   177  	//                     Term: &ir.TermRet{
   178  	//                         X:  &ir.InstCall{
   179  	//                             LocalIdent: ir.LocalIdent{LocalName:"", LocalID:4},
   180  	//                             Callee:     &ir.Func{(CYCLIC REFERENCE)},
   181  	//                             Args:       {
   182  	//                                 &ir.InstAdd{(CYCLIC REFERENCE)},
   183  	//                             },
   184  	//                             Typ:            &types.IntType{TypeName:"", BitSize:0x20},
   185  	//                             Tail:           0x0,
   186  	//                             FastMathFlags:  nil,
   187  	//                             CallingConv:    0x0,
   188  	//                             ReturnAttrs:    nil,
   189  	//                             AddrSpace:      0x0,
   190  	//                             FuncAttrs:      nil,
   191  	//                             OperandBundles: nil,
   192  	//                             Metadata:       nil,
   193  	//                         },
   194  	//                         Metadata: nil,
   195  	//                     },
   196  	//                     Parent: &ir.Func{(CYCLIC REFERENCE)},
   197  	//                 },
   198  	//             },
   199  	//             Typ: &types.PointerType{
   200  	//                 TypeName:  "",
   201  	//                 ElemType:  &types.FuncType{(CYCLIC REFERENCE)},
   202  	//                 AddrSpace: 0x0,
   203  	//             },
   204  	//             Linkage:         0x0,
   205  	//             Preemption:      0x0,
   206  	//             Visibility:      0x0,
   207  	//             DLLStorageClass: 0x0,
   208  	//             CallingConv:     0x0,
   209  	//             ReturnAttrs:     nil,
   210  	//             UnnamedAddr:     0x0,
   211  	//             AddrSpace:       0x0,
   212  	//             FuncAttrs:       nil,
   213  	//             Section:         "",
   214  	//             Partition:       "",
   215  	//             Comdat:          (*ir.ComdatDef)(nil),
   216  	//             Align:           0x0,
   217  	//             GC:              "",
   218  	//             Prefix:          nil,
   219  	//             Prologue:        nil,
   220  	//             Personality:     nil,
   221  	//             UseListOrders:   nil,
   222  	//             Metadata:        nil,
   223  	//             Parent:          &ir.Module{(CYCLIC REFERENCE)},
   224  	//             mu:              sync.Mutex{},
   225  	//         },
   226  	//     },
   227  	//     SourceFilename:    "",
   228  	//     DataLayout:        "",
   229  	//     TargetTriple:      "",
   230  	//     ModuleAsms:        nil,
   231  	//     ComdatDefs:        nil,
   232  	//     Aliases:           nil,
   233  	//     IFuncs:            nil,
   234  	//     AttrGroupDefs:     nil,
   235  	//     NamedMetadataDefs: {
   236  	//     },
   237  	//     MetadataDefs:    nil,
   238  	//     UseListOrders:   nil,
   239  	//     UseListOrderBBs: nil,
   240  	// }
   241  }