Merge lp:~linaro-toolchain-dev/gcc-linaro/lp-689887-armel-ice into lp:gcc-linaro/4.5

Proposed by Chung-Lin Tang
Status: Rejected
Rejected by: Loïc Minier
Proposed branch: lp:~linaro-toolchain-dev/gcc-linaro/lp-689887-armel-ice
Merge into: lp:gcc-linaro/4.5
Diff against target: 217 lines (+74/-15)
6 files modified
ChangeLog.linaro (+20/-0)
gcc/config/arm/arm-protos.h (+1/-0)
gcc/config/arm/arm.c (+28/-10)
gcc/config/arm/arm.h (+2/-1)
gcc/config/arm/predicates.md (+5/-4)
gcc/testsuite/gcc.target/arm/20110112-1.c (+18/-0)
To merge this branch: bzr merge lp:~linaro-toolchain-dev/gcc-linaro/lp-689887-armel-ice
Reviewer Review Type Date Requested Status
Ramana Radhakrishnan (community) Needs Fixing
Linaro Toolchain Builder Needs Fixing
Review via email: mp+54945@code.launchpad.net

Description of the change

This merges the fix for LP:689887 to Linaro 4.5, posted upstream here:
http://gcc.gnu.org/ml/gcc-patches/2011-01/msg00794.html

Per the 'upstream timeout' discussion during the Monday (2011-03-21) meeting, I'm proposing merge of this fix into Linaro first. I'll update later if the upstream patch has more changes or comments by the ARM maintainers.

To post a comment you must log in.
Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild has taken a snapshot of this branch at r99490 and queued it for build.

The snapshot is available at:
 http://ex.seabright.co.nz/snapshots/

and named something like gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice.*

You can track the build queue at:
 http://ex.seabright.co.nz/helpers/scheduler

cbuild-snapshot: gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice
cbuild-state: check

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on i686-lucid-cbuild93-scorpius-i686r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice/logs/i686-lucid-cbuild93-scorpius-i686r1

cbuild-checked: i686-lucid-cbuild93-scorpius-i686r1

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on x86_64-maverick-cbuild93-crucis-x86_64r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice/logs/x86_64-maverick-cbuild93-crucis-x86_64r1

cbuild-checked: x86_64-maverick-cbuild93-crucis-x86_64r1

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on armv7l-maverick-cbuild93-ursa1-cortexa8r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice/logs/armv7l-maverick-cbuild93-ursa1-cortexa8r1

cbuild-checked: armv7l-maverick-cbuild93-ursa1-cortexa8r1

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild had trouble building this on armv7l-maverick-cbuild93-ursa3-cortexa9r1.
See the following failure logs:
 gcc-build-failed.txt failed.txt

under the build results at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice/logs/armv7l-maverick-cbuild93-ursa3-cortexa9r1

cbuild-checked: armv7l-maverick-cbuild93-ursa3-cortexa9r1

review: Needs Fixing
Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild had trouble building this on armv7l-maverick-cbuild93-ursa2-cortexa9r1.
See the following failure logs:
 gcc-build-failed.txt failed.txt

under the build results at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice/logs/armv7l-maverick-cbuild93-ursa2-cortexa9r1

cbuild-checked: armv7l-maverick-cbuild93-ursa2-cortexa9r1

review: Needs Fixing
Revision history for this message
Ramana Radhakrishnan (ramana) wrote :

Bootstrap object comparison failures needs investigation.

Ramana

Revision history for this message
Ramana Radhakrishnan (ramana) wrote :

From the log above.

