mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-23 19:03:59 +08:00
[multiple changes]
2014-04-24 Segher Boessenkool <segher@kernel.crashing.org> PR target/60822 * config/m68k/m68k.md (extendplussidi): Don't allow memory for operand 1. 2014-04-24 Jeff Law <law@redhat.com> PR target/60822 * gcc.c-torture/pr60822.c: New test. * gcc.c-torture/pr60822.x: New test. From-SVN: r209759
This commit is contained in:
parent
0b18fd1b20
commit
2f7ac5ce57
@ -1,3 +1,9 @@
|
||||
2014-04-24 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
PR target/60822
|
||||
* config/m68k/m68k.md (extendplussidi): Don't allow memory for
|
||||
operand 1.
|
||||
|
||||
2014-04-24 Dimitris Papavasiliou <dpapavas@gmail.com>
|
||||
|
||||
* flag-types.h (enum ivar_visibility): Add.
|
||||
|
@ -1868,9 +1868,11 @@
|
||||
;; Maybe there is a way to make that the general case, by forcing the
|
||||
;; result of the SI tree to be in the lower register of the DI target
|
||||
|
||||
;; Don't allow memory for operand 1 as that would require an earlyclobber
|
||||
;; which results in worse code
|
||||
(define_insn "extendplussidi"
|
||||
[(set (match_operand:DI 0 "register_operand" "=d")
|
||||
(sign_extend:DI (plus:SI (match_operand:SI 1 "general_operand" "%rmn")
|
||||
(sign_extend:DI (plus:SI (match_operand:SI 1 "general_operand" "%rn")
|
||||
(match_operand:SI 2 "general_operand" "rmn"))))]
|
||||
""
|
||||
{
|
||||
|
@ -1,3 +1,9 @@
|
||||
2014-04-24 Jeff Law <law@redhat.com>
|
||||
|
||||
PR target/60822
|
||||
* gcc.c-torture/pr60822.c: New test.
|
||||
* gcc.c-torture/pr60822.x: New test.
|
||||
|
||||
2014-04-24 Dinar Temirbulatov <dtemirbulatov@gmail.com>
|
||||
|
||||
PR c++/57958
|
||||
|
24
gcc/testsuite/gcc.c-torture/execute/pr60822.c
Normal file
24
gcc/testsuite/gcc.c-torture/execute/pr60822.c
Normal file
@ -0,0 +1,24 @@
|
||||
struct X {
|
||||
char fill0[800000];
|
||||
int a;
|
||||
char fill1[900000];
|
||||
int b;
|
||||
};
|
||||
|
||||
int __attribute__((noinline,noclone))
|
||||
Avg(struct X *p, int s)
|
||||
{
|
||||
return (s * (long long)(p->a + p->b)) >> 17;
|
||||
}
|
||||
|
||||
struct X x;
|
||||
|
||||
int main()
|
||||
{
|
||||
x.a = 1 << 17;
|
||||
x.b = 2 << 17;
|
||||
if (Avg(&x, 1) != 3)
|
||||
__builtin_abort();
|
||||
return 0;
|
||||
}
|
||||
|
7
gcc/testsuite/gcc.c-torture/execute/pr60822.x
Normal file
7
gcc/testsuite/gcc.c-torture/execute/pr60822.x
Normal file
@ -0,0 +1,7 @@
|
||||
load_lib target-supports.exp
|
||||
|
||||
if { [check_effective_target_int32plus] } {
|
||||
return 0
|
||||
}
|
||||
|
||||
return 1;
|
Loading…
Reference in New Issue
Block a user