diff --git a/hercules_cg/src/cpu.rs b/hercules_cg/src/cpu.rs index 7d87170baa08322ba44bec42f34b6a132ecd8a35..a19218c7ed459834a605b9fd2adde795b479170d 100644 --- a/hercules_cg/src/cpu.rs +++ b/hercules_cg/src/cpu.rs @@ -103,8 +103,9 @@ impl<'a> CPUContext<'a> { } else { write!( w, - "{} noalias nofree nonnull noundef %p{}", + "{} noalias nofree nonnull noundef align({}) %p{}", self.get_type(*ty), + get_type_alignment(&self.types, *ty), idx )?; } @@ -506,10 +507,11 @@ impl<'a> CPUContext<'a> { // load. write!( body, - " {} = load {}, ptr {}\n", + " {} = load {}, ptr {}, align {}\n", self.get_value(id, false), self.get_type(self_ty), - index_ptr_name + index_ptr_name, + get_type_alignment(self.types, collect_ty), )?; } else { // If this read doesn't reach a primitive type, just return @@ -538,9 +540,10 @@ impl<'a> CPUContext<'a> { // perform a single store of the data value. write!( body, - " store {}, ptr {}\n", + " store {}, ptr {}, align {}\n", self.get_value(data, true), - index_ptr_name + index_ptr_name, + get_type_alignment(self.types, collect_ty), )?; } else { // If the data item being written is not a primitive type, diff --git a/juno_scheduler/src/pm.rs b/juno_scheduler/src/pm.rs index 410e614c97d44657437222a71fc8d1918ddba955..1c00e3d034fc30a69756c67a7b0a5131f473d05d 100644 --- a/juno_scheduler/src/pm.rs +++ b/juno_scheduler/src/pm.rs @@ -795,6 +795,7 @@ impl PassManager { .arg(&llvm_path) .arg("-c") .arg("-O3") + .arg("-ffast-math") .arg("-march=native") .arg("-o") .arg(&llvm_object) @@ -830,6 +831,8 @@ impl PassManager { let mut nvcc_process = Command::new("nvcc") .arg("-c") .arg("-O3") + .arg("-ffast-math") + .arg("-march=native") .arg("-diag-suppress") .arg("177") .arg("-o")