re PR tree-optimization/63595 (Segmentation faults inside kernel)
Fix for PR63595 * gcc.dg/ipa/pr63595.c: New test. * ipa-icf.c (sem_function::compare_phi_node): PHI result comparison From-SVN: r216662
This commit is contained in:
parent
237d8521e9
commit
59f084e034
4 changed files with 80 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2014-10-24 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* ipa-icf.c (sem_function::compare_phi_node): PHI result comparison
|
||||
added.
|
||||
|
||||
2014-10-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* config/aarch64/aarch64-elf-raw.h (CA53_ERR_835769_SPEC): Define.
|
||||
|
|
|
@ -869,6 +869,12 @@ sem_function::compare_phi_node (basic_block bb1, basic_block bb2)
|
|||
phi1 = gsi_stmt (si1);
|
||||
phi2 = gsi_stmt (si2);
|
||||
|
||||
tree phi_result1 = gimple_phi_result (phi1);
|
||||
tree phi_result2 = gimple_phi_result (phi2);
|
||||
|
||||
if (!m_checker->compare_operand (phi_result1, phi_result2))
|
||||
return return_false_with_msg ("PHI results are different");
|
||||
|
||||
size1 = gimple_phi_num_args (phi1);
|
||||
size2 = gimple_phi_num_args (phi2);
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2014-10-24 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* gcc.dg/ipa/pr63595.c: New test.
|
||||
|
||||
2014-10-24 Christophe Lyon <christophe.lyon@linaro.org>
|
||||
|
||||
* gcc.target/aarch64/advsimd-intrinsics/vuzp.c: New file.
|
||||
|
|
65
gcc/testsuite/gcc.dg/ipa/pr63595.c
Normal file
65
gcc/testsuite/gcc.dg/ipa/pr63595.c
Normal file
|
@ -0,0 +1,65 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-details" } */
|
||||
|
||||
typedef int size_t;
|
||||
|
||||
typedef struct TypHeader {
|
||||
unsigned long size;
|
||||
struct TypHeader * * ptr;
|
||||
char name[3];
|
||||
unsigned char type;
|
||||
} * TypHandle;
|
||||
|
||||
__attribute__((noinline))
|
||||
static TypHandle Error(const char *str, unsigned long l1, unsigned long l2)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern TypHandle (* EvTab[81]) ( TypHandle hd );
|
||||
extern TypHandle (*TabProd[28][28]) ( TypHandle, TypHandle );
|
||||
|
||||
__attribute__((noinline))
|
||||
TypHandle FunOnRight (TypHandle hdCall)
|
||||
{
|
||||
TypHandle hdRes;
|
||||
TypHandle hdPnt;
|
||||
TypHandle hdElm;
|
||||
|
||||
|
||||
if ( ((hdCall)->size) != 3*((size_t)sizeof(TypHandle)) )
|
||||
return Error("",0L,0L);
|
||||
hdPnt = ((long)(((TypHandle*)((hdCall)->ptr))[1])&1 ? (((TypHandle*)((hdCall)->ptr))[1]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[1]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[1])->type))])((((TypHandle*)((hdCall)->ptr))[1])));
|
||||
hdElm = ((long)(((TypHandle*)((hdCall)->ptr))[2])&1 ? (((TypHandle*)((hdCall)->ptr))[2]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[2]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[2])->type))])((((TypHandle*)((hdCall)->ptr))[2])));
|
||||
|
||||
|
||||
hdRes = ((*TabProd[(((long)(hdPnt) & 1) ? 1 : ((hdPnt)->type))][(((long)(hdElm) & 1) ? 1 : ((hdElm)->type))])((hdPnt),(hdElm)));
|
||||
return hdRes;
|
||||
}
|
||||
|
||||
__attribute__((noinline))
|
||||
TypHandle FunOnLeft (TypHandle hdCall)
|
||||
{
|
||||
TypHandle hdRes;
|
||||
TypHandle hdPnt;
|
||||
TypHandle hdElm;
|
||||
|
||||
|
||||
if ( ((hdCall)->size) != 3*((size_t)sizeof(TypHandle)) )
|
||||
return Error("",0L,0L);
|
||||
hdPnt = ((long)(((TypHandle*)((hdCall)->ptr))[1])&1 ? (((TypHandle*)((hdCall)->ptr))[1]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[1]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[1])->type))])((((TypHandle*)((hdCall)->ptr))[1])));
|
||||
hdElm = ((long)(((TypHandle*)((hdCall)->ptr))[2])&1 ? (((TypHandle*)((hdCall)->ptr))[2]) : (* EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[2]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[2])->type))])((((TypHandle*)((hdCall)->ptr))[2])));
|
||||
|
||||
|
||||
hdRes = ((*TabProd[(((long)(hdElm) & 1) ? 1 : ((hdElm)->type))][(((long)(hdPnt) & 1) ? 1 : ((hdPnt)->type))])((hdElm),(hdPnt)));
|
||||
return hdRes;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-ipa-dump "Equal symbols: 0" "icf" } } */
|
||||
/* { dg-final { scan-ipa-dump "PHI results are different" "icf" } } */
|
||||
/* { dg-final { cleanup-ipa-dump "icf" } } */
|
Loading…
Add table
Reference in a new issue