Hi,

Can someone review the patch for bug #830.  Thank you very much.

For the ILOAD from address const 0xffffffffffff8001, the WHIRL IR is:
   U8INTCONST -32767 (0xffffffffffff8001)
  I4I4ILOAD 0 T<4,.predef_I4,4> T<53,anon_ptr.,8>

when creating the CODEREP, after calling CANON_CR::Trim_to_16bits(),
the base of ILOAD will be trunk to 0 and -32767 will be stored to the
offset of the ILOAD. In current WOPT, the generated IR is:
   U4INTCONST 0 (0x0)
  I4I4ILOAD -32767 T<4,.predef_I4,4> T<53,anon_ptr.,8>

We can find the type of the address is converted to U4. This is done
by CODEREP::Set_dtyp_const_val(MTYPE dt, INT64 v). When the constant
is in the range of U4, the dtyp will be set to U4. This will cause bad
code generation in CG. Since both the base and offset are 4 bytes, the
CG will generate ldc32 for the constant and finally generate the movl
instruction.

Here is a patch to address this issue. The basic idea is to make sure
the dtyp for address is always Pointer_type.
Index: osprey/be/opt/opt_htable.cxx
===================================================================
--- osprey/be/opt/opt_htable.cxx        (revision 3648)
+++ osprey/be/opt/opt_htable.cxx        (working copy)
@@ -2534,6 +2534,10 @@
   CODEREP          *retv;
   OPERATOR         oper = OPCODE_operator(opc);

+  // make sure the dtyp for address const is Pointer_type
+  if (lbase->Kind() == CK_CONST && lbase->Dtyp() != Pointer_type)
+    lbase->Set_dtyp_strictly(Pointer_type);
+
   cr->Init_ivar(opc, dtyp, occ, dsctyp, lodty, lbase, sbase,
                ofst, size, field_id);
   // all IVAR codereps have a mu_node


-- 
Regards,
Lai Jian-Xin

------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to