Reviewed and approved by Jian-Xin Lai. Thanks!



________________________________
From: "s...@open64.net" <s...@open64.net>
To: open64-devel@lists.sourceforge.net
Sent: Tue, October 19, 2010 3:49:38 PM
Subject: [Open64-devel] r3377 - in trunk/osprey/be: cg cg/MIPS cg/NVISA cg/SL 
cg/ia64 cg/loongson cg/ppc32 cg/x8664 com

Author: xiaohua_zhang
Date: 2010-10-19 18:49:38 -0400 (Tue, 19 Oct 2010)
New Revision: 3377

Modified:
  trunk/osprey/be/cg/MIPS/cgtarget.cxx
  trunk/osprey/be/cg/NVISA/cgtarget.cxx
  trunk/osprey/be/cg/SL/cgtarget.cxx
  trunk/osprey/be/cg/cgtarget.h
  trunk/osprey/be/cg/ia64/cgtarget.cxx
  trunk/osprey/be/cg/loongson/cgtarget.cxx
  trunk/osprey/be/cg/ppc32/cgtarget.cxx
  trunk/osprey/be/cg/whirl2ops.cxx
  trunk/osprey/be/cg/x8664/cgtarget.cxx
  trunk/osprey/be/com/erbe.desc
  trunk/osprey/be/com/erbe.h
Log:
Bug 605 - Assertion failure at line 3174 of osprey/be/cg/x8664/cgtarget.cxx
          ### Cannot find immediate operand for ASM

The test case is negative test, the gcc emitts error message:

The gcc 4.6.0 emits following error:
bug605.c: In function 'foo':
bug605.c:6:3: warning: asm operand 0 probably doesn't match constraints
[enabled by default]
bug605.c:7:3: warning: asm operand 0 probably doesn't match constraints
[enabled by default]

The fix is to report an error instead of generating assertion.



