[targets] Pick target CPU in LLVM optimization pipeline based on runtime.bc

This commit is contained in:
Sergey Bogolepov
2019-07-15 12:05:13 +07:00
committed by Sergey Bogolepov
parent b0c74ec00b
commit 23c1c3c293
2 changed files with 20 additions and 10 deletions
@@ -41,25 +41,35 @@ private class LlvmPipelineConfiguration(context: Context) {
val targetTriple: String = context.llvm.targetTriple
val cpuArchitecture: String = when (target) {
KonanTarget.IOS_ARM32 -> "armv7"
KonanTarget.IOS_ARM64 -> "arm64"
// Most of these values are copied from corresponding runtime.bc
// Which is using "generic" target CPU for many case.
// This approach is suboptimal because target-cpu="generic" limits
// the set of used cpu features.
// TODO: refactor KonanTarget so that we can explicitly specify
// target cpu or arch+features combination in a single place.
val cpuModel: String = when (target) {
KonanTarget.IOS_ARM32 -> "generic"
KonanTarget.IOS_ARM64 -> "cyclone"
KonanTarget.IOS_X64 -> "core2"
KonanTarget.LINUX_X64 -> "x86-64"
KonanTarget.MINGW_X86 -> "pentium4"
KonanTarget.MINGW_X64 -> "x86-64"
KonanTarget.MACOS_X64 -> "core2"
KonanTarget.LINUX_ARM32_HFP -> "arm1136jf-s"
KonanTarget.LINUX_ARM64 -> "cortex-a57"
KonanTarget.ANDROID_ARM32 -> "armv7"
KonanTarget.ANDROID_ARM64 -> "arm64"
KonanTarget.LINUX_ARM64 -> "generic"
KonanTarget.ANDROID_ARM32 -> "arm7tdmi"
KonanTarget.ANDROID_ARM64 -> "cortex-a57"
KonanTarget.LINUX_MIPS32 -> "mips32r2"
KonanTarget.LINUX_MIPSEL32 -> "mips32r2"
KonanTarget.WASM32,
is KonanTarget.ZEPHYR -> error("There is no support for ${target.name} target yet.")
}
val cpuFeatures: String = ""
val cpuFeatures: String = when (target) {
KonanTarget.LINUX_ARM32_HFP -> "+dsp,+strict-align,+vfp2,-crypto,-d16,-fp-armv8,-fp-only-sp,-fp16,-neon,-thumb-mode,-vfp3,-vfp4"
KonanTarget.ANDROID_ARM32 -> "+soft-float,+strict-align,-crypto,-neon,-thumb-mode"
else -> ""
}
val customInlineThreshold: Int? = when {
context.shouldOptimize() -> 100
@@ -122,7 +132,7 @@ internal fun runLlvmOptimizationPipeline(context: Context) {
val targetMachine = LLVMCreateTargetMachine(
target.value,
config.targetTriple,
config.cpuArchitecture,
config.cpuModel,
config.cpuFeatures,
config.codegenOptimizationLevel,
config.relocMode,
+2 -2
View File
@@ -365,7 +365,7 @@ dependencies.mingw_x64-android_arm32 = \
quadruple.android_arm32 = arm-linux-androideabi
entrySelector.android_arm32 = -Wl,--defsym -Wl,main=Konan_main
clangFlags.android_arm32 = -cc1 -emit-obj -disable-llvm-optzns -x ir -femulated-tls -mrelocation-model pic
clangFlags.android_arm32 = -cc1 -target-cpu arm7tdmi -emit-obj -disable-llvm-optzns -x ir -femulated-tls -mrelocation-model pic
clangOptFlags.android_arm32 = -O3 -ffunction-sections
linkerNoDebugFlags.android_arm32 = -Wl,-S
clangNooptFlags.android_arm32 = -O1
@@ -395,7 +395,7 @@ dependencies.mingw_x64-android_arm64 = \
quadruple.android_arm64 = aarch64-linux-android
entrySelector.android_arm64 = -Wl,--defsym -Wl,main=Konan_main
clangFlags.android_arm64 = -cc1 -emit-obj -disable-llvm-passes -x ir -femulated-tls -mrelocation-model pic
clangFlags.android_arm64 = -cc1 -target-cpu cortex-a57 -emit-obj -disable-llvm-passes -x ir -femulated-tls -mrelocation-model pic
targetSysRoot.android_arm64 = target-sysroot-21-android_arm64
linkerKonanFlags.android_arm64 = -lm -latomic -lstdc++ -landroid
linkerNoDebugFlags.android_arm64 = -Wl,-S