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 }