Author: shenruifen
Date: 2011-08-17 04:50:26 -0400 (Wed, 17 Aug 2011)
New Revision: 3720

Modified:
   trunk/osprey/be/cg/SL/exp_divrem.cxx
   trunk/osprey/be/cg/tn.h
   trunk/osprey/be/cg/whirl2ops.cxx
Log:
Another patch for SL target based on version 3713
"fixed EBO phase BUG in -O1 with DBG compiler"

Build_TN_of_Mtype is overwrote for emulated longlong and float point type.

Approved by Sun Chan & wuyongchong



Modified: trunk/osprey/be/cg/SL/exp_divrem.cxx
===================================================================
--- trunk/osprey/be/cg/SL/exp_divrem.cxx        2011-08-17 06:37:34 UTC (rev 
3719)
+++ trunk/osprey/be/cg/SL/exp_divrem.cxx        2011-08-17 08:50:26 UTC (rev 
3720)
@@ -88,24 +88,6 @@
   /* NOTREACHED */
 }
 
-extern void Add_TN_Pair(TN *key, TN *pair);
-
-TN *Build_TN_Of_Mtype_64(TYPE_ID mtype)
-{
-  TN *res;
-  TYPE_ID mtype_t;
-  BOOL is_double = MTYPE_is_size_double(mtype);
-  
-  if (is_double) {
-    mtype_t = (MTYPE_is_signed(mtype) ? MTYPE_I4 : MTYPE_U4);
-    res = Build_TN_Of_Mtype(mtype_t);
-    Add_TN_Pair(res, Build_TN_Of_Mtype(mtype_t));
-  } else {
-    res = Build_TN_Of_Mtype(mtype);
-  }
-  return res;
-}
-
 /* Expand the sequence for division by a power of two. It is the
  * caller's job to verify that divisor is a non-zero power of two.
  */
