{
  "asm": [
    {
      "text": "define dso_local noundef i32 @f(int)(i32 noundef %n) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {",
      "scope": "!10",
      "source": {
        "file": null,
        "line": 3
      }
    },
    {
      "text": "entry:"
    },
    {
      "text": "  %retval = alloca i32, align 4"
    },
    {
      "text": "  %n.addr = alloca i32, align 4"
    },
    {
      "text": "  %a = alloca i32, align 4"
    },
    {
      "text": "  %exn.slot = alloca i8*, align 8"
    },
    {
      "text": "  %ehselector.slot = alloca i32, align 4"
    },
    {
      "text": "  store i32 %n, i32* %n.addr, align 4"
    },
    {
      "text": "  %0 = load i32, i32* %n.addr, align 4",
      "scope": "!21",
      "source": {
        "file": null,
        "line": 6,
        "column": 19
      }
    },
    {
      "text": "  %call = invoke noundef i32 @g(int)(i32 noundef %0)"
    },
    {
      "text": "          to label %invoke.cont unwind label %lpad",
      "scope": "!22",
      "source": {
        "file": null,
        "line": 6,
        "column": 17
      }
    },
    {
      "text": ""
    },
    {
      "text": "invoke.cont:"
    },
    {
      "text": "  store i32 %call, i32* %a, align 4",
      "scope": "!20",
      "source": {
        "file": null,
        "line": 6,
        "column": 13
      }
    },
    {
      "text": "  %1 = load i32, i32* %a, align 4",
      "scope": "!23",
      "source": {
        "file": null,
        "line": 7,
        "column": 16
      }
    },
    {
      "text": "  store i32 %1, i32* %retval, align 4",
      "scope": "!24",
      "source": {
        "file": null,
        "line": 7,
        "column": 9
      }
    },
    {
      "text": "  br label %return",
      "scope": "!24",
      "source": {
        "file": null,
        "line": 7,
        "column": 9
      }
    },
    {
      "text": ""
    },
    {
      "text": "lpad:"
    },
    {
      "text": "  %2 = landingpad { i8*, i32 }"
    },
    {
      "text": "          catch i8* null",
      "scope": "!25",
      "source": {
        "file": null,
        "line": 13,
        "column": 1
      }
    },
    {
      "text": "  %3 = extractvalue { i8*, i32 } %2, 0",
      "scope": "!25",
      "source": {
        "file": null,
        "line": 13,
        "column": 1
      }
    },
    {
      "text": "  store i8* %3, i8** %exn.slot, align 8",
      "scope": "!25",
      "source": {
        "file": null,
        "line": 13,
        "column": 1
      }
    },
    {
      "text": "  %4 = extractvalue { i8*, i32 } %2, 1",
      "scope": "!25",
      "source": {
        "file": null,
        "line": 13,
        "column": 1
      }
    },
    {
      "text": "  store i32 %4, i32* %ehselector.slot, align 4",
      "scope": "!25",
      "source": {
        "file": null,
        "line": 13,
        "column": 1
      }
    },
    {
      "text": "  br label %catch",
      "scope": "!25",
      "source": {
        "file": null,
        "line": 13,
        "column": 1
      }
    },
    {
      "text": ""
    },
    {
      "text": "catch:"
    },
    {
      "text": "  %exn = load i8*, i8** %exn.slot, align 8",
      "scope": "!26",
      "source": {
        "file": null,
        "line": 8,
        "column": 5
      }
    },
    {
      "text": "  %5 = call i8* @__cxa_begin_catch(i8* %exn) #4",
      "scope": "!26",
      "source": {
        "file": null,
        "line": 8,
        "column": 5
      }
    },
    {
      "text": "  %6 = load i32, i32* %n.addr, align 4",
      "scope": "!27",
      "source": {
        "file": null,
        "line": 11,
        "column": 16
      }
    },
    {
      "text": "  store i32 %6, i32* %retval, align 4",
      "scope": "!29",
      "source": {
        "file": null,
        "line": 11,
        "column": 9
      }
    },
    {
      "text": "  call void @__cxa_end_catch()",
      "scope": "!30",
      "source": {
        "file": null,
        "line": 12,
        "column": 5
      }
    },
    {
      "text": "  br label %return"
    },
    {
      "text": ""
    },
    {
      "text": "try.cont:"
    },
    {
      "text": "  call void @llvm.trap()",
      "scope": "!30",
      "source": {
        "file": null,
        "line": 12,
        "column": 5
      }
    },
    {
      "text": "  unreachable",
      "scope": "!30",
      "source": {
        "file": null,
        "line": 12,
        "column": 5
      }
    },
    {
      "text": ""
    },
    {
      "text": "return:"
    },
    {
      "text": "  %7 = load i32, i32* %retval, align 4",
      "scope": "!31",
      "source": {
        "file": null,
        "line": 13,
        "column": 1
      }
    },
    {
      "text": "  ret i32 %7",
      "scope": "!31",
      "source": {
        "file": null,
        "line": 13,
        "column": 1
      }
    },
    {
      "text": "}"
    },
    {
      "text": ""
    },
    {
      "text": "declare void @llvm.dbg.declare(metadata, metadata, metadata) #1"
    },
    {
      "text": ""
    },
    {
      "text": "declare noundef i32 @g(int)(i32 noundef) #2"
    },
    {
      "text": ""
    },
    {
      "text": "declare i32 @__gxx_personality_v0(...)"
    },
    {
      "text": ""
    },
    {
      "text": "declare i8* @__cxa_begin_catch(i8*)"
    },
    {
      "text": ""
    },
    {
      "text": "declare void @__cxa_end_catch()"
    },
    {
      "text": ""
    },
    {
      "text": "declare void @llvm.trap() #3"
    },
    {
      "text": ""
    }
  ],
  "cfg": {
    "f(int)(i32 noundef %n) personality i8* bitcast (i32 ": {
      "nodes": [
        {
          "id": "entry",
          "label": "f(int)(i32 noundef %n) personality i8* bitcast (i32 \n\nentry:\n  %retval = alloca i32, align 4\n  %n.addr = alloca i32, align 4\n  %a = alloca i32, align 4\n  %exn.slot = alloca i8*, align 8\n  %ehselector.slot = alloca i32, align 4\n  store i32 %n, i32* %n.addr, align 4\n  %0 = load i32, i32* %n.addr, align 4\n  %call = invoke noundef i32 @g(int)(i32 noundef %0)\n          to label %invoke.cont unwind label %lpad"
        },
        {
          "id": "invoke.cont",
          "label": "invoke.cont:\n  store i32 %call, i32* %a, align 4\n  %1 = load i32, i32* %a, align 4\n  store i32 %1, i32* %retval, align 4\n  br label %return"
        },
        {
          "id": "lpad",
          "label": "lpad:\n  %2 = landingpad { i8*, i32 }\n          catch i8* null\n  %3 = extractvalue { i8*, i32 } %2, 0\n  store i8* %3, i8** %exn.slot, align 8\n  %4 = extractvalue { i8*, i32 } %2, 1\n  store i32 %4, i32* %ehselector.slot, align 4\n  br label %catch"
        },
        {
          "id": "catch",
          "label": "catch:\n  %exn = load i8*, i8** %exn.slot, align 8\n  %5 = call i8* @__cxa_begin_catch(i8* %exn) #4\n  %6 = load i32, i32* %n.addr, align 4\n  store i32 %6, i32* %retval, align 4\n  call void @__cxa_end_catch()\n  br label %return"
        },
        {
          "id": "try.cont",
          "label": "try.cont:\n  call void @llvm.trap()\n  unreachable"
        },
        {
          "id": "return",
          "label": "return:\n  %7 = load i32, i32* %retval, align 4\n  ret i32 %7"
        }
      ],
      "edges": [
        {
          "from": "entry",
          "to": "invoke.cont",
          "arrows": "to",
          "color": "green"
        },
        {
          "from": "entry",
          "to": "lpad",
          "arrows": "to",
          "color": "grey"
        },
        {
          "from": "invoke.cont",
          "to": "return",
          "arrows": "to",
          "color": "blue"
        },
        {
          "from": "lpad",
          "to": "catch",
          "arrows": "to",
          "color": "blue"
        },
        {
          "from": "catch",
          "to": "return",
          "arrows": "to",
          "color": "blue"
        }
      ]
    }
  }
}
