Skip to content

Commit

Permalink
Autogenerate code of IR tree
Browse files Browse the repository at this point in the history
  • Loading branch information
mcpiroman committed Oct 19, 2021
1 parent 6b45396 commit 735c16c
Show file tree
Hide file tree
Showing 279 changed files with 7,262 additions and 3,203 deletions.
21 changes: 21 additions & 0 deletions .idea/runConfigurations/Generate_IR_tree.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Expand Up @@ -65,6 +65,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.runIf
import org.jetbrains.kotlin.utils.newLinkedHashMapWithExpectedSize
import java.io.File
import kotlin.collections.set
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI

object FirKotlinToJvmBytecodeCompiler {
fun compileModulesUsingFrontendIR(
Expand Down Expand Up @@ -277,6 +278,7 @@ object FirKotlinToJvmBytecodeCompiler {
return FirSessionFactory.ProviderAndScopeForIncrementalCompilation(packagePartProvider, incrementalCompilationScope)
}

@OptIn(ObsoleteDescriptorBasedAPI::class)
private fun CompilationContext.runBackend(
ktFiles: List<KtFile>,
fir2IrResult: Fir2IrResult,
Expand Down
Expand Up @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.addElement
import org.jetbrains.kotlin.ir.expressions.IrBlock
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrGetValue
Expand Down
Expand Up @@ -669,7 +669,7 @@ class CallAndReferenceGenerator(
}
val argumentMapping = this.elements.zip(argument.arguments).toMap()
// [IrElementTransformer] is not preferred, since it's hard to visit vararg elements only.
val irVarargElements = elements as MutableList<IrVarargElement>
val irVarargElements = elements
irVarargElements.replaceAll { irVarargElement ->
if (irVarargElement is IrExpression) {
val firVarargArgument =
Expand Down
Expand Up @@ -8,6 +8,8 @@ package org.jetbrains.kotlin.fir.tree.generator
import org.jetbrains.kotlin.fir.tree.generator.printer.generateElements
import org.jetbrains.kotlin.fir.tree.generator.util.*
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.collectPreviouslyGeneratedFiles
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.removeExtraFilesFromPreviousGeneration
import java.io.File


Expand Down

This file was deleted.

Expand Up @@ -75,7 +75,7 @@ class CheckIrElementVisitor(
}
}

override fun <T> visitConst(expression: IrConst<T>) {
override fun visitConst(expression: IrConst<*>) {
super.visitConst(expression)

@Suppress("UNUSED_VARIABLE")
Expand Down
Expand Up @@ -41,7 +41,7 @@ class ScopeValidator(
}
}

fun visitVariableAccess(element: IrElement, variable: IrValueDeclaration) {
fun visitValueAccess(element: IrElement, variable: IrValueDeclaration) {
if (variable !in this.values) {
reportError(element, "Value ${variable.render()} not accessible")
}
Expand Down Expand Up @@ -130,7 +130,7 @@ class ScopeValidator(
}

override fun visitValueAccess(expression: IrValueAccessExpression, data: Visibles) {
data.visitVariableAccess(expression, expression.symbol.owner)
data.visitValueAccess(expression, expression.symbol.owner)
super.visitValueAccess(expression, data)
}

Expand Down
Expand Up @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.addArgument
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.defaultType
import org.jetbrains.kotlin.ir.types.isInt
Expand Down
Expand Up @@ -374,8 +374,8 @@ fun usefulDeclarations(
expression.symbol.owner.enqueue("raw function access")
}

override fun visitVariableAccess(expression: IrValueAccessExpression) {
super.visitVariableAccess(expression)
override fun visitValueAccess(expression: IrValueAccessExpression) {
super.visitValueAccess(expression)

expression.symbol.owner.enqueue("variable access")
}
Expand Down
Expand Up @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.phaser.invokeToplevel
import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity
import org.jetbrains.kotlin.ir.backend.js.ic.ModuleCache
import org.jetbrains.kotlin.ir.backend.js.ic.icCompile
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.backend.js.lower.generateJsTests
import org.jetbrains.kotlin.ir.backend.js.lower.moveBodilessDeclarationsToSeparatePlace
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer
Expand Down Expand Up @@ -44,6 +45,7 @@ class LoweredIr(
val allModules: List<IrModuleFragment>
)

@OptIn(ObsoleteDescriptorBasedAPI::class)
fun compile(
depsDescriptors: ModulesStructure,
phaseConfig: PhaseConfig,
Expand Down
Expand Up @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.js.config.RuntimeDiagnostic
import org.jetbrains.kotlin.library.resolver.KotlinResolvedLibrary
import org.jetbrains.kotlin.name.FqName
import java.io.PrintWriter
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI

fun prepareSingleLibraryIcCache(
project: Project,
Expand Down Expand Up @@ -184,6 +185,7 @@ fun lowerPreservingIcData(module: IrModuleFragment, context: JsIrBackendContext,
controller.currentStage = pirLowerings.size + 1
}

@OptIn(ObsoleteDescriptorBasedAPI::class)
private fun prepareIr(
depsDescriptor: ModulesStructure,
exportedDeclarations: Set<FqName> = emptySet(),
Expand Down
Expand Up @@ -321,6 +321,7 @@ fun actualizeCacheForModule(
}


@OptIn(ObsoleteDescriptorBasedAPI::class)
private fun actualizeCacheForModule(
library: KotlinLibrary,
configuration: CompilerConfiguration,
Expand Down
Expand Up @@ -43,7 +43,7 @@ class ConstTransformer(private val context: JsIrBackendContext) : IrElementTrans
private fun createLong(v: Long): IrExpression =
lowerConst(context.intrinsics.longClassSymbol, IrConstImpl.Companion::int, v.toInt(), (v shr 32).toInt())

override fun <T> visitConst(expression: IrConst<T>): IrExpression {
override fun visitConst(expression: IrConst<*>): IrExpression {
with(context.intrinsics) {
if (expression.type.isUnsigned() && expression.kind != IrConstKind.Null) {
return when (expression.type.classifierOrNull) {
Expand Down
Expand Up @@ -48,7 +48,7 @@ class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer<JsEx
return irFunction.accept(IrFunctionToJsTransformer(), context).apply { name = null }
}

override fun <T> visitConst(expression: IrConst<T>, context: JsGenerationContext): JsExpression {
override fun visitConst(expression: IrConst<*>, context: JsGenerationContext): JsExpression {
val kind = expression.kind
return when (kind) {
is IrConstKind.String -> JsStringLiteral(kind.valueOf(expression))
Expand Down
Expand Up @@ -89,7 +89,7 @@ fun foldString(expression: IrExpression, context: JsIrBackendContext): String? {
expression.acceptChildrenVoid(this)
}

override fun <T> visitConst(expression: IrConst<T>) {
override fun visitConst(expression: IrConst<*>) {
builder.append(expression.kind.valueOf(expression))
}

Expand Down
Expand Up @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.konan.DeserializedKlibModuleOrigin
import org.jetbrains.kotlin.descriptors.konan.KlibModuleOrigin
import org.jetbrains.kotlin.idea.MainFunctionDetector
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmDescriptorMangler
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrLinker
import org.jetbrains.kotlin.ir.builders.TranslationPluginContext
Expand Down Expand Up @@ -194,6 +195,7 @@ open class JvmIrCodegenFactory(
return result.toList()
}

@OptIn(ObsoleteDescriptorBasedAPI::class)
override fun getModuleChunkBackendInput(
wholeBackendInput: CodegenFactory.BackendInput,
sourceFiles: Collection<KtFile>,
Expand Down Expand Up @@ -252,6 +254,7 @@ open class JvmIrCodegenFactory(
)
}

@OptIn(ObsoleteDescriptorBasedAPI::class)
fun configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(
irModuleFragment: IrModuleFragment,
symbolTable: SymbolTable,
Expand Down
Expand Up @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.config.JVMAssertionsMode
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.buildField
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.IrFile
Expand Down
Expand Up @@ -12,6 +12,9 @@ import org.jetbrains.kotlin.backend.jvm.ir.constantValue
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
import org.jetbrains.kotlin.ir.expressions.impl.copyWithOffsets
import org.jetbrains.kotlin.ir.types.isPrimitiveType
import org.jetbrains.kotlin.ir.types.isStringClassType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
Expand Down
Expand Up @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
Expand Down Expand Up @@ -70,6 +71,7 @@ internal val generateMultifileFacadesPhase = makeCustomPhase<JvmBackendContext,
}
)

@OptIn(ObsoleteDescriptorBasedAPI::class)
private fun generateMultifileFacades(
module: IrModuleFragment,
context: JvmBackendContext,
Expand Down
Expand Up @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.expressions.impl.copyWithOffsets
import org.jetbrains.kotlin.ir.symbols.impl.IrPublicSymbolBase
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
import org.jetbrains.kotlin.ir.types.*
Expand Down Expand Up @@ -78,7 +79,7 @@ class JvmOptimizationLowering(val context: JvmBackendContext) : FileLoweringPass
private inner class Transformer(private val inlineScopeResolver: IrInlineScopeResolver) : IrElementTransformer<IrDeclaration?> {
private val dontTouchTemporaryVals = HashSet<IrVariable>()

override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclaration?): IrStatement =
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclaration?) =
super.visitDeclaration(declaration, declaration)

override fun visitCall(expression: IrCall, data: IrDeclaration?): IrExpression {
Expand Down Expand Up @@ -363,7 +364,7 @@ class JvmOptimizationLowering(val context: JvmBackendContext) : FileLoweringPass
}
}
}

private fun IrStatement.isLoopVariable() =
this is IrVariable && origin == IrDeclarationOrigin.FOR_LOOP_VARIABLE

Expand Down
Expand Up @@ -844,7 +844,7 @@ class ExpressionCodegen(
return unitValue
}

override fun <T> visitConst(expression: IrConst<T>, data: BlockInfo): PromisedValue {
override fun visitConst(expression: IrConst<*>, data: BlockInfo): PromisedValue {
expression.markLineNumber(startOffset = true)
when (val value = expression.value) {
is Boolean -> {
Expand Down
Expand Up @@ -9,6 +9,9 @@ import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.backend.common.phaser.invokeToplevel
import org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment
import org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmModuleFragmentGenerator
import org.jetbrains.kotlin.backend.wasm.ir2wasm.generateStringLiteralsSupport
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.backend.js.MainModule
import org.jetbrains.kotlin.ir.backend.js.ModulesStructure
import org.jetbrains.kotlin.ir.backend.js.loadIr
Expand All @@ -23,6 +26,7 @@ import java.io.ByteArrayOutputStream

class WasmCompilerResult(val wat: String, val js: String, val wasm: ByteArray)

@OptIn(ObsoleteDescriptorBasedAPI::class)
fun compileWasm(
depsDescriptors: ModulesStructure,
phaseConfig: PhaseConfig,
Expand Down
Expand Up @@ -99,7 +99,7 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV
}
}

override fun <T> visitConst(expression: IrConst<T>) {
override fun visitConst(expression: IrConst<*>) {
when (val kind = expression.kind) {
is IrConstKind.Null -> generateDefaultInitializerForType(context.transformType(expression.type), body)
is IrConstKind.Boolean -> body.buildConstI32(if (kind.valueOf(expression)) 1 else 0)
Expand Down
Expand Up @@ -84,7 +84,7 @@ class IrCompileTimeChecker(
return body.kind == IrSyntheticBodyKind.ENUM_VALUES || body.kind == IrSyntheticBodyKind.ENUM_VALUEOF
}

override fun <T> visitConst(expression: IrConst<T>, data: Nothing?): Boolean {
override fun visitConst(expression: IrConst<*>, data: Nothing?): Boolean {
if (expression.type.getUnsignedType() != null) {
val constructor = expression.type.classOrNull?.owner?.constructors?.singleOrNull() ?: return false
return mode.canEvaluateFunction(constructor)
Expand Down

0 comments on commit 735c16c

Please sign in to comment.