Cache fqNames
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt
index ca175c6..a48ef96 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt
@@ -316,11 +316,18 @@
 val IrClass.isObject get() = kind == ClassKind.OBJECT
 val IrClass.isAnonymousObject get() = isClass && name == SpecialNames.NO_NAME_PROVIDED
 val IrClass.isNonCompanionObject: Boolean get() = isObject && !isCompanion
+
+private val fqNameCache = mutableMapOf<IrDeclarationWithName, FqName?>()
+
 val IrDeclarationWithName.fqNameWhenAvailable: FqName?
-    get() = when (val parent = parent) {
-        is IrDeclarationWithName -> parent.fqNameWhenAvailable?.child(name)
-        is IrPackageFragment -> parent.packageFqName.child(name)
-        else -> null
+    get() = fqNameCache.getOrPutNullable(
+        this
+    ) {
+        when (val parent = parent) {
+            is IrDeclarationWithName -> parent.fqNameWhenAvailable?.child(name)
+            is IrPackageFragment -> parent.packageFqName.child(name)
+            else -> null
+        }
     }
 
 val IrDeclaration.parentAsClass: IrClass
@@ -438,7 +445,7 @@
     call: IrFunctionAccessExpression,
     newSymbol: IrConstructorSymbol,
     receiversAsArguments: Boolean = false,
-    argumentsAsDispatchers: Boolean = false
+    argumentsAsDispatchers: Boolean = false,
 ): IrConstructorCall =
     call.run {
         IrConstructorCallImpl(
@@ -1216,7 +1223,7 @@
     isFakeOverride: Boolean = oldFunction.isFakeOverride,
     copyMetadata: Boolean = true,
     typeParametersFromContext: List<IrTypeParameter> = listOf(),
-    remapMultiFieldValueClassStructure: (IrFunction, IrFunction, Map<IrValueParameter, IrValueParameter>?) -> Unit
+    remapMultiFieldValueClassStructure: (IrFunction, IrFunction, Map<IrValueParameter, IrValueParameter>?) -> Unit,
 ): IrSimpleFunction {
     return createSimpleFunction(
         startOffset = oldFunction.startOffset,