FILE fqName:<root> fileName:/elvis.kt
  PROPERTY name:p visibility:public modality:FINAL [val]
    FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Any? visibility:private [final,static]
      EXPRESSION_BODY
        CONST Null type=kotlin.Nothing? value=null
    FUN DEFAULT_PROPERTY_ACCESSOR name:<get-p> visibility:public modality:FINAL <> () returnType:kotlin.Any?
      correspondingProperty: PROPERTY name:p visibility:public modality:FINAL [val]
      BLOCK_BODY
        RETURN type=kotlin.Nothing from='public final fun <get-p> (): kotlin.Any? declared in <root>'
          GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Any? visibility:private [final,static]' type=kotlin.Any? origin=null
  FUN name:foo visibility:public modality:FINAL <> () returnType:kotlin.Any?
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.Any? declared in <root>'
        CONST Null type=kotlin.Nothing? value=null
  FUN name:test1 visibility:public modality:FINAL <> (a:kotlin.Any?, b:kotlin.Any) returnType:kotlin.Any
    VALUE_PARAMETER name:a index:0 type:kotlin.Any?
    VALUE_PARAMETER name:b index:1 type:kotlin.Any
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun test1 (a: kotlin.Any?, b: kotlin.Any): kotlin.Any declared in <root>'
        BLOCK type=kotlin.Any origin=ELVIS
          VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Any? [val]
            GET_VAR 'a: kotlin.Any? declared in <root>.test1' type=kotlin.Any? origin=null
          WHEN type=kotlin.Any origin=ELVIS
            BRANCH
              if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
                arg0: GET_VAR 'val tmp_0: kotlin.Any? [val] declared in <root>.test1' type=kotlin.Any? origin=null
                arg1: CONST Null type=kotlin.Nothing? value=null
              then: GET_VAR 'b: kotlin.Any declared in <root>.test1' type=kotlin.Any origin=null
            BRANCH
              if: CONST Boolean type=kotlin.Boolean value=true
              then: GET_VAR 'val tmp_0: kotlin.Any? [val] declared in <root>.test1' type=kotlin.Any? origin=null
  FUN name:test2 visibility:public modality:FINAL <> (a:kotlin.String?, b:kotlin.Any) returnType:kotlin.Any
    VALUE_PARAMETER name:a index:0 type:kotlin.String?
    VALUE_PARAMETER name:b index:1 type:kotlin.Any
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun test2 (a: kotlin.String?, b: kotlin.Any): kotlin.Any declared in <root>'
        BLOCK type=kotlin.Any origin=ELVIS
          VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.String? [val]
            GET_VAR 'a: kotlin.String? declared in <root>.test2' type=kotlin.String? origin=null
          WHEN type=kotlin.Any origin=ELVIS
            BRANCH
              if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
                arg0: GET_VAR 'val tmp_1: kotlin.String? [val] declared in <root>.test2' type=kotlin.String? origin=null
                arg1: CONST Null type=kotlin.Nothing? value=null
              then: GET_VAR 'b: kotlin.Any declared in <root>.test2' type=kotlin.Any origin=null
            BRANCH
              if: CONST Boolean type=kotlin.Boolean value=true
              then: GET_VAR 'val tmp_1: kotlin.String? [val] declared in <root>.test2' type=kotlin.String? origin=null
  FUN name:test3 visibility:public modality:FINAL <> (a:kotlin.Any?, b:kotlin.Any?) returnType:kotlin.String
    VALUE_PARAMETER name:a index:0 type:kotlin.Any?
    VALUE_PARAMETER name:b index:1 type:kotlin.Any?
    BLOCK_BODY
      WHEN type=kotlin.Unit origin=IF
        BRANCH
          if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=kotlin.String
            GET_VAR 'b: kotlin.Any? declared in <root>.test3' type=kotlin.Any? origin=null
          then: RETURN type=kotlin.Nothing from='public final fun test3 (a: kotlin.Any?, b: kotlin.Any?): kotlin.String declared in <root>'
            CONST String type=kotlin.String value=""
      WHEN type=kotlin.Unit origin=IF
        BRANCH
          if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=kotlin.String?
            GET_VAR 'a: kotlin.Any? declared in <root>.test3' type=kotlin.Any? origin=null
          then: RETURN type=kotlin.Nothing from='public final fun test3 (a: kotlin.Any?, b: kotlin.Any?): kotlin.String declared in <root>'
            CONST String type=kotlin.String value=""
      RETURN type=kotlin.Nothing from='public final fun test3 (a: kotlin.Any?, b: kotlin.Any?): kotlin.String declared in <root>'
        BLOCK type=kotlin.String origin=ELVIS
          VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.String? [val]
            TYPE_OP type=kotlin.String? origin=IMPLICIT_CAST typeOperand=kotlin.String?
              GET_VAR 'a: kotlin.Any? declared in <root>.test3' type=kotlin.Any? origin=null
          WHEN type=kotlin.String origin=ELVIS
            BRANCH
              if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
                arg0: GET_VAR 'val tmp_2: kotlin.String? [val] declared in <root>.test3' type=kotlin.String? origin=null
                arg1: CONST Null type=kotlin.Nothing? value=null
              then: TYPE_OP type=kotlin.String origin=IMPLICIT_CAST typeOperand=kotlin.String
                GET_VAR 'b: kotlin.Any? declared in <root>.test3' type=kotlin.Any? origin=null
            BRANCH
              if: CONST Boolean type=kotlin.Boolean value=true
              then: GET_VAR 'val tmp_2: kotlin.String? [val] declared in <root>.test3' type=kotlin.String? origin=null
  FUN name:test4 visibility:public modality:FINAL <> (x:kotlin.Any) returnType:kotlin.Any
    VALUE_PARAMETER name:x index:0 type:kotlin.Any
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun test4 (x: kotlin.Any): kotlin.Any declared in <root>'
        BLOCK type=kotlin.Any origin=ELVIS
          VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.Any? [val]
            CALL 'public final fun <get-p> (): kotlin.Any? declared in <root>' type=kotlin.Any? origin=GET_PROPERTY
          WHEN type=kotlin.Any origin=ELVIS
            BRANCH
              if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
                arg0: GET_VAR 'val tmp_3: kotlin.Any? [val] declared in <root>.test4' type=kotlin.Any? origin=null
                arg1: CONST Null type=kotlin.Nothing? value=null
              then: GET_VAR 'x: kotlin.Any declared in <root>.test4' type=kotlin.Any origin=null
            BRANCH
              if: CONST Boolean type=kotlin.Boolean value=true
              then: GET_VAR 'val tmp_3: kotlin.Any? [val] declared in <root>.test4' type=kotlin.Any? origin=null
  FUN name:test5 visibility:public modality:FINAL <> (x:kotlin.Any) returnType:kotlin.Any
    VALUE_PARAMETER name:x index:0 type:kotlin.Any
    BLOCK_BODY
      RETURN type=kotlin.Nothing from='public final fun test5 (x: kotlin.Any): kotlin.Any declared in <root>'
        BLOCK type=kotlin.Any origin=ELVIS
          VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.Any? [val]
            CALL 'public final fun foo (): kotlin.Any? declared in <root>' type=kotlin.Any? origin=null
          WHEN type=kotlin.Any origin=ELVIS
            BRANCH
              if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
                arg0: GET_VAR 'val tmp_4: kotlin.Any? [val] declared in <root>.test5' type=kotlin.Any? origin=null
                arg1: CONST Null type=kotlin.Nothing? value=null
              then: GET_VAR 'x: kotlin.Any declared in <root>.test5' type=kotlin.Any origin=null
            BRANCH
              if: CONST Boolean type=kotlin.Boolean value=true
              then: GET_VAR 'val tmp_4: kotlin.Any? [val] declared in <root>.test5' type=kotlin.Any? origin=null
