diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2014-01-19 16:48:14 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2014-01-19 16:48:14 +0100 |
commit | efc90043e6875c3e9ec19d16fb20c6a082bff5da (patch) | |
tree | 8b99085a960212c67175aa4b01a1d3bbccfd66fc /gcc | |
parent | 8fce217edcffa809d8f67e436444a32ea93dba77 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 9 |
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") |