Moved the backend from llc to llvm-lto even for unoptimized compilation.
Unoptimized means '-O1' -- that's the fastest one. ;-) Mark llvm functions with "no-frame-pointer-elim" attribute when not optimizing.
This commit is contained in:
committed by
alexander-gorshenev
parent
89ea6396f6
commit
9e15aa7204
+14
-3
@@ -13,6 +13,8 @@ typealias ExecutableFile = String
|
||||
internal abstract class PlatformFlags(val distribution: Distribution) {
|
||||
val properties = distribution.properties
|
||||
|
||||
abstract val llvmLtoNooptFlags: List<String>
|
||||
abstract val llvmLtoOptFlags: List<String>
|
||||
abstract val llvmLtoFlags: List<String>
|
||||
abstract val llvmLlcFlags: List<String>
|
||||
|
||||
@@ -28,6 +30,8 @@ internal abstract class PlatformFlags(val distribution: Distribution) {
|
||||
internal open class MacOSPlatform(distribution: Distribution)
|
||||
: PlatformFlags(distribution) {
|
||||
|
||||
override val llvmLtoNooptFlags = properties.propertyList("llvmLtoNooptFlags.osx")
|
||||
override val llvmLtoOptFlags = properties.propertyList("llvmLtoOptFlags.osx")
|
||||
override val llvmLtoFlags = properties.propertyList("llvmLtoFlags.osx")
|
||||
override val llvmLlcFlags = properties.propertyList("llvmLlcFlags.osx")
|
||||
|
||||
@@ -45,7 +49,7 @@ internal open class MacOSPlatform(distribution: Distribution)
|
||||
override fun linkCommand(objectFiles: List<String>, executable: String, optimize: Boolean): List<String> {
|
||||
|
||||
return mutableListOf<String>(linker, "-demangle") +
|
||||
if (optimize) listOf("-object_path_lto", "temporary.o", "-lto_library", distribution.libLTO) else {listOf<String>()} +
|
||||
listOf("-object_path_lto", "temporary.o", "-lto_library", distribution.libLTO) +
|
||||
listOf( "-dynamic", "-arch", arch) +
|
||||
osVersionMin +
|
||||
listOf("-syslibroot", "$targetSysRoot",
|
||||
@@ -83,6 +87,8 @@ internal open class LinuxPlatform(distribution: Distribution)
|
||||
val llvmLib = distribution.llvmLib
|
||||
val libGcc = distribution.libGcc
|
||||
|
||||
override val llvmLtoNooptFlags = properties.propertyList("llvmLtoNooptFlags.linux")
|
||||
override val llvmLtoOptFlags = properties.propertyList("llvmLtoOptFlags.linux")
|
||||
override val llvmLtoFlags = properties.propertyList("llvmLtoFlags.linux")
|
||||
override val llvmLlcFlags = properties.propertyList("llvmLlcFlags.linux")
|
||||
|
||||
@@ -181,8 +187,11 @@ internal class LinkStage(val context: Context) {
|
||||
|
||||
val tool = distribution.llvmLto
|
||||
val command = mutableListOf(tool, "-o", combined)
|
||||
command.addAll(platform.llvmLtoFlags)
|
||||
if (optimize) {
|
||||
command.addAll(platform.llvmLtoFlags)
|
||||
command.addAll(platform.llvmLtoOptFlags)
|
||||
} else {
|
||||
command.addAll(platform.llvmLtoNooptFlags)
|
||||
}
|
||||
command.addAll(files)
|
||||
runTool(*command.toTypedArray())
|
||||
@@ -273,7 +282,9 @@ internal class LinkStage(val context: Context) {
|
||||
objectFiles = if (optimize) {
|
||||
listOf( llvmLto(bitcodeFiles ) )
|
||||
} else {
|
||||
bitcodeFiles.map{ it -> llvmLlc(it) }
|
||||
listOf( llvmLto(bitcodeFiles ) )
|
||||
// Or, alternatively, go through llc bitcode compiler.
|
||||
//bitcodeFiles.map{ it -> llvmLlc(it) }
|
||||
}
|
||||
}
|
||||
phaser.phase(KonanPhase.LINKER) {
|
||||
|
||||
+5
@@ -3,6 +3,7 @@ package org.jetbrains.kotlin.backend.konan.llvm
|
||||
import kotlinx.cinterop.*
|
||||
import llvm.*
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.KonanConfigKeys
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
@@ -336,6 +337,10 @@ private class DeclarationsGeneratorVisitor(override val context: Context) :
|
||||
LLVMAddFunction(context.llvmModule, symbolName, llvmFunctionType)!!
|
||||
}
|
||||
|
||||
if (!context.config.configuration.getBoolean(KonanConfigKeys.OPTIMIZATION)) {
|
||||
LLVMAddTargetDependentFunctionAttr(llvmFunction, "no-frame-pointer-elim", "true")
|
||||
}
|
||||
|
||||
this.functions[descriptor] = FunctionLlvmDeclarations(llvmFunction)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,9 @@ arch.osx = x86_64
|
||||
sysRoot.osx = target-sysroot-1-darwin-macos
|
||||
libffiDir.osx = libffi-3.2.1-2-darwin-macos
|
||||
llvmHome.osx = clang+llvm-3.9.0-darwin-macos
|
||||
llvmLtoFlags.osx = -O3 -function-sections -exported-symbol=_Konan_main
|
||||
llvmLtoFlags.osx = -exported-symbol=_Konan_main
|
||||
llvmLtoOptFlags.osx = -O3 -function-sections
|
||||
llvmLtoNooptFlags.osx = -O1
|
||||
llvmLlcFlags.osx = -mtriple=x86_64-apple-macosx10.10.0 --disable-fp-elim
|
||||
linkerKonanFlags.osx = -lc++
|
||||
linkerOptimizationFlags.osx = -dead_strip
|
||||
@@ -22,7 +24,6 @@ sysRoot.osx-ios = target-sysroot-1-darwin-macos
|
||||
targetSysRoot.osx-ios = target-sysroot-2-darwin-ios
|
||||
libffiDir.osx-ios = libffi-3.2.1-2-darwin-ios
|
||||
llvmHome.osx-ios = clang+llvm-3.9.0-darwin-macos
|
||||
llvmLtoFlags.osx-ios = -O3 -function-sections -exported-symbol=_Konan_main
|
||||
llvmLlcFlags.osx-ios = -mtriple=arm64-apple-ios5.0.0 --disable-fp-elim
|
||||
linkerKonanFlags.osx-ios = -lc++
|
||||
linkerOptimizationFlags.osx-ios = -dead_strip
|
||||
@@ -39,7 +40,6 @@ sysRoot.osx-ios-sim = target-sysroot-1-darwin-macos
|
||||
targetSysRoot.osx-ios-sim = target-sysroot-1-darwin-ios-sim
|
||||
libffiDir.osx-ios-sim = libffi-3.2.1-2-darwin-ios-sim
|
||||
llvmHome.osx-ios-sim = clang+llvm-3.9.0-darwin-macos
|
||||
llvmLtoFlags.osx-ios-sim = -O3 -function-sections -exported-symbol=_Konan_main
|
||||
llvmLlcFlags.osx-ios-sim = -mtriple=x86_64-apple-ios5.0.0 --disable-fp-elim
|
||||
linkerKonanFlags.osx-ios-sim = -lc++
|
||||
linkerOptimizationFlags.osx-ios-sim = -dead_strip
|
||||
@@ -56,7 +56,9 @@ libffiDir.linux = libffi-3.2.1-2-linux-x86-64
|
||||
llvmHome.linux = clang+llvm-3.9.0-linux-x86-64
|
||||
libGcc.linux = target-gcc-toolchain-3-linux-x86-64/lib/gcc/x86_64-unknown-linux-gnu/4.8.5
|
||||
gccToolChain.linux = target-gcc-toolchain-3-linux-x86-64
|
||||
llvmLtoFlags.linux = -O3 -function-sections -exported-symbol=Konan_main
|
||||
llvmLtoFlags.linux = -exported-symbol=Konan_main
|
||||
llvmLtoOptFlags.linux = -O3 -function-sections
|
||||
llvmLtoNooptFlags.linux = -O1
|
||||
llvmLlcFlags.linux = -march=x86-64
|
||||
linkerKonanFlags.linux = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread
|
||||
linkerOptimizationFlags.linux = --gc-sections
|
||||
@@ -72,7 +74,6 @@ libffiDir.linux-raspberrypi = libffi-3.2.1-2-raspberrypi
|
||||
llvmHome.linux-raspberrypi = clang+llvm-3.9.0-linux-x86-64
|
||||
libGcc.linux-raspberrypi = target-sysroot-1-raspberrypi/lib/gcc/arm-linux-gnueabihf/4.8.3/
|
||||
gccToolChain.linux-raspberrypi = target-gcc-toolchain-3-linux-x86-64
|
||||
llvmLtoFlags.linux-raspberrypi = -O3 -function-sections -exported-symbol=Konan_main
|
||||
llvmLlcFlags.linux-raspberrypi = -mtriple=armv7-unknown-linux-gnueabihf --disable-fp-elim -float-abi=hard
|
||||
linkerKonanFlags.linux-raspberrypi = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lc -lpthread -fuse-ld=gold
|
||||
entrySelector.linux-raspberrypi = --defsym main=Konan_main
|
||||
|
||||
Reference in New Issue
Block a user