Bootstrap comparison failure!
gcc/lto/lto.o differs
make[6]: *** [compare] Error 1
make[6]: Leaving directory `/scratch/cbuild/slave/slaves/ursa3/gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice/gcc/default/build'
make[5]: *** [stage3-bubble] Error 2
make[5]: Leaving directory `/scratch/cbuild/slave/slaves/ursa3/gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice/gcc/default/build'
make[4]: *** [all] Error 2
make[4]: Leaving directory `/scratch/cbuild/slave/slaves/ursa3/gcc-linaro-4.5+bzr99490~cltang~lp-689887-armel-ice/gcc/default/build'

Revision history for this message
Ramana Radhakrishnan (ramana) :
review: Needs Fixing

Unmerged revisions

99490. By Chung-Lin Tang

2011-03-26 Chung-Lin Tang <email address hidden>

 LP:689887

 gcc/
 * config/arm/arm.h (enum arm_cond_code): Add ARM_COND_INVALID.
 * config/arm/arm.c (arm_comparison_to_cond_code): Renamed from
 get_arm_condition_code(), change gcc_unreachable()s to return
 ARM_COND_INVALID.
 (get_arm_condition_code): Implement by calling
 arm_comparison_to_cond_code(), with result test by gcc_assert().
 (arm_valid_comparison_p): New function to test for valid ARM
 comparison RTX.
 * config/arm/arm-protos.h (arm_valid_comparison_p): Add prototype.
 * config/arm/predicates.md (arm_comparison_operator): Add
 additional check based on arm_valid_comparison_p().

 gcc/testsuite/
 * gcc.target/arm/20110112-1.c: New test.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'ChangeLog.linaro'
2--- ChangeLog.linaro 2011-03-11 17:36:50 +0000
3+++ ChangeLog.linaro 2011-03-26 05:41:55 +0000
4@@ -1,3 +1,23 @@
5+2011-03-26 Chung-Lin Tang <cltang@codesourcery.com>
6+
7+ LP:689887
8+
9+ gcc/
10+ * config/arm/arm.h (enum arm_cond_code): Add ARM_COND_INVALID.
11+ * config/arm/arm.c (arm_comparison_to_cond_code): Renamed from
12+ get_arm_condition_code(), change gcc_unreachable()s to return
13+ ARM_COND_INVALID.
14+ (get_arm_condition_code): Implement by calling
15+ arm_comparison_to_cond_code(), with result test by gcc_assert().
16+ (arm_valid_comparison_p): New function to test for valid ARM
17+ comparison RTX.
18+ * config/arm/arm-protos.h (arm_valid_comparison_p): Add prototype.
19+ * config/arm/predicates.md (arm_comparison_operator): Add
20+ additional check based on arm_valid_comparison_p().
21+
22+ gcc/testsuite/
23+ * gcc.target/arm/20110112-1.c: New test.
24+
25 2011-03-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
26
27 LP:730440
28
29=== modified file 'gcc/config/arm/arm-protos.h'
30--- gcc/config/arm/arm-protos.h 2011-02-08 12:07:29 +0000
31+++ gcc/config/arm/arm-protos.h 2011-03-26 05:41:55 +0000
32@@ -109,6 +109,7 @@
33 extern enum machine_mode arm_select_cc_mode (RTX_CODE, rtx, rtx);
34 extern enum machine_mode arm_select_dominance_cc_mode (rtx, rtx,
35 HOST_WIDE_INT);
36+extern bool arm_valid_comparison_p (rtx);
37 extern rtx arm_gen_compare_reg (RTX_CODE, rtx, rtx);
38 extern rtx arm_gen_return_addr_mask (void);
39 extern void arm_reload_in_hi (rtx *);
40
41=== modified file 'gcc/config/arm/arm.c'
42--- gcc/config/arm/arm.c 2011-03-02 11:29:06 +0000
43+++ gcc/config/arm/arm.c 2011-03-26 05:41:55 +0000
44@@ -87,6 +87,7 @@
45 static bool arm_assemble_integer (rtx, unsigned int, int);
46 static const char *fp_const_from_val (REAL_VALUE_TYPE *);
47 static arm_cc get_arm_condition_code (rtx);
48+static arm_cc arm_comparison_to_cond_code (rtx);
49 static HOST_WIDE_INT int_log2 (HOST_WIDE_INT);
50 static rtx is_jump_table (rtx);
51 static const char *output_multi_immediate (rtx *, const char *, const char *,
52@@ -17149,6 +17150,23 @@
53 static enum arm_cond_code
54 get_arm_condition_code (rtx comparison)
55 {
56+ enum arm_cond_code code = arm_comparison_to_cond_code (comparison);
57+ gcc_assert (code != ARM_COND_INVALID);
58+ return code;
59+}
60+
61+/* Tests if the comparison RTX is valid for ARM. */
62+bool
63+arm_valid_comparison_p (rtx comparison)
64+{
65+ return (arm_comparison_to_cond_code (comparison) != ARM_COND_INVALID);
66+}
67+
68+/* Function that maps the relation between comparison RTX
69+ vs. ARM condition codes. */
70+static enum arm_cond_code
71+arm_comparison_to_cond_code (rtx comparison)
72+{
73 enum machine_mode mode = GET_MODE (XEXP (comparison, 0));
74 enum arm_cond_code code;
75 enum rtx_code comp_code = GET_CODE (comparison);
76@@ -17184,7 +17202,7 @@
77 case EQ: return ARM_EQ;
78 case GE: return ARM_PL;
79 case LT: return ARM_MI;
80- default: gcc_unreachable ();
81+ default: return ARM_COND_INVALID;
82 }
83
84 case CC_Zmode:
85@@ -17192,7 +17210,7 @@
86 {
87 case NE: return ARM_NE;
88 case EQ: return ARM_EQ;
89- default: gcc_unreachable ();
90+ default: return ARM_COND_INVALID;
91 }
92
93 case CC_Nmode:
94@@ -17200,7 +17218,7 @@
95 {
96 case NE: return ARM_MI;
97 case EQ: return ARM_PL;
98- default: gcc_unreachable ();
99+ default: return ARM_COND_INVALID;
100 }
101
102 case CCFPEmode:
103@@ -17225,7 +17243,7 @@
104 /* UNEQ and LTGT do not have a representation. */
105 case UNEQ: /* Fall through. */
106 case LTGT: /* Fall through. */
107- default: gcc_unreachable ();
108+ default: return ARM_COND_INVALID;
109 }
110
111 case CC_SWPmode:
112@@ -17241,7 +17259,7 @@
113 case GTU: return ARM_CC;
114 case LEU: return ARM_CS;
115 case LTU: return ARM_HI;
116- default: gcc_unreachable ();
117+ default: return ARM_COND_INVALID;
118 }
119
120 case CC_Cmode:
121@@ -17249,7 +17267,7 @@
122 {
123 case LTU: return ARM_CS;
124 case GEU: return ARM_CC;
125- default: gcc_unreachable ();
126+ default: return ARM_COND_INVALID;
127 }
128
129 case CC_CZmode:
130@@ -17261,7 +17279,7 @@
131 case GTU: return ARM_HI;
132 case LEU: return ARM_LS;
133 case LTU: return ARM_CC;
134- default: gcc_unreachable ();
135+ default: return ARM_COND_INVALID;
136 }
137
138 case CC_NCVmode:
139@@ -17271,7 +17289,7 @@
140 case LT: return ARM_LT;
141 case GEU: return ARM_CS;
142 case LTU: return ARM_CC;
143- default: gcc_unreachable ();
144+ default: return ARM_COND_INVALID;
145 }
146
147 case CCmode:
148@@ -17287,10 +17305,10 @@
149 case GTU: return ARM_HI;
150 case LEU: return ARM_LS;
151 case LTU: return ARM_CC;
152- default: gcc_unreachable ();
153+ default: return ARM_COND_INVALID;
154 }
155
156- default: gcc_unreachable ();
157+ default: return ARM_COND_INVALID;
158 }
159 }
160
161
162=== modified file 'gcc/config/arm/arm.h'
163--- gcc/config/arm/arm.h 2011-02-08 12:07:29 +0000
164+++ gcc/config/arm/arm.h 2011-03-26 05:41:55 +0000
165@@ -149,7 +149,8 @@
166 typedef enum arm_cond_code
167 {
168 ARM_EQ = 0, ARM_NE, ARM_CS, ARM_CC, ARM_MI, ARM_PL, ARM_VS, ARM_VC,
169- ARM_HI, ARM_LS, ARM_GE, ARM_LT, ARM_GT, ARM_LE, ARM_AL, ARM_NV
170+ ARM_HI, ARM_LS, ARM_GE, ARM_LT, ARM_GT, ARM_LE, ARM_AL, ARM_NV,
171+ ARM_COND_INVALID
172 }
173 arm_cc;
174
175
176=== modified file 'gcc/config/arm/predicates.md'
177--- gcc/config/arm/predicates.md 2011-03-02 12:28:41 +0000
178+++ gcc/config/arm/predicates.md 2011-03-26 05:41:55 +0000
179@@ -237,10 +237,11 @@
180 ;; True for integer comparisons and, if FP is active, for comparisons
181 ;; other than LTGT or UNEQ.
182 (define_special_predicate "arm_comparison_operator"
183- (ior (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu")
184- (and (match_test "TARGET_32BIT && TARGET_HARD_FLOAT
185- && (TARGET_FPA || TARGET_VFP)")
186- (match_code "unordered,ordered,unlt,unle,unge,ungt"))))
187+ (and (ior (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu")
188+ (and (match_test "TARGET_32BIT && TARGET_HARD_FLOAT
189+ && (TARGET_FPA || TARGET_VFP)")
190+ (match_code "unordered,ordered,unlt,unle,unge,ungt")))
191+ (match_test "arm_valid_comparison_p (op)")))
192
193 (define_special_predicate "lt_ge_comparison_operator"
194 (match_code "lt,ge"))
195
196=== added file 'gcc/testsuite/gcc.target/arm/20110112-1.c'
197--- gcc/testsuite/gcc.target/arm/20110112-1.c 1970-01-01 00:00:00 +0000
198+++ gcc/testsuite/gcc.target/arm/20110112-1.c 2011-03-26 05:41:55 +0000
199@@ -0,0 +1,18 @@
200+/* { dg-do compile } */
201+/* { dg-options "-O -march=armv7-a -mthumb" } */
202+/* { dg-require-effective-target arm_thumb2_ok } */
203+
204+#include <limits.h>
205+
206+void small (char *dst)
207+{
208+ while (1)
209+ {
210+ long long y = (long long)(*dst) << 8;
211+
212+ if (y < INT_MIN)
213+ *((int *) dst) = 0;
214+ else
215+ *((int *) dst) = 1;
216+ }
217+}

Subscribers

People subscribed via source and target branches