about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark Simulacrum <mark.simulacrum@gmail.com>2016-12-19 21:41:03 -0700
committerMark Simulacrum <mark.simulacrum@gmail.com>2016-12-20 20:04:46 -0700
commitc1bc5e51d6cb6ea997da1757e16ddb1b9093d25e (patch)
treef12873346dce9082fb1dde00f77dc0404707d916
parenta9b5c63d437c71c5ee11581a75e8fdecf8a1794c (diff)
Improve cache quality for eh_personality.
-rw-r--r--src/librustc_trans/context.rs16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/librustc_trans/context.rs b/src/librustc_trans/context.rs
index 0f56aa70bd9..f292a709650 100644
--- a/src/librustc_trans/context.rs
+++ b/src/librustc_trans/context.rs
@@ -927,26 +927,26 @@ impl<'b, 'tcx> CrateContext<'b, 'tcx> {
         // `rust_eh_personality` function, but rather we wired it up to the
         // CRT's custom personality function, which forces LLVM to consider
         // landing pads as "landing pads for SEH".
+        if let Some(llpersonality) = self.local().eh_personality.get() {
+            return llpersonality
+        }
         let tcx = self.tcx();
-        match tcx.lang_items.eh_personality() {
+        let llfn = match tcx.lang_items.eh_personality() {
             Some(def_id) if !base::wants_msvc_seh(self.sess()) => {
                 Callee::def(self, def_id, tcx.intern_substs(&[])).reify(self)
             }
             _ => {
-                if let Some(llpersonality) = self.local().eh_personality.get() {
-                    return llpersonality
-                }
                 let name = if base::wants_msvc_seh(self.sess()) {
                     "__CxxFrameHandler3"
                 } else {
                     "rust_eh_personality"
                 };
                 let fty = Type::variadic_func(&[], &Type::i32(self));
-                let f = declare::declare_cfn(self, name, fty);
-                self.local().eh_personality.set(Some(f));
-                f
+                declare::declare_cfn(self, name, fty)
             }
-        }
+        };
+        self.local().eh_personality.set(Some(llfn));
+        llfn
     }
 
     // Returns a ValueRef of the "eh_unwind_resume" lang item if one is defined,