aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2011-08-08 19:53:55 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2011-08-08 19:53:55 +0200
commit1ad663a82a1fe4993ac63ca028477916dd9535f1 (patch)
tree0a2be7250f6278b014273bde5c9bd9112fcd10c9 /gcc
parentf0efc7aa7705facdb16a39a08137cf748c7d5f30 (diff)
downloadgcc-1ad663a82a1fe4993ac63ca028477916dd9535f1.zip
gcc-1ad663a82a1fe4993ac63ca028477916dd9535f1.tar.gz
gcc-1ad663a82a1fe4993ac63ca028477916dd9535f1.tar.bz2
re PR middle-end/49923 (__attribute__((packed)) on ARM is sometimes dropped)
2011-08-08 Martin Jambor <mjambor@suse.cz> PR middle-end/49923 * tree-sra.c (access_precludes_ipa_sra_p): Also check access memory alignment. * testsuite/gcc.dg/tree-ssa/pr49923.c: New test. From-SVN: r177572
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr49923.c55
-rw-r--r--gcc/tree-sra.c3
4 files changed, 69 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b1776f5..fc23fcb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-08 Martin Jambor <mjambor@suse.cz>
+
+ PR middle-end/49923
+ * tree-sra.c (access_precludes_ipa_sra_p): Also check access
+ memory alignment.
+
2011-08-08 Diego Novillo <dnovillo@google.com>
* Makefile.in (LTO_STREAMER_H): Add DIAGNOSTIC_H.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4ce23b7..347975d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-08-08 Martin Jambor <mjambor@suse.cz>
+
+ PR middle-end/49923
+ * gcc.dg/tree-ssa/pr49923.c: New test.
+
2011-08-08 H.J. Lu <hongjiu.lu@intel.com>
PR target/49781
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr49923.c b/gcc/testsuite/gcc.dg/tree-ssa/pr49923.c
new file mode 100644
index 0000000..83113f8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr49923.c
@@ -0,0 +1,55 @@
+/* { dg-do run } */
+/* { dg-options "-O3" } */
+
+#define PACKED __attribute__(( packed ))
+
+struct PACKED aostk_point_u8 {
+ unsigned char x;
+ unsigned char y;
+};
+
+struct PACKED aostk_size_u8 {
+ unsigned char width;
+ unsigned char height;
+};
+
+struct PACKED aostk_glyph {
+ unsigned short i;
+ struct aostk_size_u8 size;
+ char top;
+ struct aostk_point_u8 advance;
+ unsigned char pitch;
+ unsigned char* data;
+ char left;
+};
+
+
+struct PACKED aostk_font {
+ unsigned short numglyphs;
+ unsigned char height;
+ struct aostk_glyph* glyphs;
+};
+
+struct aostk_font glob_font;
+
+static struct aostk_glyph* aostk_get_glyph(struct aostk_font* f, unsigned int c) {
+ return f->glyphs;
+}
+
+int aostk_font_strwidth(struct aostk_font* font, const char* str) {
+ struct aostk_glyph* g = aostk_get_glyph(font, 0);
+ return (g != 0);
+}
+
+struct aostk_font*
+__attribute__ ((noinline, noclone))
+get_some_font (void)
+{
+ return &glob_font;
+}
+
+int main (int argc, char *argv[])
+{
+ return (int) aostk_font_strwidth (get_some_font (), "sth");
+
+}
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index cc5cd36..ab60748 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -3688,6 +3688,9 @@ access_precludes_ipa_sra_p (struct access *access)
|| gimple_code (access->stmt) == GIMPLE_ASM))
return true;
+ if (tree_non_mode_aligned_mem_p (access->expr))
+ return true;
+
return false;
}