Modified: trunk/osprey/be/cg/MIPS/cgtarget.cxx
===================================================================
--- trunk/osprey/be/cg/MIPS/cgtarget.cxx    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/cg/MIPS/cgtarget.cxx    2010-10-19 22:49:38 UTC (rev 3377)
@@ -1977,7 +1977,8 @@
CGTARG_TN_For_Asm_Operand (const char* constraint, 
                            const WN* load,
                            TN* pref_tn,
-                          ISA_REGISTER_SUBCLASS* subclass, TYPE_ID id)
+                          ISA_REGISTER_SUBCLASS* subclass,
+                          const WN* asm_wn, TYPE_ID id)
{
  // skip constraint modifiers:
  // = input and output parameters are separated in the WHIRL for ASM

Modified: trunk/osprey/be/cg/NVISA/cgtarget.cxx
===================================================================
--- trunk/osprey/be/cg/NVISA/cgtarget.cxx    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/cg/NVISA/cgtarget.cxx    2010-10-19 22:49:38 UTC (rev 3377)
@@ -1796,7 +1796,8 @@
CGTARG_TN_For_Asm_Operand (const char* constraint, 
                            const WN* load,
                            TN* pref_tn,
-                          ISA_REGISTER_SUBCLASS* subclass, 
+                          ISA_REGISTER_SUBCLASS* subclass,
+                          const WN* asm_wn, 
              TYPE_ID type)
{
  // skip constraint modifiers:

Modified: trunk/osprey/be/cg/SL/cgtarget.cxx
===================================================================
--- trunk/osprey/be/cg/SL/cgtarget.cxx    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/cg/SL/cgtarget.cxx    2010-10-19 22:49:38 UTC (rev 3377)
@@ -1970,7 +1970,8 @@
CGTARG_TN_For_Asm_Operand (const char* constraint, 
                            const WN* load,
                            TN* pref_tn,
-                          ISA_REGISTER_SUBCLASS* subclass, TYPE_ID id)
+                          ISA_REGISTER_SUBCLASS* subclass,
+                          const WN* asm_wn, TYPE_ID id)
{
  // skip constraint modifiers:
  // = input and output parameters are separated in the WHIRL for ASM

Modified: trunk/osprey/be/cg/cgtarget.h
===================================================================
--- trunk/osprey/be/cg/cgtarget.h    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/cg/cgtarget.h    2010-10-19 22:49:38 UTC (rev 3377)
@@ -810,12 +810,14 @@
extern TN* CGTARG_TN_For_Asm_Operand(const char* constraint, 
                                      const WN* load,
                                      TN* pref_tn,
-                                    ISA_REGISTER_SUBCLASS* subclass);
+                                    ISA_REGISTER_SUBCLASS* subclass,
+                                    const WN* asm_wn);
#else
extern TN* CGTARG_TN_For_Asm_Operand(const char* constraint, 
                                      const WN* load,
                                      TN* pref_tn,
-                                    ISA_REGISTER_SUBCLASS* subclass, 
+                                    ISA_REGISTER_SUBCLASS* subclass,
+                                    const WN* asm_wn, 
                    TYPE_ID type);
#endif


Modified: trunk/osprey/be/cg/ia64/cgtarget.cxx
===================================================================
--- trunk/osprey/be/cg/ia64/cgtarget.cxx    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/cg/ia64/cgtarget.cxx    2010-10-19 22:49:38 UTC (rev 3377)
@@ -3561,7 +3561,8 @@
CGTARG_TN_For_Asm_Operand (const char* constraint, 
                            const WN* load,
                            TN* pref_tn,
-                          ISA_REGISTER_SUBCLASS* subclass)
+                          ISA_REGISTER_SUBCLASS* subclass,
+                          const WN* asm_wn)
{
  // skip constraint modifiers:
  // = input and output parameters are separated in the WHIRL for ASM

Modified: trunk/osprey/be/cg/loongson/cgtarget.cxx
===================================================================
--- trunk/osprey/be/cg/loongson/cgtarget.cxx    2010-10-19 09:34:01 UTC (rev 
3376)
+++ trunk/osprey/be/cg/loongson/cgtarget.cxx    2010-10-19 22:49:38 UTC (rev 
3377)
@@ -1951,7 +1951,8 @@
CGTARG_TN_For_Asm_Operand(const char* constraint,
                          const WN* load,
                          TN* pref_tn,
-                          ISA_REGISTER_SUBCLASS* subclass)
+                          ISA_REGISTER_SUBCLASS* subclass,
+                          const WN* asm_wn)
{
    // skip constraint modifiers:
    // = input and output parameters are separated in the WHIRL for ASM

Modified: trunk/osprey/be/cg/ppc32/cgtarget.cxx
===================================================================
--- trunk/osprey/be/cg/ppc32/cgtarget.cxx    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/cg/ppc32/cgtarget.cxx    2010-10-19 22:49:38 UTC (rev 3377)
@@ -1864,7 +1864,8 @@
CGTARG_TN_For_Asm_Operand (const char* constraint, 
                            const WN* load,
                            TN* pref_tn,
-                          ISA_REGISTER_SUBCLASS* subclass)
+                          ISA_REGISTER_SUBCLASS* subclass,
+                          const WN* asm_wn)
{
  // skip constraint modifiers:
  // = input and output parameters are separated in the WHIRL for ASM

Modified: trunk/osprey/be/cg/whirl2ops.cxx
===================================================================
--- trunk/osprey/be/cg/whirl2ops.cxx    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/cg/whirl2ops.cxx    2010-10-19 22:49:38 UTC (rev 3377)
@@ -6649,9 +6649,9 @@
    ISA_REGISTER_SUBCLASS subclass = ISA_REGISTER_SUBCLASS_UNDEFINED;

#if defined(TARG_IA64) || defined(TARG_PPC32) || defined(TARG_LOONGSON)
-    TN* tn = CGTARG_TN_For_Asm_Operand(constraint, load, pref_tn, &subclass);
+    TN* tn = CGTARG_TN_For_Asm_Operand(constraint, load, pref_tn, &subclass, 
asm_wn);
#else
-    TN* tn = CGTARG_TN_For_Asm_Operand(constraint, load, pref_tn, &subclass, 
+    TN* tn = CGTARG_TN_For_Asm_Operand(constraint, load, pref_tn, &subclass, 
asm_wn, 

                      default_type);
#endif

@@ -6714,9 +6714,9 @@
    ISA_REGISTER_SUBCLASS subclass = ISA_REGISTER_SUBCLASS_UNDEFINED;

#if defined(TARG_IA64) || defined(TARG_PPC32) || defined(TARG_LOONGSON)
-    TN* tn = CGTARG_TN_For_Asm_Operand(constraint, load, pref_tn, &subclass);
+    TN* tn = CGTARG_TN_For_Asm_Operand(constraint, load, pref_tn, &subclass, 
asm_wn);
#else
-    TN* tn = CGTARG_TN_For_Asm_Operand(constraint, load, pref_tn, &subclass, 
+    TN* tn = CGTARG_TN_For_Asm_Operand(constraint, load, pref_tn, &subclass, 
asm_wn,
                      MTYPE_I4);
#endif


Modified: trunk/osprey/be/cg/x8664/cgtarget.cxx
===================================================================
--- trunk/osprey/be/cg/x8664/cgtarget.cxx    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/cg/x8664/cgtarget.cxx    2010-10-19 22:49:38 UTC (rev 3377)
@@ -105,6 +105,7 @@
#include "calls.h"
#include "cg_loop.h"
#include "config_lno.h"  // for LNO_Prefetch_Ahead
+#include "erbe.h"

UINT32 CGTARG_branch_taken_penalty;
BOOL CGTARG_branch_taken_penalty_overridden = FALSE;
@@ -3111,6 +3112,7 @@
                            const WN* load,
                            TN* pref_tn,
                            ISA_REGISTER_SUBCLASS* subclass, 
+                          const WN* asm_wn,
              TYPE_ID type)
{
  // skip constraint modifiers:
@@ -3185,17 +3187,21 @@
      // immediate could have been put in preg by wopt
      load = Preg_Is_Rematerializable(WN_load_offset(load), NULL);
    }
-    FmtAssert(load && (WN_operator(load) == OPR_INTCONST ||
+    if (!(load && (WN_operator(load) == OPR_INTCONST ||
                        (WN_operator(load) == OPR_LDA &&
-                        ST_sym_class(WN_st(load)) == CLASS_CONST)),
-              ("Cannot find immediate operand for ASM"));
+                        ST_sym_class(WN_st(load)) == CLASS_CONST)))) {
+      ErrMsgSrcpos(EC_Invalid_Asm_Constrain, WN_Get_Linenum(asm_wn),
+                    ": Cannot find immediate operand for ASM");
+    }
    if (WN_operator(load) == OPR_INTCONST)
    {
      ret_tn = Gen_Literal_TN(WN_const_val(load), 
                              MTYPE_bit_size(WN_rtype(load))/8);
      // Bugs 3177, 3043 - safety check from gnu/config/i386/i386.h.
-      FmtAssert(CONST_OK_FOR_LETTER(WN_const_val(load), *constraint), 
-      ("The value of immediate operand supplied is not within expected 
range."));
+      if (!CONST_OK_FOR_LETTER(WN_const_val(load), *constraint)) {
+        ErrMsgSrcpos(EC_Invalid_Asm_Constrain, WN_Get_Linenum(asm_wn),
+                ": The value of immediate operand supplied is not within 
expected range.");
+      }
    }
    else
    {

Modified: trunk/osprey/be/com/erbe.desc
===================================================================
--- trunk/osprey/be/com/erbe.desc    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/com/erbe.desc    2010-10-19 22:49:38 UTC (rev 3377)
@@ -339,6 +339,10 @@
    1, ET_INT, 0,0,0,0 },
#endif /* TARG_NVISA */

+  { EC_Invalid_Asm_Constrain, EM_User | ES_ERRABORT, RAG_EN_NONE,
+    "Invalid 'asm' constrain %s",
+    1, ET_STRING, 0,0,0,0 },
+
  /* All error descriptor lists must end with a -1 error code: */
  { -1,    0, RAG_EN_NONE, "", 0, 0,0,0,0,0,0 }
};

Modified: trunk/osprey/be/com/erbe.h
===================================================================
--- trunk/osprey/be/com/erbe.h    2010-10-19 09:34:01 UTC (rev 3376)
+++ trunk/osprey/be/com/erbe.h    2010-10-19 22:49:38 UTC (rev 3377)
@@ -190,9 +190,11 @@
#define EC_Ptr_Assumed_Global    EC_BASE_BE+152
#define EC_Load_Past_Struct    EC_BASE_BE+153
#define EC_Shared_Atomic64_Opnd  EC_BASE_BE+154
-#define EC_Memset_Too_Large EC_BASE_BE+155 /* int */
+#define EC_Memset_Too_Large      EC_BASE_BE+155 /* int */
#endif /* TARG_NVISA */

+#define EC_Invalid_Asm_Constrain EC_BASE_BE+156 /* str */
+
#ifdef __cplusplus
}
#endif


------------------------------------------------------------------------------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly 
Flex(R) Builder(TM)) enable the development of rich applications that run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel



      
------------------------------------------------------------------------------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly 
Flex(R) Builder(TM)) enable the development of rich applications that run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to