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:
Alexander Gorshenev
2017-03-28 12:30:26 +03:00
committed by alexander-gorshenev
parent 89ea6396f6
commit 9e15aa7204
3 changed files with 25 additions and 8 deletions
@@ -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) {
@@ -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)
}
}
+6 -5
View File
@@ -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