@@ -125,11 +107,11 @@
   else {
     INT64 absdvsr = dvsr < 0 ? -dvsr : dvsr;
     BOOL is_double = MTYPE_is_size_double(mtype);
-    TN *t1 = Build_TN_Of_Mtype_64(mtype);
-    TN *t2 = Build_TN_Of_Mtype_64(mtype);
-    TN *t3 = Build_TN_Of_Mtype_64(mtype);
-    TN *t4 = Build_TN_Of_Mtype_64(mtype);
-    TN *t5 = (dvsr < 0) ? Build_TN_Of_Mtype_64(mtype) : result;
+    TN *t1 = Build_TN_Of_Mtype(mtype);
+    TN *t2 = Build_TN_Of_Mtype(mtype);
+    TN *t3 = Build_TN_Of_Mtype(mtype);
+    TN *t4 = Build_TN_Of_Mtype(mtype);
+    TN *t5 = (dvsr < 0) ? Build_TN_Of_Mtype(mtype) : result;
 
     Expand_Shift(t1, numer, Gen_Literal_TN(is_double?63:31, 4), mtype, 
shift_aright, ops);
     Expand_Immediate (t2, Gen_Literal_TN (absdvsr - 1, is_double?8:4), mtype, 
ops);
@@ -455,7 +437,7 @@
 {
   BOOL is_double = MTYPE_is_size_double(mtype);
   INT n = Get_Power_Of_2(src2_val, mtype);
-  TN *con = Build_TN_Of_Mtype_64(mtype);
+  TN *con = Build_TN_Of_Mtype(mtype);
   Expand_Immediate(con, Gen_Literal_TN((1LL<<n)-1, is_double?8:4), mtype, ops);
 
   Is_True((MTYPE_is_integral(mtype)) ,
@@ -463,8 +445,8 @@
 
 
   if (MTYPE_is_signed(mtype)) {
-    TN *tmp1 = Build_TN_Of_Mtype_64(mtype);
-    TN *tmp2 = Build_TN_Of_Mtype_64(mtype);
+    TN *tmp1 = Build_TN_Of_Mtype(mtype);
+    TN *tmp2 = Build_TN_Of_Mtype(mtype);
 
     // tmp1 = src1 >= 0 ? src1 : -src1;
     Expand_Abs (tmp1, src1, mtype, ops);
@@ -476,8 +458,8 @@
     // result = (src1 >= 0) ? tmp2 : -tmp2;
     int unsignedflag = !MTYPE_is_signed(mtype);
     if (is_double) {
-       TN *cond_tn = Build_TN_Of_Mtype_64(MTYPE_I4);
-       TN *tmp3 = Build_TN_Of_Mtype_64(mtype);
+       TN *cond_tn = Build_TN_Of_Mtype(MTYPE_I4);
+       TN *tmp3 = Build_TN_Of_Mtype(mtype);
        
        extern void Expand_Int_Greater_Equal (TN *dest, TN *src1, TN *src2, 
TYPE_ID mtype, OPS *ops);
        Expand_Int_Greater_Equal(cond_tn, src1, Zero_TN, mtype, ops);
@@ -513,16 +495,16 @@
   BOOL is_double = MTYPE_is_size_double(mtype);
   INT64 absval = src2_val < 0 ? -src2_val : src2_val;
   INT  n      = Get_Power_Of_2(absval, mtype);
-  TN *con = Build_TN_Of_Mtype_64(mtype);
+  TN *con = Build_TN_Of_Mtype(mtype);
   Expand_Immediate(con, Gen_Literal_TN((1LL<<n)-1, is_double?8:4), mtype, ops);
 
   if (MTYPE_is_signed(mtype) && src2_val < 0) {
     TN *tmp1, *tmp2;
 
-    tmp1 = Build_TN_Of_Mtype_64(mtype);
+    tmp1 = Build_TN_Of_Mtype(mtype);
     Expand_Neg(tmp1, src1, mtype, ops);
 
-    tmp2 = Build_TN_Of_Mtype_64(mtype);
+    tmp2 = Build_TN_Of_Mtype(mtype);
     Expand_Binary_And(tmp2, tmp1, con, mtype, ops);
 
     Expand_Neg(result, tmp2, mtype, ops);

Modified: trunk/osprey/be/cg/tn.h
===================================================================
--- trunk/osprey/be/cg/tn.h     2011-08-17 06:37:34 UTC (rev 3719)
+++ trunk/osprey/be/cg/tn.h     2011-08-17 08:50:26 UTC (rev 3720)
@@ -873,8 +873,39 @@
 
 inline TN *Build_TN_Of_Mtype(TYPE_ID mtype)
 {
-  ISA_REGISTER_CLASS rc = Register_Class_For_Mtype(mtype);
-  return Gen_Register_TN (rc, MTYPE_RegisterSize(mtype) );
+  ISA_REGISTER_CLASS rc;  // register class
+  INT rs;                 // register size
+#ifdef TARG_SL
+  extern void Create_TN_Pair(TN* key, TN* pair);
+#ifdef EMULATE_LONGLONG
+  if (mtype == MTYPE_I8 || mtype == MTYPE_U8) {
+    TYPE_ID new_mtype = (mtype == MTYPE_I8 ? MTYPE_I4 : MTYPE_U4);
+    rc = Register_Class_For_Mtype(new_mtype);
+    rs = MTYPE_RegisterSize(new_mtype);
+    TN *tn1 = Gen_Register_TN (rc, rs);
+    TN *tn2 = Gen_Register_TN (rc, rs);
+    Create_TN_Pair (tn1, tn2);
+    return tn1;
+  }
+#endif
+#ifdef EMULATE_FLOAT_POINT
+  if (mtype == MTYPE_F8) {
+    rc = Register_Class_For_Mtype(MTYPE_U4);
+    rs = MTYPE_RegisterSize(MTYPE_U4);
+    TN *tn1 = Gen_Register_TN (rc, rs);
+    TN *tn2 = Gen_Register_TN (rc, rs);
+    Create_TN_Pair (tn1, tn2);
+    return tn1;
+  } else if (mtype = MTYPE_F4) {
+    rc = Register_Class_For_Mtype(MTYPE_U4);
+    rs = MTYPE_RegisterSize(MTYPE_U4);
+    return Gen_Register_TN (rc, rs);
+  }
+#endif
+#endif
+  rc = Register_Class_For_Mtype(mtype);
+  rs = MTYPE_RegisterSize(mtype);
+  return Gen_Register_TN (rc, rs);
 }
 
 extern TN *Dup_TN ( TN *tn );  /* Duplicate an existing TN */

Modified: trunk/osprey/be/cg/whirl2ops.cxx
===================================================================
--- trunk/osprey/be/cg/whirl2ops.cxx    2011-08-17 06:37:34 UTC (rev 3719)
+++ trunk/osprey/be/cg/whirl2ops.cxx    2011-08-17 08:50:26 UTC (rev 3720)
@@ -919,7 +919,6 @@
 
 }
 
-
 /* Create a new result TN for the WHIRL node wn. We pass in the opnd_tn
  * array that contains the TNs allocated for each operand. This could
  * used to do value numbering if desired.
@@ -931,35 +930,11 @@
 Allocate_Result_TN (WN *wn, TN **opnd_tn)
 {
 #ifdef TARG_SL
+  return Build_TN_Of_Mtype(WN_rtype(wn));
+#else
 
 #ifdef EMULATE_LONGLONG
-  TYPE_ID mtype = WN_rtype(wn);
-  if (MTYPE_is_longlong(mtype)) {
-    TYPE_ID new_mtype = (mtype == MTYPE_I8 ? MTYPE_I4 : MTYPE_U4);
-    TN *tn  = Build_TN_Of_Mtype (new_mtype);
-    TN *tn2 = Build_TN_Of_Mtype (new_mtype);
-    Add_TN_Pair (tn, tn2);
-    return tn;
-  }
-#endif
 
-#ifdef EMULATE_FLOAT_POINT
-  if (mtype == MTYPE_F8) {
-    TN *tn   = Build_TN_Of_Mtype(MTYPE_U4);
-    TN *pair = Build_TN_Of_Mtype(MTYPE_U4);
-    Add_TN_Pair (tn, pair);
-    return tn;
-  } else if (mtype = MTYPE_F4) {
-    return Build_TN_Of_Mtype(MTYPE_U4);
-  }
-#endif 
-
-  return Build_TN_Of_Mtype (mtype);
-
-#else // !defined(TARG_SL)
-
-#ifdef EMULATE_LONGLONG
-
   TYPE_ID mtype = WN_rtype(wn);
   if (mtype == MTYPE_I8 || mtype == MTYPE_U8) {
     TYPE_ID new_mtype = (mtype == MTYPE_I8 ? MTYPE_I4 : MTYPE_U4);
@@ -1301,27 +1276,6 @@
       } else {
         tn = Build_TN_Of_Mtype (mtype);
       }
-#elif defined(TARG_SL)
-
-#ifdef EMULATE_LONGLONG
-      if (mtype == MTYPE_I8 || mtype == MTYPE_U8) {
-        mtype = (mtype == MTYPE_I8 ? MTYPE_I4 : MTYPE_U4);
-        tn = Build_TN_Of_Mtype(mtype);
-        Add_TN_Pair(tn, Build_TN_Of_Mtype(mtype));
-      } else 
-#endif      
-
-#ifdef EMULATE_FLOAT_POINT 
-      if (mtype == MTYPE_F8) {
-        TN* pair = Build_TN_Of_Mtype(MTYPE_U4);
-        tn = Build_TN_Of_Mtype(MTYPE_U4);
-        Add_TN_Pair(tn, pair);
-      } else if (mtype == MTYPE_F4) {
-        tn = Build_TN_Of_Mtype(MTYPE_U4);
-      } else       
-#endif
-       tn = Build_TN_Of_Mtype (mtype);
-
 #else
 #ifdef TARG_X8664
       if( OP_NEED_PAIR(mtype) ){
@@ -2898,9 +2852,9 @@
     // for U8STBITS
     // allocate a larger TN if bit deposit may run out of range
     if(MTYPE_byte_size(rtype) > MTYPE_byte_size(WN_rtype(kid)))
-      field_tn = Build_TN_Of_Mtype (rtype);
+      field_tn = Build_TN_Of_Mtype(rtype);
     else
-      field_tn = Allocate_Result_TN (kid, NULL);
+      field_tn = Allocate_Result_TN(kid, NULL);
     Last_Mem_OP = OPS_last(&New_OPs);
     Exp_Load(rtype, desc, field_tn, WN_st(stbits), WN_load_offset(stbits),
             &New_OPs, variant); // must do an unsigned load
@@ -2909,9 +2863,9 @@
     // for U8STBITS
     // allocate a larger TN if bit deposit may run out of range
     if(MTYPE_byte_size(rtype) > MTYPE_byte_size(WN_rtype(kid)))
-      result = Build_TN_Of_Mtype (rtype);
+      result = Build_TN_Of_Mtype(rtype);
     else
-      result = Allocate_Result_TN (kid, NULL);
+      result = Allocate_Result_TN(kid, NULL);
   }
 
 #ifdef TARG_PPC32
@@ -3126,11 +3080,11 @@
   // for U8ISTBITS
   // allocate larger TNs if bit deposit may run out of range
   if(MTYPE_byte_size(rtype) > MTYPE_byte_size(WN_rtype(kid0))) {
-    result = Build_TN_Of_Mtype (rtype);
-    field_tn = Build_TN_Of_Mtype (rtype);
+    result = Build_TN_Of_Mtype(rtype);
+    field_tn = Build_TN_Of_Mtype(rtype);
   }else{
-    result = Allocate_Result_TN (kid0, NULL);
-    field_tn = Allocate_Result_TN (kid0, NULL);
+    result = Allocate_Result_TN(kid0, NULL);
+    field_tn = Allocate_Result_TN(kid0, NULL);
   }
 
   // guard against U1MPY or U2MPY


------------------------------------------------------------------------------
Get a FREE DOWNLOAD! and learn more about uberSVN rich system, 
user administration capabilities and model configuration. Take 
the hassle out of deploying and managing Subversion and the 
tools developers use with it. http://p.sf.net/sfu/wandisco-d2d-2
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to