Hi, The attached patch is a proposed fix for bug# 763. The failing example and description of the problem and fix are attached here and also to the bug report. Can a gatekeeper please review the fix?
Thanks. -Pallavi
fix763.p
Description: fix763.p
$ cat sample.c
typedef struct S1 {
float f[2];
} S1;
S1 operator/ (S1 a, float b) { }
struct S2 {
void copy(const S2& v) {
for (int i = 0; i < 10; i++)
t[i] = v[i];
}
S1 operator[](int index) const {
return t[index];
}
void div(const S2& a, float& b) {
for (int i = 0; i < 10; i++)
t[i] = a.t[i] / b;
}
S1 t[10];
};
class C1 {
public:
const C1& operator=(const C1& c) {
S2& t = (*this).s;
t.copy(c.s);
}
S2 s;
};
C1 operator/(C1& a, float& b) {
C1 c;
(c.s).div(a.s, b);
return c;
}
class C2 {
C1 temp1;
void func1();
};
void C2::func1(){
float f2;
temp1 = temp1/f2;
}
$ openCC -c -O3 sample.c
### Assertion failure at line 2344 of ...osprey/be/opt/opt_htable.cxx:
### Compiler Error in file sample.c during Global Optimization -- Create
CODEMAP Representation phase:
### CODEMAP::Add_def: dtyp and dsctyp mismatch.
openCC INTERNAL ERROR: ...lib/gcc-lib/x86_64-open64-linux/4.2/be returned
non-zero status 1
Problem:
Coderep creation encounters the following WN:
0x80f6838: F4F4LDID 55 <1,10,.preg_F4> T<10,.predef_F4,4> # anon4_1
0x80f6458: MSTID 0 <2,29,rr> T<56,S1,4> {line: 0/0}
which causes the following assertion to fail in opt_htable.cxx:
// Create a new coderep node for this new variable version in the htable
CODEREP *
CODEMAP::Add_def(...) {
...
if (MTYPE_is_float(dtyp)) {
FmtAssert(MTYPE_is_float(dsctyp) && MTYPE_size_min(dtyp) ==
MTYPE_size_min(dsctyp),
("CODEMAP::Add_def: dtyp and dsctyp mismatch."));
}
...
}
where, the dtyp corresponds to the rtype of the kid (MTYPE_F4)
and dsctyp corresponds to the desc type of the parent (MTYPE_M).
The whirl node shown above results from array scalarization involving the
following nodes:
###Say the following represents A[i] = x:
0x80f5f38: F4F4LDID 0 <2,58,rr> T<10,.predef_F4,4>
0x80f5f78: U8LDA 0 <2,6,anon4> T<58,anon_ptr.,8>
0x80f5f98: U4INTCONST 10 (0xa)
0x80f5fb8: I4I4LDID 50 <1,4,.preg_I4> T<4,.predef_I4,4> # i
0x80f5fd8: I8I4CVT
0x80f5f58: U8ARRAY 1 8
0x80f6008: F4ISTORE 0 T<59,anon_ptr.,8> {line: 1/15}
...
###Array scalarization detects use of A[i] say y = A[i]
0x80f63a8: U8LDA 0 <2,6,anon4> T<58,anon_ptr.,8>
0x80f63c8: U4INTCONST 10 (0xa)
0x80f63e8: I4I4LDID 51 <1,4,.preg_I4> T<4,.predef_I4,4> # i
0x80f6408: I8I4CVT
0x80f6388: U8ARRAY 1 8
0x80f6428: MMILOAD 0 T<56,S1,4,C> T<69,anon_ptr.,8>
0x80f6458: MSTID 0 <2,29,rr> T<56,S1,4> {line: 0/0}
###New node is created to represent preg = x
0x80f5f38: F4F4LDID 0 <2,58,rr> T<10,.predef_F4,4>
0x80f6738: F4PAREN
0x80f6a18: F4STID 55 <1,10,.preg_F4> T<10,.predef_F4,4> # anon4_1 {line: 1/15}
...
###Definition of A[i] is replaced by A[i] = preg
0x80f61e8: F4F4LDID 55 <1,10,.preg_F4> T<10,.predef_F4,4> # anon4_1
0x80f5f78: U8LDA 0 <2,6,anon4> T<58,anon_ptr.,8>
0x80f5f98: U4INTCONST 10 (0xa)
0x80f5fb8: I4I4LDID 53 <1,4,.preg_I4> T<4,.predef_I4,4> # _i_0
0x80f5fd8: I8I4CVT
0x80f5f58: U8ARRAY 1 8
0x80f6008: F4ISTORE 0 T<59,anon_ptr.,8> {line: 1/15}
...
###Use of A[i] is replaced by y = preg, leading to the problematic Whirl node.
0x80f6838: F4F4LDID 55 <1,10,.preg_F4> T<10,.predef_F4,4> # anon4_1
0x80f6458: MSTID 0 <2,29,rr> T<56,S1,4> {line: 0/0}
At the beginning of function 'Process_Store' in sclrze.cxx, a check is done to
avoid scalarizing MTYPE_M stores.
However, the above example passes through the check because the definition does
not involve MTYPE_M but the use
(obtained from following the edges of dependence graph) does.
Solution:
Detect MTYPE_M in use of array and do not scalarize if present.
------------------------------------------------------------------------------ Forrester Wave Report - Recovery time is now measured in hours and minutes not days. Key insights are discussed in the 2010 Forrester Wave Report as part of an in-depth evaluation of disaster recovery service providers. Forrester found the best-in-class provider in terms of services and vision. Read this report now! http://p.sf.net/sfu/ibm-webcastpromo
_______________________________________________ Open64-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/open64-devel
