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")