diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fda14f3cb7ef2b05d0c9b87ad6629e88b45e5456..ca97c8a7be56a06bc025fb410858f424b9e32e92 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-24  Jakub Jelinek  <jakub@redhat.com>
+
+	PR target/52555
+	* target-globals.c (save_target_globals): For init_reg_sets and
+	target_reinit remporarily set this_fn_optabs to this_target_optabs.
+
 2013-02-22  James Grennahlgh  <james.greenhalgh@arm.com>
 
 	* config/aarch64/aarch64-simd-builtins.def: Add copyright header.
diff --git a/gcc/target-globals.c b/gcc/target-globals.c
index d72495da26d284a59038a6a8d8bab21cd3ba51f3..65ccb8af5e6a627df5cf0f3477ba3bede040270f 100644
--- a/gcc/target-globals.c
+++ b/gcc/target-globals.c
@@ -67,6 +67,7 @@ struct target_globals *
 save_target_globals (void)
 {
   struct target_globals *g;
+  struct target_optabs *saved_this_fn_optabs = this_fn_optabs;
 
   g = ggc_alloc_target_globals ();
   g->flag_state = XCNEW (struct target_flag_state);
@@ -86,8 +87,10 @@ save_target_globals (void)
   g->bb_reorder = XCNEW (struct target_bb_reorder);
   g->lower_subreg = XCNEW (struct target_lower_subreg);
   restore_target_globals (g);
+  this_fn_optabs = this_target_optabs;
   init_reg_sets ();
   target_reinit ();
+  this_fn_optabs = saved_this_fn_optabs;
   return g;
 }