From 92334ad2c6ad3aef4f78894c4d0f2794255317b3 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 14 Feb 2020 14:03:19 +0100 Subject: [PATCH] x86: optimize away pointless segment overrides When optimizing there's no point keeping the segment overrides when we warn about their presence in the first place. --- gas/ChangeLog | 9 ++++++++- gas/config/tc-i386.c | 11 +++++++++-- gas/testsuite/gas/i386/i386.exp | 1 + gas/testsuite/gas/i386/lea-optimize.d | 13 +++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 gas/testsuite/gas/i386/lea-optimize.d diff --git a/gas/ChangeLog b/gas/ChangeLog index 4f1aeed7c7c..0cbd2a5bbff 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,4 +1,11 @@ -2020-02-XX Jan Beulich +2020-02-14 Jan Beulich + + * config/tc-i386.c (process_operands): Drop ineffectual segment + overrides when optimizing. + * testsuite/gas/i386/lea-optimize.d: New. + * testsuite/gas/i386/i386.exp: Run new test. + +2020-02-14 Jan Beulich * config/tc-i386.c (process_operands): Also check insn prefix for ineffectual segment override warning. Don't cover possible diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 05151f2a636..d7d45de76e0 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -7165,10 +7165,17 @@ duplicate: } if ((i.seg[0] || i.prefix[SEG_PREFIX]) - && !quiet_warnings && i.tm.base_opcode == 0x8d /* lea */ && !is_any_vex_encoding(&i.tm)) - as_warn (_("segment override on `%s' is ineffectual"), i.tm.name); + { + if (!quiet_warnings) + as_warn (_("segment override on `%s' is ineffectual"), i.tm.name); + if (optimize) + { + i.seg[0] = NULL; + i.prefix[SEG_PREFIX] = 0; + } + } /* If a segment was explicitly specified, and the specified segment is not the default, use an opcode prefix to select it. If we diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index 147297e22f2..258fb763360 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -502,6 +502,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]] run_list_test "optimize-6a" "-I${srcdir}/$subdir -march=+noavx -al" run_dump_test "optimize-6b" run_list_test "optimize-7" "-I${srcdir}/$subdir -march=+noavx2 -al" + run_dump_test "lea-optimize" run_dump_test "align-branch-1a" run_dump_test "align-branch-1b" run_dump_test "align-branch-1c" diff --git a/gas/testsuite/gas/i386/lea-optimize.d b/gas/testsuite/gas/i386/lea-optimize.d new file mode 100644 index 00000000000..16e5b82daea --- /dev/null +++ b/gas/testsuite/gas/i386/lea-optimize.d @@ -0,0 +1,13 @@ +#as: -O -q +#objdump: -dw +#name: i386 LEA-like segment overrride dropping +#source: lea.s + +.*: +file format .* + +Disassembly of section .text: + +0+ : +[ ]*[0-9a-f]+:[ ]+8d 00[ ]+lea[ ]+\(%eax\),%eax +[ ]*[0-9a-f]+:[ ]+8d 00[ ]+lea[ ]+\(%eax\),%eax +#pass -- 2.39.2