aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2014-01-19 16:48:14 +0100
committerUros Bizjak <uros@gcc.gnu.org>2014-01-19 16:48:14 +0100
commitefc90043e6875c3e9ec19d16fb20c6a082bff5da (patch)
tree8b99085a960212c67175aa4b01a1d3bbccfd66fc /gcc
parent8fce217edcffa809d8f67e436444a32ea93dba77 (diff)
downloadgcc-efc90043e6875c3e9ec19d16fb20c6a082bff5da.zip
gcc-efc90043e6875c3e9ec19d16fb20c6a082bff5da.tar.gz
gcc-efc90043e6875c3e9ec19d16fb20c6a082bff5da.tar.bz2
re PR target/59379 (gomp_init_num_threads is compiled into an infinite loop with --with-arch=corei7 --with-cpu=slm)
PR target/59379 * config/i386/i386.md (*lea<mode>): Zero-extend return register to DImode for zero-extended addresses. From-SVN: r206774
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386.md9
2 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0fd40b5..abb54a8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,10 +1,17 @@
+2014-01-18 Uros Bizjak <ubizjak@gmail.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/59379
+ * config/i386/i386.md (*lea<mode>): Zero-extend return register
+ to DImode for zero-extended addresses.
+
2014-01-19 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/57763
* bb-reorder.c (fix_crossing_unconditional_branches): Set JUMP_LABEL
on the new indirect jump_insn and increment LABEL_NUSES (label).
-2014-01-18 H.J. Lu <hongjiu.lu@intel.com>
+2014-01-18 H.J. Lu <hongjiu.lu@intel.com>
PR bootstrap/59580
PR bootstrap/59583
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index e30f389..603fd8a 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -5428,12 +5428,17 @@
operands[0] = SET_DEST (pat);
operands[1] = SET_SRC (pat);
- /* Emit all operations in SImode for zero-extended addresses. Recall
- that x86_64 inheretly zero-extends SImode operations to DImode. */
+ /* Emit all operations in SImode for zero-extended addresses. */
if (SImode_address_operand (operands[1], VOIDmode))
mode = SImode;
ix86_split_lea_for_addr (curr_insn, operands, mode);
+
+ /* Zero-extend return register to DImode for zero-extended addresses. */
+ if (mode != <MODE>mode)
+ emit_insn (gen_zero_extendsidi2
+ (operands[0], gen_lowpart ((mode), operands[0])));
+
DONE;
}
[(set_attr "type" "lea")