Compare commits
17 Commits
ded31e64ef
...
ad1f0abb55
Author | SHA1 | Date |
---|---|---|
David Mak | ad1f0abb55 | |
David Mak | c780cf849b | |
David Mak | 82453c78e8 | |
David Mak | d111ed8104 | |
David Mak | 33e40db0f0 | |
David Mak | d76709e092 | |
David Mak | 3ed60d8518 | |
David Mak | 1897c175c4 | |
David Mak | a13686d4b3 | |
David Mak | e9295b9d1a | |
David Mak | 73500c9081 | |
David Mak | 9ca34c714e | |
David Mak | 7fc2a30c14 | |
David Mak | 950f431483 | |
David Mak | a50c690428 | |
David Mak | 48eb64403f | |
David Mak | 2c44b58bb8 |
|
@ -673,7 +673,6 @@ dependencies = [
|
||||||
"inkwell",
|
"inkwell",
|
||||||
"insta",
|
"insta",
|
||||||
"itertools 0.11.0",
|
"itertools 0.11.0",
|
||||||
"lazy_static",
|
|
||||||
"nac3parser",
|
"nac3parser",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"rayon",
|
"rayon",
|
||||||
|
|
|
@ -9,6 +9,7 @@ use inkwell::{
|
||||||
memory_buffer::MemoryBuffer,
|
memory_buffer::MemoryBuffer,
|
||||||
module::{Linkage, Module},
|
module::{Linkage, Module},
|
||||||
passes::PassBuilderOptions,
|
passes::PassBuilderOptions,
|
||||||
|
support::is_multithreaded,
|
||||||
targets::*,
|
targets::*,
|
||||||
OptimizationLevel,
|
OptimizationLevel,
|
||||||
};
|
};
|
||||||
|
@ -582,7 +583,8 @@ impl Nac3 {
|
||||||
membuffer.lock().push(buffer);
|
membuffer.lock().push(buffer);
|
||||||
})));
|
})));
|
||||||
let size_t = if self.isa == Isa::Host { 64 } else { 32 };
|
let size_t = if self.isa == Isa::Host { 64 } else { 32 };
|
||||||
let thread_names: Vec<String> = (0..4).map(|_| "main".to_string()).collect();
|
let num_threads = if is_multithreaded() { 4 } else { 1 };
|
||||||
|
let thread_names: Vec<String> = (0..num_threads).map(|_| "main".to_string()).collect();
|
||||||
let threads: Vec<_> = thread_names
|
let threads: Vec<_> = thread_names
|
||||||
.iter()
|
.iter()
|
||||||
.map(|s| Box::new(ArtiqCodeGenerator::new(s.to_string(), size_t, self.time_fns)))
|
.map(|s| Box::new(ArtiqCodeGenerator::new(s.to_string(), size_t, self.time_fns)))
|
||||||
|
|
|
@ -10,7 +10,6 @@ crossbeam = "0.8"
|
||||||
parking_lot = "0.12"
|
parking_lot = "0.12"
|
||||||
rayon = "1.5"
|
rayon = "1.5"
|
||||||
nac3parser = { path = "../nac3parser" }
|
nac3parser = { path = "../nac3parser" }
|
||||||
lazy_static = "1.4"
|
|
||||||
|
|
||||||
[dependencies.inkwell]
|
[dependencies.inkwell]
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
|
|
|
@ -31,9 +31,8 @@ else
|
||||||
nac3standalone=../../target/x86_64-unknown-linux-gnu/release/nac3standalone
|
nac3standalone=../../target/x86_64-unknown-linux-gnu/release/nac3standalone
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
rm -f ./*.o ./*.bc demo
|
||||||
if [ -z "$use_lli" ]; then
|
if [ -z "$use_lli" ]; then
|
||||||
rm -f "*.o" demo
|
|
||||||
|
|
||||||
$nac3standalone "${nac3args[@]}"
|
$nac3standalone "${nac3args[@]}"
|
||||||
|
|
||||||
clang -c -std=gnu11 -Wall -Wextra -O3 -o demo.o demo.c
|
clang -c -std=gnu11 -Wall -Wextra -O3 -o demo.o demo.c
|
||||||
|
@ -45,15 +44,17 @@ if [ -z "$use_lli" ]; then
|
||||||
./demo > "$outfile"
|
./demo > "$outfile"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
rm -f "*.o" "*.bc" demo
|
|
||||||
|
|
||||||
$nac3standalone --emit-llvm "${nac3args[@]}"
|
$nac3standalone --emit-llvm "${nac3args[@]}"
|
||||||
|
|
||||||
clang -c -std=gnu11 -Wall -Wextra -O3 -emit-llvm -o demo.bc demo.c
|
clang -c -std=gnu11 -Wall -Wextra -O3 -emit-llvm -o demo.bc demo.c
|
||||||
|
|
||||||
|
shopt -s nullglob
|
||||||
|
llvm-link -o nac3out.bc module*.bc main.bc
|
||||||
|
shopt -u nullglob
|
||||||
|
|
||||||
if [ -z "$outfile" ]; then
|
if [ -z "$outfile" ]; then
|
||||||
lli --extra-module demo.bc --extra-module irrt.bc main.bc
|
lli --extra-module demo.bc --extra-module irrt.bc nac3out.bc
|
||||||
else
|
else
|
||||||
lli --extra-module demo.bc --extra-module irrt.bc main.bc > "$outfile"
|
lli --extra-module demo.bc --extra-module irrt.bc nac3out.bc > "$outfile"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -2,6 +2,7 @@ use clap::Parser;
|
||||||
use inkwell::{
|
use inkwell::{
|
||||||
memory_buffer::MemoryBuffer,
|
memory_buffer::MemoryBuffer,
|
||||||
passes::PassBuilderOptions,
|
passes::PassBuilderOptions,
|
||||||
|
support::is_multithreaded,
|
||||||
targets::*,
|
targets::*,
|
||||||
OptimizationLevel,
|
OptimizationLevel,
|
||||||
};
|
};
|
||||||
|
@ -38,8 +39,9 @@ struct CommandLineArgs {
|
||||||
/// The name of the input file.
|
/// The name of the input file.
|
||||||
file_name: String,
|
file_name: String,
|
||||||
|
|
||||||
/// The number of threads allocated to processing the source file.
|
/// The number of threads allocated to processing the source file. If 0 is passed to this
|
||||||
#[arg(default_value_t = 1)]
|
/// parameter, all available threads will be used for compilation.
|
||||||
|
#[arg(short = 'T', default_value_t = 1)]
|
||||||
threads: u32,
|
threads: u32,
|
||||||
|
|
||||||
/// The level to optimize the LLVM IR.
|
/// The level to optimize the LLVM IR.
|
||||||
|
@ -47,6 +49,8 @@ struct CommandLineArgs {
|
||||||
opt_level: u32,
|
opt_level: u32,
|
||||||
|
|
||||||
/// Whether to emit LLVM IR at the end of every module.
|
/// Whether to emit LLVM IR at the end of every module.
|
||||||
|
///
|
||||||
|
/// If multithreaded compilation is also enabled, each thread will emit its own module.
|
||||||
#[arg(long, default_value_t = false)]
|
#[arg(long, default_value_t = false)]
|
||||||
emit_llvm: bool,
|
emit_llvm: bool,
|
||||||
|
|
||||||
|
@ -207,6 +211,20 @@ fn main() {
|
||||||
.map(|arg| if arg == "native" { host_target_machine.cpu.clone() } else { arg })
|
.map(|arg| if arg == "native" { host_target_machine.cpu.clone() } else { arg })
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
let target_features = target_features.unwrap_or_default();
|
let target_features = target_features.unwrap_or_default();
|
||||||
|
let threads = if is_multithreaded() {
|
||||||
|
if threads == 0 {
|
||||||
|
std::thread::available_parallelism()
|
||||||
|
.map(|threads| threads.get() as u32)
|
||||||
|
.unwrap_or(1u32)
|
||||||
|
} else {
|
||||||
|
threads
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if threads != 1 {
|
||||||
|
println!("Warning: Number of threads specified in command-line but multithreading is disabled in LLVM at build time! Defaulting to single-threaded compilation")
|
||||||
|
}
|
||||||
|
1
|
||||||
|
};
|
||||||
let opt_level = match opt_level {
|
let opt_level = match opt_level {
|
||||||
0 => OptimizationLevel::None,
|
0 => OptimizationLevel::None,
|
||||||
1 => OptimizationLevel::Less,
|
1 => OptimizationLevel::Less,
|
||||||
|
|
|
@ -112,7 +112,7 @@ in stdenv.mkDerivation (rec {
|
||||||
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
|
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
|
||||||
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
|
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
|
||||||
"-DLLVM_ENABLE_UNWIND_TABLES=OFF"
|
"-DLLVM_ENABLE_UNWIND_TABLES=OFF"
|
||||||
"-DLLVM_ENABLE_THREADS=OFF"
|
"-DLLVM_ENABLE_THREADS=ON"
|
||||||
"-DLLVM_INCLUDE_BENCHMARKS=OFF"
|
"-DLLVM_INCLUDE_BENCHMARKS=OFF"
|
||||||
"-DLLVM_BUILD_TOOLS=OFF"
|
"-DLLVM_BUILD_TOOLS=OFF"
|
||||||
"-DLLVM_TARGETS_TO_BUILD=X86;ARM;RISCV"
|
"-DLLVM_TARGETS_TO_BUILD=X86;ARM;RISCV"
|
||||||
|
|
|
@ -65,7 +65,7 @@ in rec {
|
||||||
${silenceFontconfig}
|
${silenceFontconfig}
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
wine64 cmake .. -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_UNWIND_TABLES=OFF -DLLVM_ENABLE_THREADS=OFF -DLLVM_TARGETS_TO_BUILD=X86\;ARM\;RISCV -DLLVM_LINK_LLVM_DYLIB=OFF -DLLVM_ENABLE_FFI=OFF -DFFI_INCLUDE_DIR=fck-cmake -DFFI_LIBRARY_DIR=fck-cmake -DLLVM_ENABLE_LIBXML2=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_INSTALL_PREFIX=Z:$out
|
wine64 cmake .. -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_UNWIND_TABLES=OFF -DLLVM_ENABLE_THREADS=ON -DLLVM_TARGETS_TO_BUILD=X86\;ARM\;RISCV -DLLVM_LINK_LLVM_DYLIB=OFF -DLLVM_ENABLE_FFI=OFF -DFFI_INCLUDE_DIR=fck-cmake -DFFI_LIBRARY_DIR=fck-cmake -DLLVM_ENABLE_LIBXML2=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_INSTALL_PREFIX=Z:$out
|
||||||
'';
|
'';
|
||||||
buildPhase =
|
buildPhase =
|
||||||
''
|
''
|
||||||
|
|
Loading…
Reference in New Issue