Author: yug
Date: 2012-03-19 04:54:08 -0400 (Mon, 19 Mar 2012)
New Revision: 3887

Modified:
   trunk/osprey/wgen/wgen_stmt.cxx
Log:
fix for bug798.

When we build switch construct in wgen, if the
switch index is a constant. we don't generate 
the index var, instead, we use constant the as switch 
expression directly. This helps compiler eliminates the 
unreachable branch code even at O0 phase.

Code Review: Chandrasekhar Murthy. 


Modified: trunk/osprey/wgen/wgen_stmt.cxx
===================================================================
--- trunk/osprey/wgen/wgen_stmt.cxx     2012-03-19 03:37:07 UTC (rev 3886)
+++ trunk/osprey/wgen/wgen_stmt.cxx     2012-03-19 08:54:08 UTC (rev 3887)
@@ -2722,10 +2722,18 @@
   // The switch index may be needed more than once if it contains case
   // range. As it may have side-effects like a function call, save the
   // index into a temporary, and used the saved value.
-  ST *save_expr_st = Gen_Temp_Symbol (MTYPE_TO_TY_array[index_mtype], 
"_switch_index");
-  WN *stid = WN_Stid (index_mtype, 0, save_expr_st, 
MTYPE_TO_TY_array[index_mtype], index);
-  WGEN_Stmt_Append(stid, Get_Srcpos());
-  index = WN_Ldid(index_mtype, 0, save_expr_st, 
MTYPE_TO_TY_array[index_mtype]);
+
+  // open64.net bug798. when the switch index is a constant,
+  // we don't generate the index var, instead, we use constant the as switch 
+  // expression directly. This helps compiler eliminates the unreachable
+  // branch code even at O0 phase.
+
+  if ( WN_operator(index) != OPR_INTCONST) {
+    ST *save_expr_st = Gen_Temp_Symbol (MTYPE_TO_TY_array[index_mtype], 
"_switch_index");
+    WN *stid = WN_Stid (index_mtype, 0, save_expr_st, 
MTYPE_TO_TY_array[index_mtype], index);
+    WGEN_Stmt_Append(stid, Get_Srcpos());
+    index = WN_Ldid(index_mtype, 0, save_expr_st, 
MTYPE_TO_TY_array[index_mtype]);
+  }
 #endif
 
   WGEN_Stmt_Push (switch_block, wgen_stmk_switch, Get_Srcpos());


------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to