Author: aagarwa
Date: 2011-03-07 04:02:58 -0500 (Mon, 07 Mar 2011)
New Revision: 3508

Modified:
   trunk/osprey/be/com/opt_cvtl_rule.cxx
   trunk/osprey/be/com/wn_lower.cxx
   trunk/osprey/be/opt/opt_emit_template.h
   trunk/osprey/wgen/wgen_expr.cxx
Log:
Fix bug Id 723 739 and 741. If def for X8664 for the changes I made
to fix bug Id 732 with the checkin rev 3499. Made changes for CVT
not needed for vector types and the CVT generated by LNO has to 
be kept. Added the check for gs_decl_initial for GS_VAR_DECL operand

Code reviewed by Sun Chan.



Modified: trunk/osprey/be/com/opt_cvtl_rule.cxx
===================================================================
--- trunk/osprey/be/com/opt_cvtl_rule.cxx       2011-03-06 11:59:41 UTC (rev 
3507)
+++ trunk/osprey/be/com/opt_cvtl_rule.cxx       2011-03-07 09:02:58 UTC (rev 
3508)
@@ -160,6 +160,12 @@
 #endif
   if (!(MTYPE_is_integral(from_ty) && MTYPE_is_integral(to_ty))) {
     if (from_ty == to_ty) return NOT_AT_ALL;
+#ifdef TARG_X8664
+  if (MTYPE_is_vector(from_ty) && MTYPE_is_vector(to_ty) &&
+       MTYPE_is_mmx_vector(from_ty) == MTYPE_is_mmx_vector(to_ty)) {
+    return NOT_AT_ALL;
+  }
+#endif
     if (opc != NULL) 
       *opc = OPCODE_make_op(OPR_CVT, to_ty, from_ty);
     return NEED_CVT;

Modified: trunk/osprey/be/com/wn_lower.cxx
===================================================================
--- trunk/osprey/be/com/wn_lower.cxx    2011-03-06 11:59:41 UTC (rev 3507)
+++ trunk/osprey/be/com/wn_lower.cxx    2011-03-07 09:02:58 UTC (rev 3508)
@@ -4855,11 +4855,15 @@
 #endif // TARG_X8664 || VECTOR_MTYPES
 
     case MTYPE_M:
+#if defined(TARG_X8664)
       WN_st_idx(tree) = ST_st_idx(MTYPE_To_PREG(MTYPE_U8));
       WN_load_offset(tree) = First_Int_Preg_Return_Offset;
       WN_set_rtype(tree, MTYPE_U8);
       WN_set_desc(tree, MTYPE_U8);
       return tree;
+#endif
+      Fail_FmtAssertion ("MLDID of Return_Val_Preg not allowed in middle"
+                         " of expression");
       /*NOTREACHED*/
     default:
       Fail_FmtAssertion ("Unexpected type in lower_return_ldid");
@@ -11394,8 +11398,11 @@
                                                          : parm;
 
     ploc = Get_Output_Parameter_Location(TY_Of_Parameter(parm));
-    if (MTYPE_is_m(parmType)&&(WN_operator(actual) != OPR_LDID))
-    {
+#ifdef TARG_X8664
+    if (MTYPE_is_m(parmType)&&(WN_operator(actual) != OPR_LDID)){
+#else
+    if (MTYPE_is_m(parmType)){
+#endif
      /*
       * structure parameter
       */

Modified: trunk/osprey/be/opt/opt_emit_template.h
===================================================================
--- trunk/osprey/be/opt/opt_emit_template.h     2011-03-06 11:59:41 UTC (rev 
3507)
+++ trunk/osprey/be/opt/opt_emit_template.h     2011-03-07 09:02:58 UTC (rev 
3508)
@@ -106,9 +106,16 @@
        if (WOPT_Enable_Cvt_Folding && !emitter->For_preopt()) {
          INT    cvt_kind;
          OPCODE opc;
-         cvt_kind =
-           Need_type_conversion(exp->Dsctyp(), exp->Dtyp(), &opc);//326120
-
+          if (MTYPE_is_vector(exp->Dtyp()) && MTYPE_is_vector(exp->Dsctyp())
+              && exp->Dtyp() != exp->Dsctyp()) {
+            opc = OPCODE_make_op(OPR_CVT, exp->Dtyp(), exp->Dsctyp());
+            cvt_kind = NEED_CVT;
+          }
+          else
+          {
+           cvt_kind =
+             Need_type_conversion(exp->Dsctyp(), exp->Dtyp(), &opc);//326120
+          }
          CODEREP *kid = exp->Get_opnd(0);
          if (cvt_kind == NEED_CVT) {
            

Modified: trunk/osprey/wgen/wgen_expr.cxx
===================================================================
--- trunk/osprey/wgen/wgen_expr.cxx     2011-03-06 11:59:41 UTC (rev 3507)
+++ trunk/osprey/wgen/wgen_expr.cxx     2011-03-07 09:02:58 UTC (rev 3508)
@@ -9828,6 +9828,7 @@
              TY_mtype(TY_pointed(ty_idx)) == MTYPE_V) /* pointer to void */
            ty_idx = nop_ty_idx;
 #endif
+#ifdef TARG_X8664
           if((ret_mtype == MTYPE_M) && (Is_Target_64bit()))
           {
             for (list = gs_tree_operand (exp, 1); list;
@@ -9836,14 +9837,21 @@
               {
                 if (gs_tree_code(
                     gs_tree_operand(gs_tree_value (list),0)) == GS_VAR_DECL )
-                  is_gs_addr_arg = TRUE;
+                {
+                  gs_t argument = gs_tree_operand(gs_tree_value (list),0);
+                  if(gs_decl_initial(argument))
+                    is_gs_addr_arg = TRUE;
+                }
               }
            }
          }
+#endif
          wn1 = WN_Ldid (ret_mtype, -1, Return_Val_Preg, ty_idx);
-
+#ifdef TARG_X8664
          if (ret_mtype == MTYPE_M && (!is_gs_addr_arg)) { // copy the -1 preg 
to a temp area
-
+#else
+          if (ret_mtype == MTYPE_M){// copy the -1 preg to a temp area
+#endif
            TY_IDX ret_ty_idx = ty_idx;
             is_gs_addr_arg = FALSE;
 #ifndef KEY


------------------------------------------------------------------------------
What You Don't Know About Data Connectivity CAN Hurt You
This paper provides an overview of data connectivity, details
its effect on application quality, and explores various alternative
solutions. http://p.sf.net/sfu/progress-d2d
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to