Advertisement
Guest User

ir segfault

a guest
Mar 22nd, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
LLVM 3.79 KB | None | 0 0
  1. ; ModuleID = 'test.bc'
  2. source_filename = "test"
  3.  
  4. %test.Node = type { i32, %test.OptionalNode }
  5. %test.OptionalNode = type { i8, [8 x i8] }
  6. %test.OptionalNode.nil = type { i8 }
  7. %test.OptionalNode.some = type { i8, %test.Node* }
  8.  
  9. declare i32 @printf(i8*, ...)
  10.  
  11. define void @"test.Node.!ctor$[test.Node]i[test.OptionalNode]"(%test.Node* %this, i32 %_value, %test.OptionalNode %_next) {
  12. entry:
  13.   %arg0 = alloca %test.Node*
  14.   store %test.Node* %this, %test.Node** %arg0
  15.   %arg1 = alloca i32
  16.   store i32 %_value, i32* %arg1
  17.   %arg2 = alloca %test.OptionalNode
  18.   store %test.OptionalNode %_next, %test.OptionalNode* %arg2
  19.   %ldarg1 = load i32, i32* %arg1
  20.   %tmpld_cls = load %test.Node*, %test.Node** %arg0
  21.   %tmpfld = getelementptr inbounds %test.Node, %test.Node* %tmpld_cls, i32 0, i32 0
  22.   store i32 %ldarg1, i32* %tmpfld
  23.   %ldarg2 = load %test.OptionalNode, %test.OptionalNode* %arg2
  24.   %tmpld_cls1 = load %test.Node*, %test.Node** %arg0
  25.   %tmpfld2 = getelementptr inbounds %test.Node, %test.Node* %tmpld_cls1, i32 0, i32 1
  26.   store %test.OptionalNode %ldarg2, %test.OptionalNode* %tmpfld2
  27.   ret void
  28. }
  29.  
  30. define i32 @"test.main$v"() {
  31. entry:
  32.   %n = alloca %test.OptionalNode
  33.   %enm = alloca %test.OptionalNode
  34.   %0 = bitcast %test.OptionalNode* %enm to %test.OptionalNode.nil*
  35.   %1 = getelementptr inbounds %test.OptionalNode.nil, %test.OptionalNode.nil* %0, i32 0, i32 0
  36.   store i8 0, i8* %1
  37.   %2 = load %test.OptionalNode, %test.OptionalNode* %enm
  38.   store %test.OptionalNode %2, %test.OptionalNode* %n
  39.   %s = alloca %test.OptionalNode
  40.   %enm1 = alloca %test.OptionalNode
  41.   %3 = bitcast %test.OptionalNode* %enm1 to %test.OptionalNode.nil*
  42.   %4 = getelementptr inbounds %test.OptionalNode.nil, %test.OptionalNode.nil* %3, i32 0, i32 0
  43.   store i8 0, i8* %4
  44.   %5 = load %test.OptionalNode, %test.OptionalNode* %enm1
  45.   %tmpalloc = alloca %test.Node*
  46.   %6 = load %test.Node*, %test.Node** %tmpalloc
  47.   call void @"test.Node.!ctor$[test.Node]i[test.OptionalNode]"(%test.Node* %6, i32 3, %test.OptionalNode %5)
  48.   %tmpload = load %test.Node*, %test.Node** %tmpalloc
  49.   %enm2 = alloca %test.OptionalNode
  50.   %7 = bitcast %test.OptionalNode* %enm2 to %test.OptionalNode.some*
  51.   %8 = getelementptr inbounds %test.OptionalNode.some, %test.OptionalNode.some* %7, i32 0, i32 0
  52.   store i8 1, i8* %8
  53.   %9 = getelementptr inbounds %test.OptionalNode.some, %test.OptionalNode.some* %7, i32 0, i32 1
  54.   store %test.Node* %tmpload, %test.Node** %9
  55.   %10 = load %test.OptionalNode, %test.OptionalNode* %enm2
  56.   store %test.OptionalNode %10, %test.OptionalNode* %s
  57.   %r = alloca i32
  58.   store i32 0, i32* %r
  59.   br label %case_check
  60.  
  61. case_check:                                       ; preds = %entry
  62.   %11 = getelementptr inbounds %test.OptionalNode, %test.OptionalNode* %s, i32 0, i32 0
  63.   %12 = load i8, i8* %11
  64.   %tmpicmpeq = icmp eq i8 %12, 1
  65.   br i1 %tmpicmpeq, label %case_body, label %case_after
  66.  
  67. case_body:                                        ; preds = %case_check
  68.   %n3 = alloca %test.Node*
  69.   %13 = bitcast %test.OptionalNode* %s to %test.OptionalNode.some*
  70.   %14 = getelementptr inbounds %test.OptionalNode.some, %test.OptionalNode.some* %13, i32 0, i32 1
  71.   %15 = load %test.Node*, %test.Node** %14
  72.   store %test.Node* %15, %test.Node** %n3
  73.   %tmpld_cls = load %test.Node*, %test.Node** %n3
  74.   %tmpgetfldgep = getelementptr inbounds %test.Node, %test.Node* %tmpld_cls, i32 0, i32 0
  75.   %tmpgetfldld = load i32, i32* %tmpgetfldgep
  76.   store i32 %tmpgetfldld, i32* %r
  77.   br label %case_after
  78.  
  79. case_after:                                       ; preds = %case_body, %case_check
  80.   br label %match_end
  81.  
  82. match_end:                                        ; preds = %case_after
  83.   %tmploadlocal = load i32, i32* %r
  84.   ret i32 %tmploadlocal
  85. }
  86.  
  87. define i32 @main() {
  88. entry:
  89.   %call = tail call i32 @"test.main$v"()
  90.   ret i32 %call
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement